Use device number and i-node number (like os.path.samefile does) to check if the...
authorZac Medico <zmedico@gentoo.org>
Wed, 23 May 2007 20:40:20 +0000 (20:40 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 23 May 2007 20:40:20 +0000 (20:40 -0000)
svn path=/main/branches/2.1.2/; revision=6605

bin/repoman

index 556872a02816edebfbceda6b447a2a95765d4f52..36097550ca9f90fc02b588dfff88d0b082780818 100755 (executable)
@@ -409,13 +409,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] != "/":
@@ -424,6 +439,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"]