[PATCH 08 of 11 V1] store: add _hybridencode2 function

Adrian Buehlmann adrian at cadifra.com
Sun Sep 30 16:56:45 CDT 2012


# HG changeset patch
# User Adrian Buehlmann <adrian at cadifra.com>
# Date 1349032916 -7200
# Node ID 52aa541f17b64a79a62b1412bfead96d6dd120ff
# Parent  2bb3d1c2ef1247b9106652c482b6382246023198
store: add _hybridencode2 function

diff --git a/mercurial/store.py b/mercurial/store.py
--- a/mercurial/store.py
+++ b/mercurial/store.py
@@ -306,6 +306,15 @@
         return _hashencode(encodedir(f), True)
     return ef
 
+def _hybridencode2(f):
+    ef = _pathencode(f)
+    if ef is None:
+        f = f[5:] # cut off "data/"
+        prefix, suffix = f[:-2], f[-2:]
+        digest = _sha(prefix).hexdigest()
+        ef = 'dh/' + _cutdirs(prefix) + digest + suffix
+    return ef
+
 def _plainhybridencode(f):
     return _hybridencode(f, False)
 
diff --git a/tests/test-hybridencode.py b/tests/test-hybridencode.py
--- a/tests/test-hybridencode.py
+++ b/tests/test-hybridencode.py
@@ -460,3 +460,137 @@
           'VWXYZ-1234567890-xxxxxxxxx-xxxxxxxxx-xxxxxxxx-xxxx'
           'xxxxx-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwww'
           'wwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww.i')
