# HG changeset patch # User Remy Blank # Date 1357759637 -3600 # Node ID 0d5a22f73a1f8d7b871c51bc8426264e8c629ce4 # Parent eeadc76a75757310c0ae02586ad9cd3cc51a607b posix: fix split() for the case where the path is at the root of the filesystem posixpath.split() strips '/' from the dirname *unless it is the root*. This patch reproduces this behavior in posix.split(). The old behavior causes a crash when creating a file at the root of the repo with localrepo.wfile() when the repo is at the root of the filesystem. diff -r eeadc76a7575 -r 0d5a22f73a1f mercurial/posix.py --- a/mercurial/posix.py Wed Jan 09 21:13:52 2013 +0200 +++ b/mercurial/posix.py Wed Jan 09 20:27:17 2013 +0100 @@ -21,14 +21,26 @@ os.umask(umask) def split(p): - '''Same as os.path.split, but faster''' + '''Same as posixpath.split, but faster + + >>> import posixpath + >>> for f in ['/absolute/path/to/file', + ... 'relative/path/to/file', + ... 'file_alone', + ... 'path/to/directory/', + ... '/multiple/path//separators', + ... '/file_at_root', + ... '///multiple_leading_separators_at_root', + ... '']: + ... assert split(f) == posixpath.split(f), f + ''' ht = p.rsplit('/', 1) if len(ht) == 1: return '', p nh = ht[0].rstrip('/') if nh: return nh, ht[1] - return ht + return ht[0] + '/', ht[1] def openhardlinks(): '''return true if it is safe to hold open file handles to hardlinks''' diff -r eeadc76a7575 -r 0d5a22f73a1f tests/test-doctest.py --- a/tests/test-doctest.py Wed Jan 09 21:13:52 2013 +0200 +++ b/tests/test-doctest.py Wed Jan 09 20:27:17 2013 +0100 @@ -6,6 +6,8 @@ import mercurial.util doctest.testmod(mercurial.util) +# Only run doctests for the current platform +doctest.testmod(mercurial.util.platform) import mercurial.changelog doctest.testmod(mercurial.changelog)