changeset 15566:7786b7dfbc46

merge with stable
author Matt Mackall <mpm@selenic.com>
date Wed, 23 Nov 2011 16:35:17 -0600
parents a82b6038ff08 (current diff) 3992c7df85f2 (diff)
children 8b84d040d9f9
files tests/test-casecollision-i18n.t
diffstat 3 files changed, 9 insertions(+), 48 deletions(-) [+]
line wrap: on
line diff
--- 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