+
+def show2(s):
+    # show test input
+    print "A2 = '%s'" % s.encode("string_escape")
+
+    # show the result of the C implementation, if available
+    h = store._hybridencode2(s)
+    print "B2 = '%s'" % h.encode("string_escape")
+
+    # compare it with reference implementation in Python
+    cd = store._cutdirs
+    store._cutdirs = store._pycutdirs
+    r = store._hybridencode2(s)
+    store._cutdirs = cd
+    if h != r:
+        print "R2 = '%s'" % r.encode("string_escape")
+
+    print
+
+show2('data/a/c/p/n/c/l'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/a/c/p/n/c/l'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.d')
+show2('data/au/co/pr/nu/co/lp'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/aux/con/prn/nul/com/lpt'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/xaux/xcon/xprn/xnul/xcom/xlpt'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/auxx/conx/prnx/nulx/comx/lptx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/com0/com1/com9/lpt0/lpt1/lpt9'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/nul.txt/aux.txt'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+print
+show2('data/common/auxiliary/nulling/console/bla.com'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+print
+show2('data/.hello/ hello/hello./hello '
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/..hello/  hello/hello../hello  '
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/x.hello/x hello/hello.x/hello x'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/.hel..lo/ hel  lo/hel..lo./hel  lo '
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+print
+show2('data/abcdefgh/ijklmnop/qrstuvwx/yz012345/789'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/xabcdefgh/xijklmnop/xqrstuvwx/xyz012345/789'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/abcdefghx/ijklmnopx/qrstuvwxx/yz012345x/789'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/abcdefg.x/ijklmno x/qrstuvwxx/yz012345x/789'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+print
+show2('data/ABCDEFGH/IJKLMNOP/QRSTUVWX/YZ012345/789'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+print
+show2("data/01234567/89 !\"#%&/'()+,-.;/=[]^`{}"
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+print
+print "Windows reserved characters"
+show2('data/\\sl\\ash\\/:co:lon:/*st*ar*/?que?st?'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/"dqu"ot"/<le<ft</>rig>ht>/|pi|pe|'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+print
+show2('data/01234567/01234567/01234567/01234567/01234567'
+      '/01234567/01234567/012345/fo/aux'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/01234567/01234567/01234567/01234567/01234567'
+      '/01234567/01234567/01234/fo/aux'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/01234567x/01234567x/01234567x/01234567x/01234567x'
+      '/01234567x/01234567x/01234567x'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+print
+show2('data/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z'
+      '/0/1/2/3/4/5/6/7/8/9/aux'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z'
+      '/0/1/2/3/4/5/6/7/8/9/-/aux'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+print
+show2('data/the quick brown fox jumps over the lazy dog'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+print
+print "characters in ASCII code range 1..31"
+show2('data/\x01\x02\x03\x04\x05\x06\x07\x08'
+      '/\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+show2('data/\x11\x12\x13\x14\x15\x16\x17\x18'
+      '/\x19\x1a\x1b\x1c\x1d\x1e\x1f'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+print
+show2('data/\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f/\x80\x81\x82/'
+      '\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
+print
+show2('data/\xae_\xae_\xae'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx'
+      '/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i')
diff --git a/tests/test-hybridencode.py.out b/tests/test-hybridencode.py.out
--- a/tests/test-hybridencode.py.out
+++ b/tests/test-hybridencode.py.out
@@ -491,3 +491,110 @@
 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456789-12345-ABCDEFGHIJKLMNOPRSTUVWXYZ-abcdefghjiklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPRSTUVWXYZ-1234567890-xxxxxxxxx-xxxxxxxxx-xxxxxxxx-xxxxxxxxx-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww.i'
 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxx93352aa50377751d9e5ebdf52da1e6e69a6887a6.i'
 
+A2 = 'data/a/c/p/n/c/l/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/a/c/p/n/c/l/-xxxxxxx/-xxxxxxxdc82b1d122b9e0ddb0142aae0777a8b6a447a471.i'
+
+A2 = 'data/a/c/p/n/c/l/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.d'
+B2 = 'dh/a/c/p/n/c/l/-xxxxxxx/-xxxxxxxdc82b1d122b9e0ddb0142aae0777a8b6a447a471.d'
+
+A2 = 'data/au/co/pr/nu/co/lp/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/au/co/pr/nu/co/lp/-xxxxxxx/-xxxxxxx7b6740847314ee23ab0bf7b42dafa1163115e76d.i'
+
+A2 = 'data/aux/con/prn/nul/com/lpt/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/au~/co~/pr~/nu~/com/lpt/-xxxxxxx/-xxxxxxx061926bdeb9118cc3ac43f00b600898b2a869eb8.i'
+
+A2 = 'data/xaux/xcon/xprn/xnul/xcom/xlpt/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/xaux/xcon/xprn/xnul/xcom/xlpt/-xxxxxxx/-xxxxxxx120ab4bae5bc3de70df51bb146375c504ef3d256.i'
+
+A2 = 'data/auxx/conx/prnx/nulx/comx/lptx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/auxx/conx/prnx/nulx/comx/lptx/-xxxxxxx/-xxxxxxx67a5155d183635d2f07804e489192bf9d33e360d.i'
+
+A2 = 'data/com0/com1/com9/lpt0/lpt1/lpt9/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/com~/com~/com~/lpt~/lpt~/lpt~/-xxxxxxx/-xxxxxxx49944d4b643f45c0b0b1244f169c412e66b89466.i'
+
+A2 = 'data/nul.txt/aux.txt/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/nul~txt/aux~txt/-xxxxxxx/-xxxxxxxe93c9448409eae46dcfbad937fae9af7bb7f4638.i'
+
+
+A2 = 'data/common/auxiliary/nulling/console/bla.com/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/common/auxiliar/nulling/console/bla~com/-xxxxxxx/-xxxxxxx596dfb5eee564b1dc82aba4e88c131ed9c43d8f4.i'
+
+
+A2 = 'data/.hello/ hello/hello./hello /-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/~hello/~hello/hello~/hello~/-xxxxxxx/-xxxxxxxbf0f96c2920970dbc4e93b93d8de713352dba8a1.i'
+
+A2 = 'data/..hello/  hello/hello../hello  /-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/~~hello/~~hello/hello~~/hello~~/-xxxxxxx/-xxxxxxx43ecb0b34f2bbf0cec11e8984cda420f113c5cab.i'
+
+A2 = 'data/x.hello/x hello/hello.x/hello x/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/x~hello/x~hello/hello~x/hello~x/-xxxxxxx/-xxxxxxx199c47b42c529fa466bd7527bea6bde3270434da.i'
+
+A2 = 'data/.hel..lo/ hel  lo/hel..lo./hel  lo /-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/~hel~~lo/~hel~~lo/hel~~lo~/hel~~lo~/-xxxxxxx/-xxxxxxxcbb9c62f4140001a09b4f66bc60cdff26de4c62a.i'
+
+
+A2 = 'data/abcdefgh/ijklmnop/qrstuvwx/yz012345/789/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/abcdefgh/ijklmnop/qrstuvwx/yz012345/789/-xxxxxxx/-xxxxxxxbbecc0e19f3e45e8316a609b195f338438a2dd36.i'
+
+A2 = 'data/xabcdefgh/xijklmnop/xqrstuvwx/xyz012345/789/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/xabcdefg/xijklmno/xqrstuvw/xyz01234/789/-xxxxxxx/-xxxxxxx54377c51fcae720cf76f485560487fe409543e8e.i'
+
+A2 = 'data/abcdefghx/ijklmnopx/qrstuvwxx/yz012345x/789/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/abcdefgh/ijklmnop/qrstuvwx/yz012345/789/-xxxxxxx/-xxxxxxx02f060e669587d107264f429d0579cbe4d59bc9c.i'
+
+A2 = 'data/abcdefg.x/ijklmno x/qrstuvwxx/yz012345x/789/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/abcdefg~/ijklmno~/qrstuvwx/yz012345/789/-xxxxxxx/-xxxxxxx93d4a2a62490a87550a24b715a7f23ec112b8244.i'
+
+
+A2 = 'data/ABCDEFGH/IJKLMNOP/QRSTUVWX/YZ012345/789/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/abcdefgh/ijklmnop/qrstuvwx/yz012345/789/-xxxxxxx/-xxxxxxxf7b5f68314b4264f5d9d7852a84e1bcf01ac8fb8.i'
+
+
+A2 = 'data/01234567/89 !"#%&/\'()+,-.;/=[]^`{}/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/01234567/89~!~#%&/\'()+,-~;/=[]^`{}/-xxxxxxx/-xxxxxxx1bd2632c52bfc85f7dd6178a32283ee837b8087d.i'
+
+
+Windows reserved characters
+A2 = 'data/\\sl\\ash\\/:co:lon:/*st*ar*/?que?st?/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/~sl~ash~/~co~lon~/~st~ar~/~que~st~/-xxxxxxx/-xxxxxxxdeeb6d634b739ea590543f53312cd0e4211392a0.i'
+
+A2 = 'data/"dqu"ot"/<le<ft</>rig>ht>/|pi|pe|/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/~dqu~ot~/~le~ft~/~rig~ht~/~pi~pe~/-xxxxxxx/-xxxxxxxcc0237222c1f8cc9d171ffe264bd1bcbec6236d5.i'
+
+
+A2 = 'data/01234567/01234567/01234567/01234567/01234567/01234567/01234567/012345/fo/aux/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/01234567/01234567/01234567/01234567/01234567/01234567/01234567/012345/fo8121dca754ec009e8e7eeb37782c3e0637fccbe0.i'
+
+A2 = 'data/01234567/01234567/01234567/01234567/01234567/01234567/01234567/01234/fo/aux/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/01234567/01234567/01234567/01234567/01234567/01234567/01234567/01234/fo/au~4aca490c2d9f75c64ad33da710549eabc7718beb.i'
+
+A2 = 'data/01234567x/01234567x/01234567x/01234567x/01234567x/01234567x/01234567x/01234567x/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/01234567/01234567/01234567/01234567/01234567/01234567/01234567/012345672b861afe553849a1441098dd04079b0edcacc22c.i'
+
+
+A2 = 'data/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/0/1/2/3/4/5/6/7/8/9/aux/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/0/1/2/3/4/5/6/7/8/9/au~f2fe577ed5fed8260230e6d5d5fd1213507361f2.i'
+
+A2 = 'data/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/0/1/2/3/4/5/6/7/8/9/-/aux/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/0/1/2/3/4/5/6/7/8/9/-316249ea3d1a5db51c79210da5b68fa2bbc4040f.i'
+
+
+A2 = 'data/the quick brown fox jumps over the lazy dog/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/the~quic/-xxxxxxx/-xxxxxxxf4db863fe097a044b57aa769c5297ec311b975c8.i'
+
+
+characters in ASCII code range 1..31
+A2 = 'data/\x01\x02\x03\x04\x05\x06\x07\x08/\t\n\x0b\x0c\r\x0e\x0f\x10/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/~~~~~~~~/~~~~~~~~/-xxxxxxx/-xxxxxxxa85c2b27b1bc6093cb566c2e890076d32efe1adf.i'
+
+A2 = 'data/\x11\x12\x13\x14\x15\x16\x17\x18/\x19\x1a\x1b\x1c\x1d\x1e\x1f/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/~~~~~~~~/~~~~~~~/-xxxxxxx/-xxxxxxx1235a662ee1501334e9109c33c79bae75c57d68a.i'
+
+
+A2 = 'data/xyz{|}~\x7f/\x80\x81\x82/\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/xyz{~}~~/~ab/xyz{~}~~/-xxxxxxx/-xxxxxxx4b6498da26ad4ea600c9cf9dd6fe5395d60122f5.i'
+
+
+A2 = 'data/\xae_\xae_\xae/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx.i'
+B2 = 'dh/~_~_~/-xxxxxxx/-xxxxxxx4f94955ac53c8a5cd6eaa8edcf07c08e99128d2b.i'
+


More information about the Mercurial-devel mailing list