fixed semantics of commonprefix to work by path elements instead of
characters.
diff --git a/Lib/dospath.py b/Lib/dospath.py
index 98efe67..5a813d0 100644
--- a/Lib/dospath.py
+++ b/Lib/dospath.py
@@ -102,18 +102,26 @@
return split(p)[0]
-def commonprefix(m):
- """Return the longest prefix of all list elements."""
+# Return the longest prefix of all list elements.
+def commonprefix(m):
+ "Given a list of pathnames, returns the longest common leading component"
if not m: return ''
- prefix = m[0]
- for item in m:
+ n = m[:]
+ for i in range(len(n)):
+ n[i] = n[i].split(os.sep)
+ # if os.sep didn't have any effect, try os.altsep
+ if os.altsep and len(n[i]) == 1:
+ n[i] = n[i].split(os.altsep)
+
+ prefix = n[0]
+ for item in n:
for i in range(len(prefix)):
if prefix[:i+1] <> item[:i+1]:
prefix = prefix[:i]
if i == 0: return ''
break
- return prefix
+ return os.sep.join(prefix)
# Get size, mtime, atime of files.
diff --git a/Lib/macpath.py b/Lib/macpath.py
index 464bdd0..899577c 100644
--- a/Lib/macpath.py
+++ b/Lib/macpath.py
@@ -89,6 +89,29 @@
def basename(s): return split(s)[1]
+# Return the longest prefix of all list elements.
+# XXX completely untested on Mac!!!
+
+def commonprefix(m):
+ "Given a list of pathnames, returns the longest common leading component"
+ if not m: return ''
+ n = m[:]
+ for i in range(len(n)):
+ n[i] = n[i].split(os.sep)
+ # if os.sep didn't have any effect, try os.altsep
+ if os.altsep and len(n[i]) == 1:
+ n[i] = n[i].split(os.altsep)
+
+ prefix = n[0]
+ for item in n:
+ for i in range(len(prefix)):
+ if prefix[:i+1] <> item[:i+1]:
+ prefix = prefix[:i]
+ if i == 0: return ''
+ break
+ return os.sep.join(prefix)
+
+
def isdir(s):
"""Return true if the pathname refers to an existing directory."""
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index 23b7ce3..a1fcaa9 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -8,7 +8,7 @@
import os
import stat
import string
-
+import copy
# Normalize the case of a pathname and map slashes to backslashes.
# Other normalizations (such as optimizing '../' away) are not done
@@ -158,14 +158,17 @@
def commonprefix(m):
"Given a list of pathnames, returns the longest common leading component"
if not m: return ''
- prefix = m[0]
- for item in m:
+ n = copy.copy(m)
+ for i in range(len(n)):
+ n[i] = n[i].split(os.sep)
+ prefix = n[0]
+ for item in n:
for i in range(len(prefix)):
if prefix[:i+1] <> item[:i+1]:
prefix = prefix[:i]
if i == 0: return ''
break
- return prefix
+ return os.sep.join(prefix)
# Get size, mtime, atime of files.
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 14b9270..1be5d29 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -118,14 +118,21 @@
def commonprefix(m):
"Given a list of pathnames, returns the longest common leading component"
if not m: return ''
- prefix = m[0]
- for item in m:
+ n = m[:]
+ for i in range(len(n)):
+ n[i] = n[i].split(os.sep)
+ # if os.sep didn't have any effect, try os.altsep
+ if os.altsep and len(n[i]) == 1:
+ n[i] = n[i].split(os.altsep)
+
+ prefix = n[0]
+ for item in n:
for i in range(len(prefix)):
if prefix[:i+1] <> item[:i+1]:
prefix = prefix[:i]
if i == 0: return ''
break
- return prefix
+ return os.sep.join(prefix)
# Get size, mtime, atime of files.