summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2002-04-22 13:55:43 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>2002-04-22 13:55:43 (GMT)
commit992d58b770daa61b209fdc3545b5e962acfc735a (patch)
treec750ee72f56144b1be66f4ae92bffed45e5212af /Lib
parentc6d2a20bc62b1221363c18c6c4f1ba9b4d2b9f8c (diff)
downloadcpython-992d58b770daa61b209fdc3545b5e962acfc735a.zip
cpython-992d58b770daa61b209fdc3545b5e962acfc735a.tar.gz
cpython-992d58b770daa61b209fdc3545b5e962acfc735a.tar.bz2
Fixes based on ideas from Christopher Smith:
- 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.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/macpath.py26
1 files changed, 21 insertions, 5 deletions
diff --git a/Lib/macpath.py b/Lib/macpath.py
index 91412c5..24f4a14 100644
--- a/Lib/macpath.py
+++ b/Lib/macpath.py
@@ -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