~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

(gz) Add posixpath.normpath wrapper in osutils to remove double leading
 slash weirdness (Florian Vichot)

Show diffs side-by-side

added added

removed removed

Lines of Context:
277
277
    # copy posixpath.abspath, but use os.getcwdu instead
278
278
    if not posixpath.isabs(path):
279
279
        path = posixpath.join(getcwd(), path)
280
 
    return posixpath.normpath(path)
 
280
    return _posix_normpath(path)
281
281
 
282
282
 
283
283
def _posix_realpath(path):
284
284
    return posixpath.realpath(path.encode(_fs_enc)).decode(_fs_enc)
285
285
 
286
286
 
 
287
def _posix_normpath(path):
 
288
    path = posixpath.normpath(path)
 
289
    # Bug 861008: posixpath.normpath() returns a path normalized according to
 
290
    # the POSIX standard, which stipulates (for compatibility reasons) that two
 
291
    # leading slashes must not be simplified to one, and only if there are 3 or
 
292
    # more should they be simplified as one. So we treat the leading 2 slashes
 
293
    # as a special case here by simply removing the first slash, as we consider
 
294
    # that breaking POSIX compatibility for this obscure feature is acceptable.
 
295
    # This is not a paranoid precaution, as we notably get paths like this when
 
296
    # the repo is hosted at the root of the filesystem, i.e. in "/".    
 
297
    if path.startswith('//'):
 
298
        path = path[1:]
 
299
    return path
 
300
 
 
301
 
287
302
def _win32_fixdrive(path):
288
303
    """Force drive letters to be consistent.
289
304
 
377
392
abspath = _posix_abspath
378
393
realpath = _posix_realpath
379
394
pathjoin = os.path.join
380
 
normpath = os.path.normpath
 
395
normpath = _posix_normpath
381
396
getcwd = os.getcwdu
382
397
rename = os.rename
383
398
dirname = os.path.dirname