commit:     c3586c5e15c8373d08f9192713a2b03d4542faaf
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 11 18:53:26 2015 +0000
Commit:     Brian Dolbec <dolsen <AT> gentoo <DOT> org>
CommitDate: Wed Feb 11 19:05:47 2015 +0000
URL:        
http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=c3586c5e

WorldSelectedSet: fix breakage for bug #539746

Since commit 3e327e8c849cf6bfb84a3a3ec5c080ab4bc4653c,
AutounmaskTestCase.testAutounmaskAndSets fails due to incorrect logic
in WorldSelectedSet._load. Fix it to load all nested atoms/sets. Also,
fix WorldSelectedSet.write so that self._pkgset and self._setset have
separate data structures. Shared data structures triggered the
corruption reported in bug #539746.

Fixes: 3e327e8c849c ("Split @selected into @selected-packages and 
@selected-sets")

X-Gentoo-Bug: 539746
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=539746

---
 pym/portage/_sets/files.py | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/pym/portage/_sets/files.py b/pym/portage/_sets/files.py
index 6bf05d4..26ee094 100644
--- a/pym/portage/_sets/files.py
+++ b/pym/portage/_sets/files.py
@@ -215,15 +215,14 @@ class WorldSelectedSet(EditablePackageSet):
                self._setset = WorldSelectedSetsSet(eroot)
 
        def write(self):
-               self._pkgset._atoms = self._atoms
+               self._pkgset._atoms = self._atoms.copy()
                self._pkgset.write()
-               self._setset._nonatoms = self._nonatoms
+               self._setset._nonatoms = self._nonatoms.copy()
                self._setset.write()
 
        def load(self):
-               self._pkgset.load()
-               self._setset.load()
-               self._setAtoms(self._pkgset._atoms | self._pkgset._nonatoms)
+               # Iterating over these sets loads them automatically.
+               self._setAtoms(chain(self._pkgset, self._setset))
 
        def lock(self):
                self._pkgset.lock()

Reply via email to