From 354a199f48d247fdabfcf49f2edf4183be770001 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 19 May 2007 22:57:23 +0000 Subject: Use device number and i-node number (like os.path.samefile does) to check if the current directory is inside a given overlay. This solves issues with path comparison and symlinks. svn path=/main/trunk/; revision=6559 --- bin/repoman | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/bin/repoman b/bin/repoman index b87180cc2..8ec4af83b 100755 --- a/bin/repoman +++ b/bin/repoman @@ -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"] -- cgit v1.2.3-1-g7c22