fixed semantics of commonprefix to work by path elements instead of
authorSkip Montanaro <skip@pobox.com>
Wed, 12 Jul 2000 16:55:57 +0000 (16:55 +0000)
committerSkip Montanaro <skip@pobox.com>
Wed, 12 Jul 2000 16:55:57 +0000 (16:55 +0000)
characters.

Lib/dospath.py
Lib/macpath.py
Lib/ntpath.py
Lib/posixpath.py

index 98efe6751f5c26eaf90267779f4ed7d34c0267da..5a813d0e077f244d8579dd20463e24dd8ccdf307 100644 (file)
@@ -102,18 +102,26 @@ def dirname(p):
     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.
index 464bdd0f55c7a9313f63ac066b8ad0e95a638262..899577cb0b54a74ce1bfaf7e124aebc68d3e59b5 100644 (file)
@@ -89,6 +89,29 @@ def dirname(s): return split(s)[0]
 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."""
 
index 23b7ce3d4a8942cc6260ee95f2c9f08a72274af0..a1fcaa90de4ec32b830e78c8a3af3127596f23ee 100644 (file)
@@ -8,7 +8,7 @@ module as os.path.
 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 dirname(p):
 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.
index 14b9270fba37abf07592dd5d0787453ac1c77565..1be5d29011617337921447ad96758a00f656a759 100644 (file)
@@ -118,14 +118,21 @@ def dirname(p):
 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.