]> granicus.if.org Git - python/commitdiff
Fixes based on ideas from Christopher Smith:
authorJack Jansen <jack.jansen@cwi.nl>
Mon, 22 Apr 2002 13:55:43 +0000 (13:55 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Mon, 22 Apr 2002 13:55:43 +0000 (13:55 +0000)
- islink() now returns true for alias files
- walk() no longer follows aliases while traversing
- realpath() implemented, returning an alias-free pathname.

As this could conceivably break existing code I think it isn't a bugfix candidate.

Lib/macpath.py

index 91412c5bba372586e600ea2c5c6d4ddfc3af3ce5..24f4a141d44428b535c97873083a5661b8005343 100644 (file)
@@ -122,10 +122,13 @@ def getatime(filename):
 
 
 def islink(s):
-    """Return true if the pathname refers to a symbolic link.
-    Always false on the Mac, until we understand Aliases.)"""
+    """Return true if the pathname refers to a symbolic link."""
 
-    return False
+    try:
+       import macfs
+        return macfs.ResolveAliasFile(s)[2]
+    except:
+        return False
 
 
 def isfile(s):
@@ -223,7 +226,7 @@ def walk(top, func, arg):
     func(arg, top, names)
     for name in names:
         name = join(top, name)
-        if isdir(name):
+        if isdir(name) and not islink(name):
             walk(name, func, arg)
 
 
@@ -234,4 +237,17 @@ def abspath(path):
     return normpath(path)
 
 # realpath is a no-op on systems without islink support
-realpath = abspath
+def realpath(path):
+       path = abspath(path)
+       try:
+               import macfs
+       except ImportError:
+               return path
+       if not path:
+               return path
+       components = path.split(':')
+       path = components[0] + ':'
+       for c in components[1:]:
+               path = join(path, c)
+               path = macfs.ResolveAliasFile(path)[0].as_pathname()
+       return path