Fix preserve-libs code inside dblink.unmerge() so that it will join paths
authorZac Medico <zmedico@gentoo.org>
Fri, 24 Oct 2008 20:28:57 +0000 (20:28 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 24 Oct 2008 20:28:57 +0000 (20:28 -0000)
correctly when ROOT != /.

svn path=/main/trunk/; revision=11724

pym/portage/dbapi/vartree.py

index fb5b28e336a0202b6080f81aaba13e5372f4ffdd..141585fe0093d72de63731c176498d038f43c22e 100644 (file)
@@ -1935,6 +1935,8 @@ class dblink(object):
                                # their real target before the object is found not to be
                                # in the reverse NEEDED map
                                def symlink_compare(x, y):
+                                       x = os.path.join(self.myroot, x.lstrip(os.path.sep))
+                                       y = os.path.join(self.myroot, y.lstrip(os.path.sep))
                                        if os.path.islink(x):
                                                if os.path.islink(y):
                                                        return 0
@@ -1947,20 +1949,23 @@ class dblink(object):
 
                                plib_dict[cpv].sort(symlink_compare)
                                for f in plib_dict[cpv]:
-                                       if not os.path.exists(f):
+                                       f_abs = os.path.join(self.myroot, f.lstrip(os.path.sep))
+                                       if not os.path.exists(f_abs):
                                                continue
                                        unlink_list = []
                                        consumers = self.vartree.dbapi.linkmap.findConsumers(f)
                                        if not consumers:
-                                               unlink_list.append(f)
+                                               unlink_list.append(f_abs)
                                        else:
                                                keep=False
                                                for c in consumers:
+                                                       c = os.path.join(self.myroot,
+                                                               c.lstrip(os.path.sep))
                                                        if c not in self.getcontents():
                                                                keep=True
                                                                break
                                                if not keep:
-                                                       unlink_list.append(f)
+                                                       unlink_list.append(f_abs)
                                        for obj in unlink_list:
                                                try:
                                                        if os.path.islink(obj):