--- a/hgext/convert/filemap.py Wed Nov 23 02:44:11 2011 +0100
+++ b/hgext/convert/filemap.py Wed Nov 23 16:35:17 2011 -0600
@@ -99,6 +99,8 @@
if newpre == '.':
return suf
if suf:
+ if newpre.endswith('/'):
+ return newpre + suf
return newpre + '/' + suf
return newpre
return name
--- a/mercurial/posix.py Wed Nov 23 02:44:11 2011 +0100
+++ b/mercurial/posix.py Wed Nov 23 16:35:17 2011 -0600
@@ -176,13 +176,15 @@
u = path.decode('utf-8')
except UnicodeDecodeError:
# percent-encode any characters that don't round-trip
- p2 = path.decode('utf-8', 'replace').encode('utf-8')
+ p2 = path.decode('utf-8', 'ignore').encode('utf-8')
s = ""
- for a, b in zip(path, p2):
- if a != b:
- s += "%%%02X" % ord(a)
+ pos = 0
+ for c in path:
+ if p2[pos:pos + 1] == c:
+ s += c
+ pos += 1
else:
- s += a
+ s += "%%%02X" % ord(c)
u = s.decode('utf-8')
# Decompose then lowercase (HFS+ technote specifies lower)
--- a/tests/test-casecollision-i18n.t Wed Nov 23 02:44:11 2011 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-run only on case-insensitive filesystems, because collision check at
-"hg update" is done only on case-insensitive filesystems
-
- $ "$TESTDIR/hghave" icasefs || exit 80
-
-setup repository, and target files
-
- $ HGENCODING=cp932
- $ export HGENCODING
- $ hg init t
- $ cd t
- $ python << EOF
- > names = ["\x83\x41", # cp932(0x83, 0x41='A'), UNICODE(0x30a2)
- > "\x83\x5A", # cp932(0x83, 0x5A='Z'), UNICODE(0x30bb)
- > "\x83\x61", # cp932(0x83, 0x61='a'), UNICODE(0x30c2)
- > "\x83\x7A", # cp932(0x83, 0x7A='z'), UNICODE(0x30db)
- > ]
- > for num, name in zip(range(len(names)), names):
- > # file for getting target filename of "hg add"
- > f = file(str(num), 'w'); f.write(name); f.close()
- > # target file of "hg add"
- > f = file(name, 'w'); f.write(name); f.close()
- > EOF
-
-test filename collison check at "hg add"
-
- $ hg add --config ui.portablefilenames=abort `cat 0`
- $ hg add --config ui.portablefilenames=abort `cat 1`
- $ hg add --config ui.portablefilenames=abort `cat 2`
- $ hg add --config ui.portablefilenames=abort `cat 3`
- $ hg status -a
- A \x83A (esc)
- A \x83Z (esc)
- A \x83a (esc)
- A \x83z (esc)
-
-test filename collision check at "hg update"
-
- $ hg commit -m 'revision 0'
- $ hg update null
- 0 files updated, 0 files merged, 4 files removed, 0 files unresolved
- $ hg update tip
- 4 files updated, 0 files merged, 0 files removed, 0 files unresolved