##// END OF EJS Templates
test-hybridencode: in practice, extensions aren't really unbound in length...
Adrian Buehlmann -
r17690:eb7f8359 default
parent child Browse files
Show More
@@ -1,457 +1,462
1 1 from mercurial import store
2 2
3 3 def show(s):
4 4 # show test input
5 5 print "A = '%s'" % s.encode("string_escape")
6 6
7 7 # show the result of the C implementation, if available
8 8 h = store._dothybridencode(s)
9 9 print "B = '%s'" % h.encode("string_escape")
10 10
11 11 # compare it with reference implementation in Python
12 12 r = store._hybridencode(s, True)
13 13 if h != r:
14 14 print "R = '%s'" % r.encode("string_escape")
15 15 print
16 16
17 17 show("data/abcdefghijklmnopqrstuvwxyz0123456789 !#%&'()+,-.;=[]^`{}")
18 18
19 19 print "uppercase char X is encoded as _x"
20 20 show("data/ABCDEFGHIJKLMNOPQRSTUVWXYZ")
21 21
22 22 print "underbar is doubled"
23 23 show("data/_")
24 24
25 25 print "tilde is character-encoded"
26 26 show("data/~")
27 27
28 28 print "characters in ASCII code range 1..31"
29 29 show('data/\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
30 30 '\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f')
31 31
32 32 print "characters in ASCII code range 126..255"
33 33 show('data/\x7e\x7f'
34 34 '\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f'
35 35 '\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f')
36 36 show('data/\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf'
37 37 '\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf')
38 38 show('data/\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf'
39 39 '\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf')
40 40 show('data/\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef'
41 41 '\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff')
42 42
43 43 print "Windows reserved characters"
44 44 show('data/less <, greater >, colon :, double-quote ", backslash \\'
45 45 ', pipe |, question-mark ?, asterisk *')
46 46
47 47 print "encoding directories ending in .hg, .i or .d with '.hg' suffix"
48 48 show('data/x.h.i/x.hg/x.i/x.d/foo')
49 49 show('data/a.hg/a.i/a.d/foo')
50 50 show('data/au.hg/au.i/au.d/foo')
51 51 show('data/aux.hg/aux.i/aux.d/foo')
52 52 show('data/auxy.hg/auxy.i/auxy.d/foo')
53 53
54 54 print "but these are not encoded on *filenames*"
55 55 show('data/foo/x.hg')
56 56 show('data/foo/x.i')
57 57 show('data/foo/x.d')
58 58 show('data/foo/a.hg')
59 59 show('data/foo/a.i')
60 60 show('data/foo/a.d')
61 61 show('data/foo/au.hg')
62 62 show('data/foo/au.i')
63 63 show('data/foo/au.d')
64 64 show('data/foo/aux.hg')
65 65 show('data/foo/aux.i')
66 66 show('data/foo/aux.d')
67 67 show('data/foo/auxy.hg')
68 68 show('data/foo/auxy.i')
69 69 show('data/foo/auxy.d')
70 70
71 71 print "plain .hg, .i and .d directories have the leading dot encoded"
72 72 show('data/.hg/.i/.d/foo')
73 73
74 74 show('data/aux.bla/bla.aux/prn/PRN/lpt/com3/nul/coma/foo.NUL/normal.c.i')
75 75
76 76 show('data/AUX/SECOND/X.PRN/FOURTH/FI:FTH/SIXTH/SEVENTH/EIGHTH/NINETH/'
77 77 'TENTH/ELEVENTH/LOREMIPSUM.TXT.i')
78 78 show('data/enterprise/openesbaddons/contrib-imola/corba-bc/netbeansplugin/'
79 79 'wsdlExtension/src/main/java/META-INF/services/org.netbeans.modules'
80 80 '.xml.wsdl.bindingsupport.spi.ExtensibilityElementTemplateProvider.i')
81 81 show('data/AUX.THE-QUICK-BROWN-FOX-JU:MPS-OVER-THE-LAZY-DOG-THE-QUICK-'
82 82 'BROWN-FOX-JUMPS-OVER-THE-LAZY-DOG.TXT.i')
83 83 show('data/Project Planning/Resources/AnotherLongDirectoryName/'
84 84 'Followedbyanother/AndAnother/AndThenAnExtremelyLongFileName.txt')
85 85 show('data/Project.Planning/Resources/AnotherLongDirectoryName/'
86 86 'Followedbyanother/AndAnother/AndThenAnExtremelyLongFileName.txt')
87 87 show('data/foo.../foo / /a./_. /__/.x../ bla/.FOO/something.i')
88 88
89 89 show('data/c/co/com/com0/com1/com2/com3/com4/com5/com6/com7/com8/com9')
90 90 show('data/C/CO/COM/COM0/COM1/COM2/COM3/COM4/COM5/COM6/COM7/COM8/COM9')
91 91 show('data/c.x/co.x/com.x/com0.x/com1.x/com2.x/com3.x/com4.x/com5.x'
92 92 '/com6.x/com7.x/com8.x/com9.x')
93 93 show('data/x.c/x.co/x.com0/x.com1/x.com2/x.com3/x.com4/x.com5'
94 94 '/x.com6/x.com7/x.com8/x.com9')
95 95 show('data/cx/cox/comx/com0x/com1x/com2x/com3x/com4x/com5x'
96 96 '/com6x/com7x/com8x/com9x')
97 97 show('data/xc/xco/xcom0/xcom1/xcom2/xcom3/xcom4/xcom5'
98 98 '/xcom6/xcom7/xcom8/xcom9')
99 99
100 100 show('data/l/lp/lpt/lpt0/lpt1/lpt2/lpt3/lpt4/lpt5/lpt6/lpt7/lpt8/lpt9')
101 101 show('data/L/LP/LPT/LPT0/LPT1/LPT2/LPT3/LPT4/LPT5/LPT6/LPT7/LPT8/LPT9')
102 102 show('data/l.x/lp.x/lpt.x/lpt0.x/lpt1.x/lpt2.x/lpt3.x/lpt4.x/lpt5.x'
103 103 '/lpt6.x/lpt7.x/lpt8.x/lpt9.x')
104 104 show('data/x.l/x.lp/x.lpt/x.lpt0/x.lpt1/x.lpt2/x.lpt3/x.lpt4/x.lpt5'
105 105 '/x.lpt6/x.lpt7/x.lpt8/x.lpt9')
106 106 show('data/lx/lpx/lptx/lpt0x/lpt1x/lpt2x/lpt3x/lpt4x/lpt5x'
107 107 '/lpt6x/lpt7x/lpt8x/lpt9x')
108 108 show('data/xl/xlp/xlpt/xlpt0/xlpt1/xlpt2/xlpt3/xlpt4/xlpt5'
109 109 '/xlpt6/xlpt7/xlpt8/xlpt9')
110 110
111 111 show('data/con/p/pr/prn/a/au/aux/n/nu/nul')
112 112 show('data/CON/P/PR/PRN/A/AU/AUX/N/NU/NUL')
113 113 show('data/con.x/p.x/pr.x/prn.x/a.x/au.x/aux.x/n.x/nu.x/nul.x')
114 114 show('data/x.con/x.p/x.pr/x.prn/x.a/x.au/x.aux/x.n/x.nu/x.nul')
115 115 show('data/conx/px/prx/prnx/ax/aux/auxx/nx/nux/nulx')
116 116 show('data/xcon/xp/xpr/xprn/xa/xau/xaux/xn/xnu/xnul')
117 117
118 118 show('data/a./au./aux./auxy./aux.')
119 119 show('data/c./co./con./cony./con.')
120 120 show('data/p./pr./prn./prny./prn.')
121 121 show('data/n./nu./nul./nuly./nul.')
122 122 show('data/l./lp./lpt./lpt1./lpt1y./lpt1.')
123 123 show('data/lpt9./lpt9y./lpt9.')
124 124 show('data/com./com1./com1y./com1.')
125 125 show('data/com9./com9y./com9.')
126 126
127 127 show('data/a /au /aux /auxy /aux ')
128 128
129 129 print "largest unhashed path"
130 130 show('data/123456789-123456789-123456789-123456789-123456789-'
131 131 'unhashed--xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
132 132 '123456789-12345')
133 133
134 134 print "shortest hashed path"
135 135 show('data/123456789-123456789-123456789-123456789-123456789-'
136 136 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
137 137 '123456789-123456')
138 138
139 139 print "changing one char in part that's hashed away produces a different hash"
140 140 show('data/123456789-123456789-123456789-123456789-123456789-'
141 141 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxy-'
142 142 '123456789-123456')
143 143
144 144 print "uppercase hitting length limit due to encoding"
145 145 show('data/A23456789-123456789-123456789-123456789-123456789-'
146 146 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
147 147 '123456789-12345')
148 148 show('data/Z23456789-123456789-123456789-123456789-123456789-'
149 149 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
150 150 '123456789-12345')
151 151
152 152 print "compare with lowercase not hitting limit"
153 153 show('data/a23456789-123456789-123456789-123456789-123456789-'
154 154 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
155 155 '123456789-12345')
156 156 show('data/z23456789-123456789-123456789-123456789-123456789-'
157 157 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
158 158 '123456789-12345')
159 159
160 160 print "not hitting limit with any of these"
161 161 show("data/abcdefghijklmnopqrstuvwxyz0123456789 !#%&'()+,-.;="
162 162 "[]^`{}xxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-"
163 163 "123456789-12345")
164 164
165 165 print "underbar hitting length limit due to encoding"
166 166 show('data/_23456789-123456789-123456789-123456789-123456789-'
167 167 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
168 168 '123456789-12345')
169 169
170 170 print "tilde hitting length limit due to encoding"
171 171 show('data/~23456789-123456789-123456789-123456789-123456789-'
172 172 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
173 173 '123456789-12345')
174 174
175 175 print "Windows reserved characters hitting length limit"
176 176 show('data/<23456789-123456789-123456789-123456789-123456789-'
177 177 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
178 178 '123456789-12345')
179 179 show('data/>23456789-123456789-123456789-123456789-123456789-'
180 180 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
181 181 '123456789-12345')
182 182 show('data/:23456789-123456789-123456789-123456789-123456789-'
183 183 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
184 184 '123456789-12345')
185 185 show('data/"23456789-123456789-123456789-123456789-123456789-'
186 186 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
187 187 '123456789-12345')
188 188 show('data/\\23456789-123456789-123456789-123456789-123456789-'
189 189 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
190 190 '123456789-12345')
191 191 show('data/|23456789-123456789-123456789-123456789-123456789-'
192 192 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
193 193 '123456789-12345')
194 194 show('data/?23456789-123456789-123456789-123456789-123456789-'
195 195 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
196 196 '123456789-12345')
197 197 show('data/*23456789-123456789-123456789-123456789-123456789-'
198 198 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
199 199 '123456789-12345')
200 200
201 201 print "initial space hitting length limit"
202 202 show('data/ 23456789-123456789-123456789-123456789-123456789-'
203 203 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
204 204 '123456789-12345')
205 205
206 206 print "initial dot hitting length limit"
207 207 show('data/.23456789-123456789-123456789-123456789-123456789-'
208 208 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
209 209 '123456789-12345')
210 210
211 211 print "trailing space in filename hitting length limit"
212 212 show('data/123456789-123456789-123456789-123456789-123456789-'
213 213 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
214 214 '123456789-1234 ')
215 215
216 216 print "trailing dot in filename hitting length limit"
217 217 show('data/123456789-123456789-123456789-123456789-123456789-'
218 218 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
219 219 '123456789-1234.')
220 220
221 221 print "initial space in directory hitting length limit"
222 222 show('data/ x/456789-123456789-123456789-123456789-123456789-'
223 223 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
224 224 '123456789-12345')
225 225
226 226 print "initial dot in directory hitting length limit"
227 227 show('data/.x/456789-123456789-123456789-123456789-123456789-'
228 228 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
229 229 '123456789-12345')
230 230
231 231 print "trailing space in directory hitting length limit"
232 232 show('data/x /456789-123456789-123456789-123456789-123456789-'
233 233 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
234 234 '123456789-12345')
235 235
236 236 print "trailing dot in directory hitting length limit"
237 237 show('data/x./456789-123456789-123456789-123456789-123456789-'
238 238 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
239 239 '123456789-12345')
240 240
241 241 print "with directories that need direncoding, hitting length limit"
242 242 show('data/x.i/56789-123456789-123456789-123456789-123456789-'
243 243 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
244 244 '123456789-12345')
245 245 show('data/x.d/56789-123456789-123456789-123456789-123456789-'
246 246 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
247 247 '123456789-12345')
248 248 show('data/x.hg/5789-123456789-123456789-123456789-123456789-'
249 249 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
250 250 '123456789-12345')
251 251
252 252 print "Windows reserved filenames, hitting length limit"
253 253 show('data/con/56789-123456789-123456789-123456789-123456789-'
254 254 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
255 255 '123456789-12345')
256 256 show('data/prn/56789-123456789-123456789-123456789-123456789-'
257 257 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
258 258 '123456789-12345')
259 259 show('data/aux/56789-123456789-123456789-123456789-123456789-'
260 260 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
261 261 '123456789-12345')
262 262 show('data/nul/56789-123456789-123456789-123456789-123456789-'
263 263 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
264 264 '123456789-12345')
265 265 show('data/com1/6789-123456789-123456789-123456789-123456789-'
266 266 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
267 267 '123456789-12345')
268 268 show('data/com9/6789-123456789-123456789-123456789-123456789-'
269 269 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
270 270 '123456789-12345')
271 271 show('data/lpt1/6789-123456789-123456789-123456789-123456789-'
272 272 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
273 273 '123456789-12345')
274 274 show('data/lpt9/6789-123456789-123456789-123456789-123456789-'
275 275 'xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
276 276 '123456789-12345')
277 277
278 278 print "non-reserved names, just not hitting limit"
279 279 show('data/123456789-123456789-123456789-123456789-123456789-'
280 280 '/com/com0/lpt/lpt0/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
281 281 '123456789-12345')
282 282
283 283 print "hashed path with largest untruncated 1st dir"
284 284 show('data/12345678/-123456789-123456789-123456789-123456789-'
285 285 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
286 286 '123456789-123456')
287 287
288 288 print "hashed path with smallest truncated 1st dir"
289 289 show('data/123456789/123456789-123456789-123456789-123456789-'
290 290 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
291 291 '123456789-123456')
292 292
293 293 print "hashed path with largest untruncated two dirs"
294 294 show('data/12345678/12345678/9-123456789-123456789-123456789-'
295 295 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
296 296 '123456789-123456')
297 297
298 298 print "hashed path with smallest truncated two dirs"
299 299 show('data/123456789/123456789/123456789-123456789-123456789-'
300 300 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
301 301 '123456789-123456')
302 302
303 303 print "hashed path with largest untruncated three dirs"
304 304 show('data/12345678/12345678/12345678/89-123456789-123456789-'
305 305 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
306 306 '123456789-123456')
307 307
308 308 print "hashed path with smallest truncated three dirs"
309 309 show('data/123456789/123456789/123456789/123456789-123456789-'
310 310 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
311 311 '123456789-123456')
312 312
313 313 print "hashed path with largest untruncated four dirs"
314 314 show('data/12345678/12345678/12345678/12345678/789-123456789-'
315 315 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
316 316 '123456789-123456')
317 317
318 318 print "hashed path with smallest truncated four dirs"
319 319 show('data/123456789/123456789/123456789/123456789/123456789-'
320 320 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
321 321 '123456789-123456')
322 322
323 323 print "hashed path with largest untruncated five dirs"
324 324 show('data/12345678/12345678/12345678/12345678/12345678/6789-'
325 325 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
326 326 '123456789-123456')
327 327
328 328 print "hashed path with smallest truncated five dirs"
329 329 show('data/123456789/123456789/123456789/123456789/123456789/'
330 330 'hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
331 331 '123456789-123456')
332 332
333 333 print "hashed path with largest untruncated six dirs"
334 334 show('data/12345678/12345678/12345678/12345678/12345678/12345'
335 335 '678/ed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
336 336 '123456789-123456')
337 337
338 338 print "hashed path with smallest truncated six dirs"
339 339 show('data/123456789/123456789/123456789/123456789/123456789/'
340 340 '123456789/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
341 341 '123456789-123456')
342 342
343 343 print "hashed path with largest untruncated seven dirs"
344 344 show('data/12345678/12345678/12345678/12345678/12345678/12345'
345 345 '678/12345678/xxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
346 346 '123456789-123456')
347 347
348 348 print "hashed path with smallest truncated seven dirs"
349 349 show('data/123456789/123456789/123456789/123456789/123456789/'
350 350 '123456789/123456789/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
351 351 '123456789-123456')
352 352
353 353 print "hashed path with largest untruncated eight dirs"
354 354 print "(directory 8 is dropped because it hits _maxshortdirslen)"
355 355 show('data/12345678/12345678/12345678/12345678/12345678/12345'
356 356 '678/12345678/12345678/xxxxxxx-xxxxxxxxx-xxxxxxxxx-'
357 357 '123456789-123456')
358 358
359 359 print "hashed path with smallest truncated eight dirs"
360 360 print "(directory 8 is dropped because it hits _maxshortdirslen)"
361 361 show('data/123456789/123456789/123456789/123456789/123456789/'
362 362 '123456789/123456789/123456789/xxxxxxxxx-xxxxxxxxx-'
363 363 '123456789-123456')
364 364
365 365 print "hashed path with largest non-dropped directory 8"
366 366 print "(just not hitting the _maxshortdirslen boundary)"
367 367 show('data/12345678/12345678/12345678/12345678/12345678/12345'
368 368 '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
369 369 '123456789-123456')
370 370
371 371 print "...adding one truncated char to dir 1..7 won't drop dir 8"
372 372 show('data/12345678x/12345678/12345678/12345678/12345678/12345'
373 373 '678/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
374 374 '123456789-123456')
375 375 show('data/12345678/12345678x/12345678/12345678/12345678/12345'
376 376 '678/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
377 377 '123456789-123456')
378 378 show('data/12345678/12345678/12345678x/12345678/12345678/12345'
379 379 '678/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
380 380 '123456789-123456')
381 381 show('data/12345678/12345678/12345678/12345678x/12345678/12345'
382 382 '678/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
383 383 '123456789-123456')
384 384 show('data/12345678/12345678/12345678/12345678/12345678x/12345'
385 385 '678/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
386 386 '123456789-123456')
387 387 show('data/12345678/12345678/12345678/12345678/12345678/12345'
388 388 '678x/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
389 389 '123456789-123456')
390 390 show('data/12345678/12345678/12345678/12345678/12345678/12345'
391 391 '678/12345678x/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
392 392 '123456789-123456')
393 393
394 394 print "hashed path with shortest dropped directory 8"
395 395 print "(just hitting the _maxshortdirslen boundary)"
396 396 show('data/12345678/12345678/12345678/12345678/12345678/12345'
397 397 '678/12345678/123456/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
398 398 '123456789-123456')
399 399
400 400 print "hashed path that drops dir 8 due to dot or space at end is"
401 401 print "encoded, and thus causing to hit _maxshortdirslen"
402 402 show('data/12345678/12345678/12345678/12345678/12345678/12345'
403 403 '678/12345678/1234./-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
404 404 '123456789-123456')
405 405 show('data/12345678/12345678/12345678/12345678/12345678/12345'
406 406 '678/12345678/1234 /-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
407 407 '123456789-123456')
408 408
409 409 print "... with dir 8 short enough for encoding"
410 410 show('data/12345678/12345678/12345678/12345678/12345678/12345'
411 411 '678/12345678/12./xx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
412 412 '123456789-123456')
413 413 show('data/12345678/12345678/12345678/12345678/12345678/12345'
414 414 '678/12345678/12 /xx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
415 415 '123456789-123456')
416 416
417 print "extensions are replicated on hashed paths (unbounded!)"
417 print '''Extensions are replicated on hashed paths. Note that
418 we only get to encode files that end in .i or .d inside the
419 store. Encoded filenames are thus bound in length.'''
418 420 show('data/12345678/12345678/12345678/12345678/12345678/12345'
419 421 '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
420 '123456789-12.345')
422 '123456789-12.345.i')
421 423 show('data/12345678/12345678/12345678/12345678/12345678/12345'
422 424 '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
423 '123456789-12.3456')
425 '123456789-12.345.d')
424 426 show('data/12345678/12345678/12345678/12345678/12345678/12345'
425 427 '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
426 '123456789-12.34567')
428 '123456789-12.3456.i')
427 429 show('data/12345678/12345678/12345678/12345678/12345678/12345'
428 430 '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
429 '123456789-12.345678')
431 '123456789-12.34567.i')
432 show('data/12345678/12345678/12345678/12345678/12345678/12345'
433 '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
434 '123456789-12.345678.i')
430 435 show('data/12345678/12345678/12345678/12345678/12345678/12345'
431 436 '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
432 '123456789-12.3456789')
437 '123456789-12.3456789.i')
433 438 show('data/12345678/12345678/12345678/12345678/12345678/12345'
434 439 '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
435 '123456789-12.3456789-')
440 '123456789-12.3456789-.i')
436 441 show('data/12345678/12345678/12345678/12345678/12345678/12345'
437 442 '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
438 '123456789-12.3456789-1')
443 '123456789-12.3456789-1.i')
439 444 show('data/12345678/12345678/12345678/12345678/12345678/12345'
440 445 '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
441 '123456789-12.3456789-12')
446 '123456789-12.3456789-12.i')
442 447 show('data/12345678/12345678/12345678/12345678/12345678/12345'
443 448 '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
444 '123456789-12.3456789-123')
449 '123456789-12.3456789-123.i')
445 450 show('data/12345678/12345678/12345678/12345678/12345678/12345'
446 451 '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
447 '123456789-12.3456789-1234')
452 '123456789-12.3456789-1234.i')
448 453 show('data/12345678/12345678/12345678/12345678/12345678/12345'
449 454 '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
450 '123456789-12.3456789-12345')
455 '123456789-12.3456789-12345.i')
451 456 show('data/12345678/12345678/12345678/12345678/12345678/12345'
452 457 '678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-'
453 458 '123456789-12.3456789-12345-ABCDEFGHIJKLMNOPRSTUVWX'
454 459 'YZ-abcdefghjiklmnopqrstuvwxyz-ABCDEFGHIJKLMNOPRSTU'
455 460 'VWXYZ-1234567890-xxxxxxxxx-xxxxxxxxx-xxxxxxxx-xxxx'
456 461 'xxxxx-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwww'
457 'wwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww')
462 'wwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww.i')
@@ -1,488 +1,493
1 1 A = 'data/abcdefghijklmnopqrstuvwxyz0123456789 !#%&\'()+,-.;=[]^`{}'
2 2 B = 'data/abcdefghijklmnopqrstuvwxyz0123456789 !#%&\'()+,-.;=[]^`{}'
3 3
4 4 uppercase char X is encoded as _x
5 5 A = 'data/ABCDEFGHIJKLMNOPQRSTUVWXYZ'
6 6 B = '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'
7 7
8 8 underbar is doubled
9 9 A = 'data/_'
10 10 B = 'data/__'
11 11
12 12 tilde is character-encoded
13 13 A = 'data/~'
14 14 B = 'data/~7e'
15 15
16 16 characters in ASCII code range 1..31
17 17 A = 'data/\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f'
18 18 B = 'data/~01~02~03~04~05~06~07~08~09~0a~0b~0c~0d~0e~0f~10~11~12~13~14~15~16~17~18~19~1a~1b~1c~1d~1e~1f'
19 19
20 20 characters in ASCII code range 126..255
21 21 A = 'data/~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f'
22 22 B = 'data/~7e~7f~80~81~82~83~84~85~86~87~88~89~8a~8b~8c~8d~8e~8f~90~91~92~93~94~95~96~97~98~99~9a~9b~9c~9d~9e~9f'
23 23
24 24 A = 'data/\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf'
25 25 B = 'data/~a0~a1~a2~a3~a4~a5~a6~a7~a8~a9~aa~ab~ac~ad~ae~af~b0~b1~b2~b3~b4~b5~b6~b7~b8~b9~ba~bb~bc~bd~be~bf'
26 26
27 27 A = 'data/\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf'
28 28 B = 'data/~c0~c1~c2~c3~c4~c5~c6~c7~c8~c9~ca~cb~cc~cd~ce~cf~d0~d1~d2~d3~d4~d5~d6~d7~d8~d9~da~db~dc~dd~de~df'
29 29
30 30 A = 'data/\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
31 31 B = 'data/~e0~e1~e2~e3~e4~e5~e6~e7~e8~e9~ea~eb~ec~ed~ee~ef~f0~f1~f2~f3~f4~f5~f6~f7~f8~f9~fa~fb~fc~fd~fe~ff'
32 32
33 33 Windows reserved characters
34 34 A = 'data/less <, greater >, colon :, double-quote ", backslash \\, pipe |, question-mark ?, asterisk *'
35 35 B = 'data/less ~3c, greater ~3e, colon ~3a, double-quote ~22, backslash ~5c, pipe ~7c, question-mark ~3f, asterisk ~2a'
36 36
37 37 encoding directories ending in .hg, .i or .d with '.hg' suffix
38 38 A = 'data/x.h.i/x.hg/x.i/x.d/foo'
39 39 B = 'data/x.h.i.hg/x.hg.hg/x.i.hg/x.d.hg/foo'
40 40
41 41 A = 'data/a.hg/a.i/a.d/foo'
42 42 B = 'data/a.hg.hg/a.i.hg/a.d.hg/foo'
43 43
44 44 A = 'data/au.hg/au.i/au.d/foo'
45 45 B = 'data/au.hg.hg/au.i.hg/au.d.hg/foo'
46 46
47 47 A = 'data/aux.hg/aux.i/aux.d/foo'
48 48 B = 'data/au~78.hg.hg/au~78.i.hg/au~78.d.hg/foo'
49 49
50 50 A = 'data/auxy.hg/auxy.i/auxy.d/foo'
51 51 B = 'data/auxy.hg.hg/auxy.i.hg/auxy.d.hg/foo'
52 52
53 53 but these are not encoded on *filenames*
54 54 A = 'data/foo/x.hg'
55 55 B = 'data/foo/x.hg'
56 56
57 57 A = 'data/foo/x.i'
58 58 B = 'data/foo/x.i'
59 59
60 60 A = 'data/foo/x.d'
61 61 B = 'data/foo/x.d'
62 62
63 63 A = 'data/foo/a.hg'
64 64 B = 'data/foo/a.hg'
65 65
66 66 A = 'data/foo/a.i'
67 67 B = 'data/foo/a.i'
68 68
69 69 A = 'data/foo/a.d'
70 70 B = 'data/foo/a.d'
71 71
72 72 A = 'data/foo/au.hg'
73 73 B = 'data/foo/au.hg'
74 74
75 75 A = 'data/foo/au.i'
76 76 B = 'data/foo/au.i'
77 77
78 78 A = 'data/foo/au.d'
79 79 B = 'data/foo/au.d'
80 80
81 81 A = 'data/foo/aux.hg'
82 82 B = 'data/foo/au~78.hg'
83 83
84 84 A = 'data/foo/aux.i'
85 85 B = 'data/foo/au~78.i'
86 86
87 87 A = 'data/foo/aux.d'
88 88 B = 'data/foo/au~78.d'
89 89
90 90 A = 'data/foo/auxy.hg'
91 91 B = 'data/foo/auxy.hg'
92 92
93 93 A = 'data/foo/auxy.i'
94 94 B = 'data/foo/auxy.i'
95 95
96 96 A = 'data/foo/auxy.d'
97 97 B = 'data/foo/auxy.d'
98 98
99 99 plain .hg, .i and .d directories have the leading dot encoded
100 100 A = 'data/.hg/.i/.d/foo'
101 101 B = 'data/~2ehg.hg/~2ei.hg/~2ed.hg/foo'
102 102
103 103 A = 'data/aux.bla/bla.aux/prn/PRN/lpt/com3/nul/coma/foo.NUL/normal.c.i'
104 104 B = 'data/au~78.bla/bla.aux/pr~6e/_p_r_n/lpt/co~6d3/nu~6c/coma/foo._n_u_l/normal.c.i'
105 105
106 106 A = 'data/AUX/SECOND/X.PRN/FOURTH/FI:FTH/SIXTH/SEVENTH/EIGHTH/NINETH/TENTH/ELEVENTH/LOREMIPSUM.TXT.i'
107 107 B = 'dh/au~78/second/x.prn/fourth/fi~3afth/sixth/seventh/eighth/nineth/tenth/loremia20419e358ddff1bf8751e38288aff1d7c32ec05.i'
108 108
109 109 A = 'data/enterprise/openesbaddons/contrib-imola/corba-bc/netbeansplugin/wsdlExtension/src/main/java/META-INF/services/org.netbeans.modules.xml.wsdl.bindingsupport.spi.ExtensibilityElementTemplateProvider.i'
110 110 B = 'dh/enterpri/openesba/contrib-/corba-bc/netbeans/wsdlexte/src/main/java/org.net7018f27961fdf338a598a40c4683429e7ffb9743.i'
111 111
112 112 A = 'data/AUX.THE-QUICK-BROWN-FOX-JU:MPS-OVER-THE-LAZY-DOG-THE-QUICK-BROWN-FOX-JUMPS-OVER-THE-LAZY-DOG.TXT.i'
113 113 B = 'dh/au~78.the-quick-brown-fox-ju~3amps-over-the-lazy-dog-the-quick-brown-fox-jud4dcadd033000ab2b26eb66bae1906bcb15d4a70.i'
114 114
115 115 A = 'data/Project Planning/Resources/AnotherLongDirectoryName/Followedbyanother/AndAnother/AndThenAnExtremelyLongFileName.txt'
116 116 B = 'dh/project_/resource/anotherl/followed/andanoth/andthenanextremelylongfilenaf93030515d9849cfdca52937c2204d19f83913e5.txt'
117 117
118 118 A = 'data/Project.Planning/Resources/AnotherLongDirectoryName/Followedbyanother/AndAnother/AndThenAnExtremelyLongFileName.txt'
119 119 B = 'dh/project_/resource/anotherl/followed/andanoth/andthenanextremelylongfilena0fd7c506f5c9d58204444fc67e9499006bd2d445.txt'
120 120
121 121 A = 'data/foo.../foo / /a./_. /__/.x../ bla/.FOO/something.i'
122 122 B = 'data/foo..~2e/foo ~20/~20/a~2e/__.~20/____/~2ex.~2e/~20 bla/~2e_f_o_o/something.i'
123 123
124 124 A = 'data/c/co/com/com0/com1/com2/com3/com4/com5/com6/com7/com8/com9'
125 125 B = 'data/c/co/com/com0/co~6d1/co~6d2/co~6d3/co~6d4/co~6d5/co~6d6/co~6d7/co~6d8/co~6d9'
126 126
127 127 A = 'data/C/CO/COM/COM0/COM1/COM2/COM3/COM4/COM5/COM6/COM7/COM8/COM9'
128 128 B = 'data/_c/_c_o/_c_o_m/_c_o_m0/_c_o_m1/_c_o_m2/_c_o_m3/_c_o_m4/_c_o_m5/_c_o_m6/_c_o_m7/_c_o_m8/_c_o_m9'
129 129
130 130 A = 'data/c.x/co.x/com.x/com0.x/com1.x/com2.x/com3.x/com4.x/com5.x/com6.x/com7.x/com8.x/com9.x'
131 131 B = 'data/c.x/co.x/com.x/com0.x/co~6d1.x/co~6d2.x/co~6d3.x/co~6d4.x/co~6d5.x/co~6d6.x/co~6d7.x/co~6d8.x/co~6d9.x'
132 132
133 133 A = 'data/x.c/x.co/x.com0/x.com1/x.com2/x.com3/x.com4/x.com5/x.com6/x.com7/x.com8/x.com9'
134 134 B = 'data/x.c/x.co/x.com0/x.com1/x.com2/x.com3/x.com4/x.com5/x.com6/x.com7/x.com8/x.com9'
135 135
136 136 A = 'data/cx/cox/comx/com0x/com1x/com2x/com3x/com4x/com5x/com6x/com7x/com8x/com9x'
137 137 B = 'data/cx/cox/comx/com0x/com1x/com2x/com3x/com4x/com5x/com6x/com7x/com8x/com9x'
138 138
139 139 A = 'data/xc/xco/xcom0/xcom1/xcom2/xcom3/xcom4/xcom5/xcom6/xcom7/xcom8/xcom9'
140 140 B = 'data/xc/xco/xcom0/xcom1/xcom2/xcom3/xcom4/xcom5/xcom6/xcom7/xcom8/xcom9'
141 141
142 142 A = 'data/l/lp/lpt/lpt0/lpt1/lpt2/lpt3/lpt4/lpt5/lpt6/lpt7/lpt8/lpt9'
143 143 B = 'data/l/lp/lpt/lpt0/lp~741/lp~742/lp~743/lp~744/lp~745/lp~746/lp~747/lp~748/lp~749'
144 144
145 145 A = 'data/L/LP/LPT/LPT0/LPT1/LPT2/LPT3/LPT4/LPT5/LPT6/LPT7/LPT8/LPT9'
146 146 B = 'data/_l/_l_p/_l_p_t/_l_p_t0/_l_p_t1/_l_p_t2/_l_p_t3/_l_p_t4/_l_p_t5/_l_p_t6/_l_p_t7/_l_p_t8/_l_p_t9'
147 147
148 148 A = 'data/l.x/lp.x/lpt.x/lpt0.x/lpt1.x/lpt2.x/lpt3.x/lpt4.x/lpt5.x/lpt6.x/lpt7.x/lpt8.x/lpt9.x'
149 149 B = 'data/l.x/lp.x/lpt.x/lpt0.x/lp~741.x/lp~742.x/lp~743.x/lp~744.x/lp~745.x/lp~746.x/lp~747.x/lp~748.x/lp~749.x'
150 150
151 151 A = 'data/x.l/x.lp/x.lpt/x.lpt0/x.lpt1/x.lpt2/x.lpt3/x.lpt4/x.lpt5/x.lpt6/x.lpt7/x.lpt8/x.lpt9'
152 152 B = 'data/x.l/x.lp/x.lpt/x.lpt0/x.lpt1/x.lpt2/x.lpt3/x.lpt4/x.lpt5/x.lpt6/x.lpt7/x.lpt8/x.lpt9'
153 153
154 154 A = 'data/lx/lpx/lptx/lpt0x/lpt1x/lpt2x/lpt3x/lpt4x/lpt5x/lpt6x/lpt7x/lpt8x/lpt9x'
155 155 B = 'data/lx/lpx/lptx/lpt0x/lpt1x/lpt2x/lpt3x/lpt4x/lpt5x/lpt6x/lpt7x/lpt8x/lpt9x'
156 156
157 157 A = 'data/xl/xlp/xlpt/xlpt0/xlpt1/xlpt2/xlpt3/xlpt4/xlpt5/xlpt6/xlpt7/xlpt8/xlpt9'
158 158 B = 'data/xl/xlp/xlpt/xlpt0/xlpt1/xlpt2/xlpt3/xlpt4/xlpt5/xlpt6/xlpt7/xlpt8/xlpt9'
159 159
160 160 A = 'data/con/p/pr/prn/a/au/aux/n/nu/nul'
161 161 B = 'data/co~6e/p/pr/pr~6e/a/au/au~78/n/nu/nu~6c'
162 162
163 163 A = 'data/CON/P/PR/PRN/A/AU/AUX/N/NU/NUL'
164 164 B = 'data/_c_o_n/_p/_p_r/_p_r_n/_a/_a_u/_a_u_x/_n/_n_u/_n_u_l'
165 165
166 166 A = 'data/con.x/p.x/pr.x/prn.x/a.x/au.x/aux.x/n.x/nu.x/nul.x'
167 167 B = 'data/co~6e.x/p.x/pr.x/pr~6e.x/a.x/au.x/au~78.x/n.x/nu.x/nu~6c.x'
168 168
169 169 A = 'data/x.con/x.p/x.pr/x.prn/x.a/x.au/x.aux/x.n/x.nu/x.nul'
170 170 B = 'data/x.con/x.p/x.pr/x.prn/x.a/x.au/x.aux/x.n/x.nu/x.nul'
171 171
172 172 A = 'data/conx/px/prx/prnx/ax/aux/auxx/nx/nux/nulx'
173 173 B = 'data/conx/px/prx/prnx/ax/au~78/auxx/nx/nux/nulx'
174 174
175 175 A = 'data/xcon/xp/xpr/xprn/xa/xau/xaux/xn/xnu/xnul'
176 176 B = 'data/xcon/xp/xpr/xprn/xa/xau/xaux/xn/xnu/xnul'
177 177
178 178 A = 'data/a./au./aux./auxy./aux.'
179 179 B = 'data/a~2e/au~2e/au~78~2e/auxy~2e/au~78~2e'
180 180
181 181 A = 'data/c./co./con./cony./con.'
182 182 B = 'data/c~2e/co~2e/co~6e~2e/cony~2e/co~6e~2e'
183 183
184 184 A = 'data/p./pr./prn./prny./prn.'
185 185 B = 'data/p~2e/pr~2e/pr~6e~2e/prny~2e/pr~6e~2e'
186 186
187 187 A = 'data/n./nu./nul./nuly./nul.'
188 188 B = 'data/n~2e/nu~2e/nu~6c~2e/nuly~2e/nu~6c~2e'
189 189
190 190 A = 'data/l./lp./lpt./lpt1./lpt1y./lpt1.'
191 191 B = 'data/l~2e/lp~2e/lpt~2e/lp~741~2e/lpt1y~2e/lp~741~2e'
192 192
193 193 A = 'data/lpt9./lpt9y./lpt9.'
194 194 B = 'data/lp~749~2e/lpt9y~2e/lp~749~2e'
195 195
196 196 A = 'data/com./com1./com1y./com1.'
197 197 B = 'data/com~2e/co~6d1~2e/com1y~2e/co~6d1~2e'
198 198
199 199 A = 'data/com9./com9y./com9.'
200 200 B = 'data/co~6d9~2e/com9y~2e/co~6d9~2e'
201 201
202 202 A = 'data/a /au /aux /auxy /aux '
203 203 B = 'data/a~20/au~20/aux~20/auxy~20/aux~20'
204 204
205 205 largest unhashed path
206 206 A = 'data/123456789-123456789-123456789-123456789-123456789-unhashed--xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
207 207 B = 'data/123456789-123456789-123456789-123456789-123456789-unhashed--xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
208 208
209 209 shortest hashed path
210 210 A = 'data/123456789-123456789-123456789-123456789-123456789-hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
211 211 B = 'dh/123456789-123456789-123456789-123456789-123456789-hashed----xxxxxxxxx-xxxxxxxe9c55002b50bf5181e7a6fc1f60b126e2a6fcf71'
212 212
213 213 changing one char in part that's hashed away produces a different hash
214 214 A = 'data/123456789-123456789-123456789-123456789-123456789-hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxy-123456789-123456'
215 215 B = 'dh/123456789-123456789-123456789-123456789-123456789-hashed----xxxxxxxxx-xxxxxxxd24fa4455faf8a94350c18e5eace7c2bb17af706'
216 216
217 217 uppercase hitting length limit due to encoding
218 218 A = 'data/A23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
219 219 B = 'dh/a23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxcbbc657029b41b94ed510d05feb6716a5c03bc6b'
220 220
221 221 A = 'data/Z23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
222 222 B = 'dh/z23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxx938f32a725c89512833fb96b6602dd9ebff51ddd'
223 223
224 224 compare with lowercase not hitting limit
225 225 A = 'data/a23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
226 226 B = 'data/a23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
227 227
228 228 A = 'data/z23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
229 229 B = 'data/z23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
230 230
231 231 not hitting limit with any of these
232 232 A = 'data/abcdefghijklmnopqrstuvwxyz0123456789 !#%&\'()+,-.;=[]^`{}xxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
233 233 B = 'data/abcdefghijklmnopqrstuvwxyz0123456789 !#%&\'()+,-.;=[]^`{}xxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
234 234
235 235 underbar hitting length limit due to encoding
236 236 A = 'data/_23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
237 237 B = 'dh/_23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxx9921a01af50feeabc060ce00eee4cba6efc31d2b'
238 238
239 239 tilde hitting length limit due to encoding
240 240 A = 'data/~23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
241 241 B = 'dh/~7e23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxx9cec6f97d569c10995f785720044ea2e4227481b'
242 242
243 243 Windows reserved characters hitting length limit
244 244 A = 'data/<23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
245 245 B = 'dh/~3c23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxee67d8f275876ca1ef2500fc542e63c885c4e62d'
246 246
247 247 A = 'data/>23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
248 248 B = 'dh/~3e23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxx387a85a5b1547cc9136310c974df716818458ddb'
249 249
250 250 A = 'data/:23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
251 251 B = 'dh/~3a23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxx2e4154fb571d13d22399c58cc4ef4858e4b75999'
252 252
253 253 A = 'data/"23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
254 254 B = 'dh/~2223456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxfc7e3ec7b0687ee06ed8c32fef0eb0c1980259f5'
255 255
256 256 A = 'data/\\23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
257 257 B = 'dh/~5c23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxx944e1f2b7110687e116e0d151328ac648b06ab4a'
258 258
259 259 A = 'data/|23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
260 260 B = 'dh/~7c23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxx28b23dd3fd0242946334126ab62bcd772aac32f4'
261 261
262 262 A = 'data/?23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
263 263 B = 'dh/~3f23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxa263022d3994d2143d98f94f431eef8b5e7e0f8a'
264 264
265 265 A = 'data/*23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
266 266 B = 'dh/~2a23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxx0e7e6020e3c00ba7bb7893d84ca2966fbf53e140'
267 267
268 268 initial space hitting length limit
269 269 A = 'data/ 23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
270 270 B = 'dh/~2023456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxx92acbc78ef8c0b796111629a02601f07d8aec4ea'
271 271
272 272 initial dot hitting length limit
273 273 A = 'data/.23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
274 274 B = 'dh/~2e23456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxdbe19cc6505b3515ab9228cebf877ad07075168f'
275 275
276 276 trailing space in filename hitting length limit
277 277 A = 'data/123456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-1234 '
278 278 B = 'dh/123456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxx0025dc73e04f97426db4893e3bf67d581dc6d066'
279 279
280 280 trailing dot in filename hitting length limit
281 281 A = 'data/123456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-1234.'
282 282 B = 'dh/123456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxx85a16cf03ee7feba8a5abc626f1ba9886d01e89d'
283 283
284 284 initial space in directory hitting length limit
285 285 A = 'data/ x/456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
286 286 B = 'dh/~20x/456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxx1b3a3b712b2ac00d6af14ae8b4c14fdbf904f516'
287 287
288 288 initial dot in directory hitting length limit
289 289 A = 'data/.x/456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
290 290 B = 'dh/~2ex/456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxx39dbc4c193a5643a8936fc69c3363cd7ac91ab14'
291 291
292 292 trailing space in directory hitting length limit
293 293 A = 'data/x /456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
294 294 B = 'dh/x~20/456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxx2253c341df0b5290790ad312cd8499850f2273e5'
295 295
296 296 trailing dot in directory hitting length limit
297 297 A = 'data/x./456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
298 298 B = 'dh/x~2e/456789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxcc0324d696d34562b44b5138db08ee1594ccc583'
299 299
300 300 with directories that need direncoding, hitting length limit
301 301 A = 'data/x.i/56789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
302 302 B = 'dh/x.i.hg/56789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxa4c4399bdf81c67dbbbb7060aa0124d8dea94f74'
303 303
304 304 A = 'data/x.d/56789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
305 305 B = 'dh/x.d.hg/56789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxx1303fa90473b230615f5b3ea7b660e881ae5270a'
306 306
307 307 A = 'data/x.hg/5789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
308 308 B = 'dh/x.hg.hg/5789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxx26d724a8af68e7a4e4455e6602ea9adbd0eb801f'
309 309
310 310 Windows reserved filenames, hitting length limit
311 311 A = 'data/con/56789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
312 312 B = 'dh/co~6e/56789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxc0794d4f4c605a2617900eb2563d7113cf6ea7d3'
313 313
314 314 A = 'data/prn/56789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
315 315 B = 'dh/pr~6e/56789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxx64db876e1a9730e27236cb9b167aff942240e932'
316 316
317 317 A = 'data/aux/56789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
318 318 B = 'dh/au~78/56789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxx8a178558405ca6fb4bbd75446dfa186f06751a0d'
319 319
320 320 A = 'data/nul/56789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
321 321 B = 'dh/nu~6c/56789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxc5e51b6fec1bd07bd243b053a0c3f7209855b886'
322 322
323 323 A = 'data/com1/6789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
324 324 B = 'dh/co~6d1/6789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxx32f5f44ece3bb62b9327369ca84cc19c86259fcd'
325 325
326 326 A = 'data/com9/6789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
327 327 B = 'dh/co~6d9/6789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxx734360b28c66a3230f55849fe8926206d229f990'
328 328
329 329 A = 'data/lpt1/6789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
330 330 B = 'dh/lp~741/6789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxe6f16ab4b6b0637676b2842b3345c9836df46ef7'
331 331
332 332 A = 'data/lpt9/6789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
333 333 B = 'dh/lp~749/6789-123456789-123456789-123456789-123456789-xxxxxxxxx-xxxxxxxxx-xxxxxa475814c51acead3e44f2ff801f0c4903f986157'
334 334
335 335 non-reserved names, just not hitting limit
336 336 A = 'data/123456789-123456789-123456789-123456789-123456789-/com/com0/lpt/lpt0/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
337 337 B = 'data/123456789-123456789-123456789-123456789-123456789-/com/com0/lpt/lpt0/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12345'
338 338
339 339 hashed path with largest untruncated 1st dir
340 340 A = 'data/12345678/-123456789-123456789-123456789-123456789-hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
341 341 B = 'dh/12345678/-123456789-123456789-123456789-123456789-hashed----xxxxxxxxx-xxxxxxx4e9e9e384d00929a93b6835fbf976eb32321ff3c'
342 342
343 343 hashed path with smallest truncated 1st dir
344 344 A = 'data/123456789/123456789-123456789-123456789-123456789-hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
345 345 B = 'dh/12345678/123456789-123456789-123456789-123456789-hashed----xxxxxxxxx-xxxxxxxx1f4e4ec5f2be76e109bfaa8e31c062fe426d5490'
346 346
347 347 hashed path with largest untruncated two dirs
348 348 A = 'data/12345678/12345678/9-123456789-123456789-123456789-hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
349 349 B = 'dh/12345678/12345678/9-123456789-123456789-123456789-hashed----xxxxxxxxx-xxxxxxx3332d8329d969cf835542a9f2cbcfb385b6cf39d'
350 350
351 351 hashed path with smallest truncated two dirs
352 352 A = 'data/123456789/123456789/123456789-123456789-123456789-hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
353 353 B = 'dh/12345678/12345678/123456789-123456789-123456789-hashed----xxxxxxxxx-xxxxxxxxx9699559798247dffa18717138859be5f8874840e'
354 354
355 355 hashed path with largest untruncated three dirs
356 356 A = 'data/12345678/12345678/12345678/89-123456789-123456789-hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
357 357 B = 'dh/12345678/12345678/12345678/89-123456789-123456789-hashed----xxxxxxxxx-xxxxxxxf0a2b053bb1369cce02f78c217d6a7aaea18c439'
358 358
359 359 hashed path with smallest truncated three dirs
360 360 A = 'data/123456789/123456789/123456789/123456789-123456789-hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
361 361 B = 'dh/12345678/12345678/12345678/123456789-123456789-hashed----xxxxxxxxx-xxxxxxxxx-1c6f8284967384ec13985a046d3553179d9d03cd'
362 362
363 363 hashed path with largest untruncated four dirs
364 364 A = 'data/12345678/12345678/12345678/12345678/789-123456789-hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
365 365 B = 'dh/12345678/12345678/12345678/12345678/789-123456789-hashed----xxxxxxxxx-xxxxxxx0d30c99049d8f0ff97b94d4ef302027e8d54c6fd'
366 366
367 367 hashed path with smallest truncated four dirs
368 368 A = 'data/123456789/123456789/123456789/123456789/123456789-hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
369 369 B = 'dh/12345678/12345678/12345678/12345678/123456789-hashed----xxxxxxxxx-xxxxxxxxx-x46162779e1a771810b37a737f82ae7ed33771402'
370 370
371 371 hashed path with largest untruncated five dirs
372 372 A = 'data/12345678/12345678/12345678/12345678/12345678/6789-hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
373 373 B = 'dh/12345678/12345678/12345678/12345678/12345678/6789-hashed----xxxxxxxxx-xxxxxxxbfe752ddc8b003c2790c66a9f2eb1ea75c114390'
374 374
375 375 hashed path with smallest truncated five dirs
376 376 A = 'data/123456789/123456789/123456789/123456789/123456789/hashed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
377 377 B = 'dh/12345678/12345678/12345678/12345678/12345678/hashed----xxxxxxxxx-xxxxxxxxx-xxb94c27b3532fa880cdd572b1c514785cab7b6ff2'
378 378
379 379 hashed path with largest untruncated six dirs
380 380 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/ed----xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
381 381 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/ed----xxxxxxxxx-xxxxxxxcd8cc5483a0f3be409e0e5d4bf9e36e113c59235'
382 382
383 383 hashed path with smallest truncated six dirs
384 384 A = 'data/123456789/123456789/123456789/123456789/123456789/123456789/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
385 385 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/xxxxxxxxx-xxxxxxxxx-xxx47dd6f616f833a142da00701b334cebbf640da06'
386 386
387 387 hashed path with largest untruncated seven dirs
388 388 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/xxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
389 389 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/xxxxxx-xxxxxxx1c8ed635229fc22efe51035feeadeb4c8a0ecb82'
390 390
391 391 hashed path with smallest truncated seven dirs
392 392 A = 'data/123456789/123456789/123456789/123456789/123456789/123456789/123456789/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
393 393 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/xxxxxxxxx-xxxx298ff7d33f8ce6db57930837ffea2fb2f48bb926'
394 394
395 395 hashed path with largest untruncated eight dirs
396 396 (directory 8 is dropped because it hits _maxshortdirslen)
397 397 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345678/xxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
398 398 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/xxxxxxx-xxxxxxc8996ccd41b471f768057181a4d59d2febe7277d'
399 399
400 400 hashed path with smallest truncated eight dirs
401 401 (directory 8 is dropped because it hits _maxshortdirslen)
402 402 A = 'data/123456789/123456789/123456789/123456789/123456789/123456789/123456789/123456789/xxxxxxxxx-xxxxxxxxx-123456789-123456'
403 403 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/xxxxxxxxx-xxxx4fa04a839a6bda93e1c21c713f2edcbd16e8890d'
404 404
405 405 hashed path with largest non-dropped directory 8
406 406 (just not hitting the _maxshortdirslen boundary)
407 407 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
408 408 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxx4d43d1ccaa20efbfe99ec779dc063611536ff2c5'
409 409
410 410 ...adding one truncated char to dir 1..7 won't drop dir 8
411 411 A = 'data/12345678x/12345678/12345678/12345678/12345678/12345678/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
412 412 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/xxxxxxxx0f9efce65189cc60fd90fe4ffd49d7b58bbe0f2e'
413 413
414 414 A = 'data/12345678/12345678x/12345678/12345678/12345678/12345678/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
415 415 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/xxxxxxxx945ca395708cafdd54a94501859beabd3e243921'
416 416
417 417 A = 'data/12345678/12345678/12345678x/12345678/12345678/12345678/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
418 418 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/xxxxxxxxac62bf6898c4fd0502146074547c11caa751a327'
419 419
420 420 A = 'data/12345678/12345678/12345678/12345678x/12345678/12345678/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
421 421 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/xxxxxxxx2ae5a2baed7983fae8974d0ca06c6bf08b9aee92'
422 422
423 423 A = 'data/12345678/12345678/12345678/12345678/12345678x/12345678/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
424 424 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/xxxxxxxx214aba07b6687532a43d1e9eaf6e88cfca96b68c'
425 425
426 426 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678x/12345678/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
427 427 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/xxxxxxxxe7a022ae82f0f55cf4e0498e55ba59ea4ebb55bf'
428 428
429 429 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678x/12345/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
430 430 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/xxxxxxxxb51ce61164996a80f36ce3cfe64b62d519aedae3'
431 431
432 432 hashed path with shortest dropped directory 8
433 433 (just hitting the _maxshortdirslen boundary)
434 434 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/123456/xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
435 435 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/xxxxxxxxx-xxxx11fa9873cc6c3215eae864528b5530a04efc6cfe'
436 436
437 437 hashed path that drops dir 8 due to dot or space at end is
438 438 encoded, and thus causing to hit _maxshortdirslen
439 439 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/1234./-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
440 440 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/-xxxxxxxxx-xxx602df9b45bec564e2e1f0645d5140dddcc76ed58'
441 441
442 442 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/1234 /-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
443 443 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/-xxxxxxxxx-xxxd99ff212bc84b4d1f70cd6b0071e3ef69d4e12ce'
444 444
445 445 ... with dir 8 short enough for encoding
446 446 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12./xx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
447 447 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12~2e/xx-xxxxx7baeb5ed7f14a586ee1cacecdbcbff70032d1b3c'
448 448
449 449 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12 /xx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-123456'
450 450 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12~20/xx-xxxxxcf79ca9795f77d7f75745da36807e5d772bd5182'
451 451
452 extensions are replicated on hashed paths (unbounded!)
453 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.345'
454 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxx50a65dfc4ab6bf5fb9ba949447ccaf456c1ebf30.345'
452 Extensions are replicated on hashed paths. Note that
453 we only get to encode files that end in .i or .d inside the
454 store. Encoded filenames are thus bound in length.
455 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.345.i'
456 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxc10ad03b5755ed524f5286aab1815dfe07729438.i'
455 457
456 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456'
457 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxe5f03f29a0a5876660a28aefc43f978add5a7659.3456'
458 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.345.d'
459 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxx9eec83381f2b39ef5ac8b4ecdf2c94f7983f57c8.d'
458 460
459 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.34567'
460 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xc2609a92347e5a14c29211c6cd634732d1f0c968.34567'
461 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456.i'
462 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxb7796dc7d175cfb0bb8a7728f58f6ebec9042568.i'
461 463
462 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.345678'
463 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-695e97d34c6cd8186afa3c74a56243bd645d50c3.345678'
464 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.34567.i'
465 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxb515857a6bfeef017c4894d8df42458ac65d55b8.i'
464 466
465 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456789'
466 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/b067582449be78bc1266e9195785a5c6165380e6.3456789'
467 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.345678.i'
468 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxb05a0f247bc0a776211cd6a32ab714fd9cc09f2b.i'
467 469
468 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456789-'
469 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/d3442b4cfe1fdbde1c4c60ad421e946344111961.3456789-'
470 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456789.i'
471 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxf192b48bff08d9e0e12035fb52bc58c70de72c94.i'
470 472
471 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456789-1'
472 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/40a78aaf2114e1b82f91ac3ff234bf358d99dbba.3456789-1'
473 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456789-.i'
474 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxx435551e0ed4c7b083b9ba83cee916670e02e80ad.i'
473 475
474 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456789-12'
475 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/1e04221e6fbff8cfbeaf555d11550dc573e3326d.3456789-12'
476 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456789-1.i'
477 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxa7f74eb98d8d58b716356dfd26e2f9aaa65d6a9a.i'
476 478
477 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456789-123'
478 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/5e3b3973b3c9297b4577a4cf1d58162545a6b454.3456789-123'
479 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456789-12.i'
480 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxed68d9bd43b931f0b100267fee488d65a0c66f62.i'
479 481
480 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456789-1234'
481 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/6ee6ef477c7ba44ff19c7d97fc4ac7fa4a8e4665.3456789-1234'
482 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456789-123.i'
483 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxx5cea44de2b642d2ba2b4a30693ffb1049644d698.i'
484
485 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456789-1234.i'
486 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxx68462f62a7f230b39c1b5400d73ec35920990b7e.i'
482 487
483 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456789-12345'
484 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/f08b927027344ec4a7f1994ecb0effe2b9cc1215.3456789-12345'
488 A = 'data/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-123456789-12.3456789-12345.i'
489 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxx4cb852a314c6da240a83eec94761cdd71c6ec22e.i'
485 490
486 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'
487 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/28de8651e30eeb95f4b97edb7d12b281d3fb3ce0.3456789-12345-abcdefghijklmnoprstuvwxyz-abcdefghjiklmnopqrstuvwxyz-abcdefghijklmnoprstuvwxyz-1234567890-xxxxxxxxx-xxxxxxxxx-xxxxxxxx-xxxxxxxxx-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww-wwwwwwwww'
491 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'
492 B = 'dh/12345678/12345678/12345678/12345678/12345678/12345678/12345678/12345/-xxxxx93352aa50377751d9e5ebdf52da1e6e69a6887a6.i'
488 493
General Comments 0
You need to be logged in to leave comments. Login now