Show More
@@ -0,0 +1,43 b'' | |||||
|
1 | run only on case-insensitive filesystems, because collision check at | |||
|
2 | "hg update" is done only on case-insensitive filesystems | |||
|
3 | ||||
|
4 | $ "$TESTDIR/hghave" icasefs || exit 80 | |||
|
5 | ||||
|
6 | setup repository, and target files | |||
|
7 | ||||
|
8 | $ HGENCODING=cp932 | |||
|
9 | $ export HGENCODING | |||
|
10 | $ hg init t | |||
|
11 | $ cd t | |||
|
12 | $ python << EOF | |||
|
13 | > names = ["\x83\x41", # cp932(0x83, 0x41='A'), UNICODE(0x30a2) | |||
|
14 | > "\x83\x5A", # cp932(0x83, 0x5A='Z'), UNICODE(0x30bb) | |||
|
15 | > "\x83\x61", # cp932(0x83, 0x61='a'), UNICODE(0x30c2) | |||
|
16 | > "\x83\x7A", # cp932(0x83, 0x7A='z'), UNICODE(0x30db) | |||
|
17 | > ] | |||
|
18 | > for num, name in zip(range(len(names)), names): | |||
|
19 | > # file for getting target filename of "hg add" | |||
|
20 | > f = file(str(num), 'w'); f.write(name); f.close() | |||
|
21 | > # target file of "hg add" | |||
|
22 | > f = file(name, 'w'); f.write(name); f.close() | |||
|
23 | > EOF | |||
|
24 | ||||
|
25 | test filename collison check at "hg add" | |||
|
26 | ||||
|
27 | $ hg add --config ui.portablefilenames=abort `cat 0` | |||
|
28 | $ hg add --config ui.portablefilenames=abort `cat 1` | |||
|
29 | $ hg add --config ui.portablefilenames=abort `cat 2` | |||
|
30 | $ hg add --config ui.portablefilenames=abort `cat 3` | |||
|
31 | $ hg status -a | |||
|
32 | A \x83A (esc) | |||
|
33 | A \x83Z (esc) | |||
|
34 | A \x83a (esc) | |||
|
35 | A \x83z (esc) | |||
|
36 | ||||
|
37 | test filename collision check at "hg update" | |||
|
38 | ||||
|
39 | $ hg commit -m 'revision 0' | |||
|
40 | $ hg update null | |||
|
41 | 0 files updated, 0 files merged, 4 files removed, 0 files unresolved | |||
|
42 | $ hg update tip | |||
|
43 | 4 files updated, 0 files merged, 0 files removed, 0 files unresolved |
@@ -7,7 +7,7 b'' | |||||
7 |
|
7 | |||
8 | from node import nullid, nullrev, hex, bin |
|
8 | from node import nullid, nullrev, hex, bin | |
9 | from i18n import _ |
|
9 | from i18n import _ | |
10 | import scmutil, util, filemerge, copies, subrepo |
|
10 | import scmutil, util, filemerge, copies, subrepo, encoding | |
11 | import errno, os, shutil |
|
11 | import errno, os, shutil | |
12 |
|
12 | |||
13 | class mergestate(object): |
|
13 | class mergestate(object): | |
@@ -92,7 +92,7 b' def _checkcollision(mctx):' | |||||
92 | "check for case folding collisions in the destination context" |
|
92 | "check for case folding collisions in the destination context" | |
93 | folded = {} |
|
93 | folded = {} | |
94 | for fn in mctx: |
|
94 | for fn in mctx: | |
95 |
fold = |
|
95 | fold = encoding.lower(fn) | |
96 | if fold in folded: |
|
96 | if fold in folded: | |
97 | raise util.Abort(_("case-folding collision between %s and %s") |
|
97 | raise util.Abort(_("case-folding collision between %s and %s") | |
98 | % (fn, folded[fold])) |
|
98 | % (fn, folded[fold])) |
@@ -6,7 +6,7 b'' | |||||
6 | # GNU General Public License version 2 or any later version. |
|
6 | # GNU General Public License version 2 or any later version. | |
7 |
|
7 | |||
8 | from i18n import _ |
|
8 | from i18n import _ | |
9 | import util, error, osutil, revset, similar |
|
9 | import util, error, osutil, revset, similar, encoding | |
10 | import match as matchmod |
|
10 | import match as matchmod | |
11 | import os, errno, re, stat, sys, glob |
|
11 | import os, errno, re, stat, sys, glob | |
12 |
|
12 | |||
@@ -46,10 +46,10 b' class casecollisionauditor(object):' | |||||
46 | self._abort = abort |
|
46 | self._abort = abort | |
47 | self._map = {} |
|
47 | self._map = {} | |
48 | for f in existingiter: |
|
48 | for f in existingiter: | |
49 |
self._map[ |
|
49 | self._map[encoding.lower(f)] = f | |
50 |
|
50 | |||
51 | def __call__(self, f): |
|
51 | def __call__(self, f): | |
52 |
fl = |
|
52 | fl = encoding.lower(f) | |
53 | map = self._map |
|
53 | map = self._map | |
54 | if fl in map and map[fl] != f: |
|
54 | if fl in map and map[fl] != f: | |
55 | msg = _('possible case-folding collision for %s') % f |
|
55 | msg = _('possible case-folding collision for %s') % f |
General Comments 0
You need to be logged in to leave comments.
Login now