Use device number and i-node number (like os.path.samefile does) to check if the...
authorZac Medico <zmedico@gentoo.org>
Sat, 19 May 2007 22:57:23 +0000 (22:57 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 19 May 2007 22:57:23 +0000 (22:57 -0000)
svn path=/main/trunk/; revision=6559

bin/repoman

index b87180cc21a8dd9a64cd87b3c7402ae59e1f7a5b..8ec4af83ba3cff91def57c99a2efd7439f8ed6de 100755 (executable)
@@ -421,13 +421,28 @@ if "PWD" in os.environ and os.environ["PWD"] != mydir and \
        # the current working directory (from the shell).
        mydir = os.environ["PWD"]
 mydir = normalize_path(mydir)
+path_ids = set()
+p = mydir
+s = None
+while True:
+       s = os.stat(p)
+       path_ids.add((s.st_dev, s.st_ino))
+       if p == "/":
+               break
+       p = os.path.dirname(p)
 if mydir[-1] != "/":
        mydir += "/"
 
 for overlay in repoman_settings["PORTDIR_OVERLAY"].split():
+       overlay = os.path.realpath(overlay)
+       try:
+               s = os.stat(overlay)
+       except OSError:
+               continue
+       overlay_id = (s.st_dev, s.st_ino)
        if overlay[-1] != "/":
                overlay += "/"
-       if mydir.startswith(overlay):
+       if overlay_id in path_ids:
                portdir_overlay = overlay
                subdir = mydir[len(overlay):]
                if subdir and subdir[-1] != "/":
@@ -436,6 +451,8 @@ for overlay in repoman_settings["PORTDIR_OVERLAY"].split():
                        portdir = portdir_overlay
                break
 
+del p, s, path_ids
+
 if not portdir_overlay:
        if (repoman_settings["PORTDIR"] + os.path.sep).startswith(mydir):
                portdir_overlay = repoman_settings["PORTDIR"]