Kaydet (Commit) 649f8e7d authored tarafından Georg Brandl's avatar Georg Brandl

patch [ 1105730 ] Faster commonprefix in macpath, ntpath, etc.

üst b3700592
...@@ -175,14 +175,14 @@ def lexists(path): ...@@ -175,14 +175,14 @@ def lexists(path):
def commonprefix(m): def commonprefix(m):
"Given a list of pathnames, returns the longest common leading component" "Given a list of pathnames, returns the longest common leading component"
if not m: return '' if not m: return ''
prefix = m[0] s1 = min(m)
for item in m: s2 = max(m)
for i in range(len(prefix)): n = min(len(s1), len(s2))
if prefix[:i+1] != item[:i+1]: for i in xrange(n):
prefix = prefix[:i] if s1[i] != s2[i]:
if i == 0: return '' return s1[:i]
break return s1[:n]
return prefix
def expandvars(path): def expandvars(path):
"""Dummy to retain interface-compatibility with other operating systems.""" """Dummy to retain interface-compatibility with other operating systems."""
......
...@@ -212,14 +212,13 @@ def dirname(p): ...@@ -212,14 +212,13 @@ def dirname(p):
def commonprefix(m): def commonprefix(m):
"Given a list of pathnames, returns the longest common leading component" "Given a list of pathnames, returns the longest common leading component"
if not m: return '' if not m: return ''
prefix = m[0] s1 = min(m)
for item in m: s2 = max(m)
for i in range(len(prefix)): n = min(len(s1), len(s2))
if prefix[:i+1] != item[:i+1]: for i in xrange(n):
prefix = prefix[:i] if s1[i] != s2[i]:
if i == 0: return '' return s1[:i]
break return s1[:n]
return prefix
# Get size, mtime, atime of files. # Get size, mtime, atime of files.
......
...@@ -173,14 +173,13 @@ def dirname(p): ...@@ -173,14 +173,13 @@ def dirname(p):
def commonprefix(m): def commonprefix(m):
"Given a list of pathnames, returns the longest common leading component" "Given a list of pathnames, returns the longest common leading component"
if not m: return '' if not m: return ''
prefix = m[0] s1 = min(m)
for item in m: s2 = max(m)
for i in range(len(prefix)): n = min(len(s1), len(s2))
if prefix[:i+1] != item[:i+1]: for i in xrange(n):
prefix = prefix[:i] if s1[i] != s2[i]:
if i == 0: return '' return s1[:i]
break return s1[:n]
return prefix
# Get size, mtime, atime of files. # Get size, mtime, atime of files.
......
...@@ -168,23 +168,16 @@ def dirname(p): ...@@ -168,23 +168,16 @@ def dirname(p):
return split(p)[0] return split(p)[0]
def commonprefix(ps): def commonprefix(m):
""" "Given a list of pathnames, returns the longest common leading component"
Return the longest prefix of all list elements. Purely string-based; does not if not m: return ''
separate any path parts. Why am I in os.path? s1 = min(m)
""" s2 = max(m)
if len(ps)==0: n = min(len(s1), len(s2))
return '' for i in xrange(n):
prefix= ps[0] if s1[i] != s2[i]:
for p in ps[1:]: return s1[:i]
prefix= prefix[:len(p)] return s1[:n]
for i in range(len(prefix)):
if prefix[i] <> p[i]:
prefix= prefix[:i]
if i==0:
return ''
break
return prefix
## File access functions. Why are we in os.path? ## File access functions. Why are we in os.path?
......
...@@ -178,6 +178,9 @@ Extension Modules ...@@ -178,6 +178,9 @@ Extension Modules
Library Library
------- -------
- Patch #1105730: Apply the new implementation of commonprefix in posixpath
to ntpath, macpath, os2emxpath and riscospath.
- Fix a problem in Tkinter introduced by SF patch #869468: delete bogus - Fix a problem in Tkinter introduced by SF patch #869468: delete bogus
__hasattr__ and __delattr__ methods on class Tk that were breaking __hasattr__ and __delattr__ methods on class Tk that were breaking
Tkdnd. Tkdnd.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment