Bug #211067 - Make the "portdir_overlay" and "mydir" variables contain
authorZac Medico <zmedico@gentoo.org>
Fri, 22 Feb 2008 06:46:49 +0000 (06:46 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 22 Feb 2008 06:46:49 +0000 (06:46 -0000)
paths that are consistent wrt eachother regardless of any path
irregularities that can be induced by symlinks. Consistency is achieved
by regenerating one of the paths to ensure that both paths have the exact
same mapping between inodes and paths. This consistency ensures that the
path manipulations used to calculate "repolevel" will work as intended.

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

pym/repoman/utilities.py

index 379e47e6d9b9619a0645020f54e2402aa9efe0a2..3cefff5ecca7b92482502d8fc08db52cb89330c7 100644 (file)
@@ -308,12 +308,12 @@ def FindPortdir(settings):
 
        location = normalize_path(location)
 
-       path_ids = set()
+       path_ids = {}
        p = location
        s = None
        while True:
                s = os.stat(p)
-               path_ids.add((s.st_dev, s.st_ino))
+               path_ids[(s.st_dev, s.st_ino)] = p
                if p == "/":
                        break
                p = os.path.dirname(p)
@@ -326,10 +326,12 @@ def FindPortdir(settings):
                        s = os.stat(overlay)
                except OSError:
                        continue
-               overlay_id = (s.st_dev, s.st_ino)
+               overlay = path_ids.get((s.st_dev, s.st_ino))
+               if overlay is None:
+                       continue
                if overlay[-1] != "/":
                        overlay += "/"
-               if overlay_id in path_ids:
+               if True:
                        portdir_overlay = overlay
                        subdir = location[len(overlay):]
                        if subdir and subdir[-1] != "/":