From 2fc010937573534a4682844f1e4a21ac3e3cc874 Mon Sep 17 00:00:00 2001 From: Jack Jansen Date: Sun, 6 Aug 2000 21:18:35 +0000 Subject: Rewrite of normpath() by Corran Webster, so trailing :s are removed (except for : and volume:, where they are needed). --- Lib/macpath.py | 55 +++++++++++++++++++++++-------------------------------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/Lib/macpath.py b/Lib/macpath.py index 899577c..7634f8e 100644 --- a/Lib/macpath.py +++ b/Lib/macpath.py @@ -179,39 +179,30 @@ def expanduser(path): norm_error = 'macpath.norm_error: path cannot be normalized' def normpath(s): - """Normalize a pathname: get rid of '::' sequences by backing up, - e.g., 'foo:bar::bletch' becomes 'foo:bletch'. - Raise the exception norm_error below if backing up is impossible, - e.g., for '::foo'.""" - # XXX The Unix version doesn't raise an exception but simply - # returns an unnormalized path. Should do so here too. - - import string - if ':' not in s: - return ':' + s - f = string.splitfields(s, ':') - pre = [] - post = [] - if not f[0]: - pre = f[:1] - f = f[1:] - if not f[len(f)-1]: - post = f[-1:] - f = f[:-1] - res = [] - for seg in f: - if seg: - res.append(seg) + """Normalize a pathname. Will return the same result for + equivalent paths.""" + + if ":" not in s: + return ":"+s + + comps = string.splitfields(s, ":") + i = 1 + while i < len(comps)-1: + if comps[i] == "" and comps[i-1] != "": + if i > 1: + del comps[i-1:i+1] + i = i-1 + else: + # best way to handle this is to raise an exception + raise norm_error, 'Cannot use :: immedeately after volume name' else: - if not res: raise norm_error, 'path starts with ::' - del res[len(res)-1] - if not (pre or res): - raise norm_error, 'path starts with volume::' - if pre: res = pre + res - if post: res = res + post - s = res[0] - for seg in res[1:]: - s = s + ':' + seg + i = i + 1 + + s = string.join(comps, ":") + + # remove trailing ":" except for ":" and "Volume:" + if s[-1] == ":" and len(comps) > 2 and s != ":"*len(s): + s = s[:-1] return s -- cgit v0.12