Gentoo Archives: gentoo-commits

From: "Fabian Groffen (grobian)" <grobian@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r9892 - main/branches/prefix/pym/portage/sets
Date: Mon, 14 Apr 2008 17:48:23
Message-Id: E1JlSmy-00033A-Rh@stork.gentoo.org
1 Author: grobian
2 Date: 2008-04-14 17:48:19 +0000 (Mon, 14 Apr 2008)
3 New Revision: 9892
4
5 Modified:
6 main/branches/prefix/pym/portage/sets/files.py
7 Log:
8 Merged from trunk 9865:9866
9
10 | 9866 | store sets in a different physical location than normal |
11 | genone | packages for 'world' (makes ferringb a bit happier, and might |
12 | | have other advantages in the future) |
13
14 This is a risky sync, as it requires Portage's ebuild to do the sets
15 split from world -> world_sets.
16
17
18 Modified: main/branches/prefix/pym/portage/sets/files.py
19 ===================================================================
20 --- main/branches/prefix/pym/portage/sets/files.py 2008-04-14 17:00:02 UTC (rev 9891)
21 +++ main/branches/prefix/pym/portage/sets/files.py 2008-04-14 17:48:19 UTC (rev 9892)
22 @@ -155,18 +155,75 @@
23 return rValue
24 multiBuilder = classmethod(multiBuilder)
25
26 -class WorldSet(StaticFileSet):
27 +class WorldSet(EditablePackageSet):
28 description = "Set of packages that were directly installed by the user"
29
30 def __init__(self, root):
31 - super(WorldSet, self).__init__(os.path.join(os.sep, root, PRIVATE_PATH.lstrip(os.sep), "world"))
32 + super(WorldSet, self).__init__()
33 + # most attributes exist twice as atoms and non-atoms are stored in
34 + # separate files
35 self._lock = None
36 -
37 + self._filename = os.path.join(os.sep, root, PRIVATE_PATH.lstrip(os.sep), "world")
38 + self.loader = ItemFileLoader(self._filename, self._validate)
39 + self._mtime = None
40 +
41 + self._filename2 = os.path.join(os.sep, root, PRIVATE_PATH.lstrip(os.sep), "world_sets")
42 + self.loader2 = ItemFileLoader(self._filename2, self._validate2)
43 + self._mtime2 = None
44 +
45 def _validate(self, atom):
46 - if atom.startswith(SETPREFIX):
47 - return True
48 return ValidAtomValidator(atom)
49
50 + def _validate2(self, setname):
51 + return setname.startswith(SETPREFIX)
52 +
53 + def write(self):
54 + write_atomic(self._filename, "\n".join(sorted(self._atoms))+"\n")
55 + write_atomic(self._filename2, "\n".join(sorted(self._nonatoms))+"\n")
56 +
57 + def load(self):
58 + atoms = []
59 + nonatoms = []
60 + # load atoms and non-atoms from different files so the worldfile is
61 + # backwards-compatible with older versions and other PMs, even though
62 + # it's supposed to be private state data :/
63 + try:
64 + mtime = os.stat(self._filename).st_mtime
65 + except (OSError, IOError):
66 + mtime = None
67 + if (not self._loaded or self._mtime != mtime):
68 + try:
69 + data, errors = self.loader.load()
70 + for fname in errors:
71 + for e in errors[fname]:
72 + self.errors.append(fname+": "+e)
73 + except EnvironmentError, e:
74 + if e.errno != errno.ENOENT:
75 + raise
76 + del e
77 + data = {}
78 + atoms = data.keys()
79 + self._mtime = mtime
80 + try:
81 + mtime = os.stat(self._filename2).st_mtime
82 + except (OSError, IOError):
83 + mtime = None
84 + if (not self._loaded or self._mtime2 != mtime):
85 + try:
86 + data, errors = self.loader2.load()
87 + for fname in errors:
88 + for e in errors[fname]:
89 + self.errors.append(fname+": "+e)
90 + except EnvironmentError, e:
91 + if e.errno != errno.ENOENT:
92 + raise
93 + del e
94 + data = {}
95 + nonatoms = data.keys()
96 + self._mtime2 = mtime
97 + if self._atoms != atoms or self._nonatoms != nonatoms:
98 + self._setAtoms(atoms+nonatoms)
99 +
100 def _ensure_dirs(self):
101 ensure_dirs(os.path.dirname(self._filename), gid=portage_gid, mode=02750, mask=02)
102
103
104 --
105 gentoo-commits@l.g.o mailing list