##// END OF EJS Templates
censor: reduce risk of censor test blowing up output limit...
marmoute -
r48182:65b86f51 default
parent child Browse files
Show More
@@ -1,519 +1,513 b''
1 1 #require no-reposimplestore
2 2
3 3 $ cat >> $HGRCPATH <<EOF
4 4 > [extensions]
5 5 > censor=
6 6 > EOF
7 7 $ cp $HGRCPATH $HGRCPATH.orig
8 8
9 9 Create repo with unimpeachable content
10 10
11 11 $ hg init r
12 12 $ cd r
13 13 $ echo 'Initially untainted file' > target
14 14 $ echo 'Normal file here' > bystander
15 15 $ hg add target bystander
16 16 $ hg ci -m init
17 17
18 18 Clone repo so we can test pull later
19 19
20 20 $ cd ..
21 21 $ hg clone r rpull
22 22 updating to branch default
23 23 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
24 24 $ cd r
25 25
26 26 Introduce content which will ultimately require censorship. Name the first
27 27 censored node C1, second C2, and so on
28 28
29 29 $ echo 'Tainted file' > target
30 30 $ echo 'Passwords: hunter2' >> target
31 31 $ hg ci -m taint target
32 32 $ C1=`hg id --debug -i`
33 33
34 34 $ echo 'hunter3' >> target
35 35 $ echo 'Normal file v2' > bystander
36 36 $ hg ci -m moretaint target bystander
37 37 $ C2=`hg id --debug -i`
38 38
39 39 Add a new sanitized versions to correct our mistake. Name the first head H1,
40 40 the second head H2, and so on
41 41
42 42 $ echo 'Tainted file is now sanitized' > target
43 43 $ hg ci -m sanitized target
44 44 $ H1=`hg id --debug -i`
45 45
46 46 $ hg update -r $C2
47 47 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
48 48 $ echo 'Tainted file now super sanitized' > target
49 49 $ hg ci -m 'super sanitized' target
50 50 created new head
51 51 $ H2=`hg id --debug -i`
52 52
53 53 Verify target contents before censorship at each revision
54 54
55 $ hg cat -r $H1 target
55 $ hg cat -r $H1 target | head -n 10
56 56 Tainted file is now sanitized
57 $ hg cat -r $H2 target
57 $ hg cat -r $H2 target | head -n 10
58 58 Tainted file now super sanitized
59 $ hg cat -r $C2 target
59 $ hg cat -r $C2 target | head -n 10
60 60 Tainted file
61 61 Passwords: hunter2
62 62 hunter3
63 $ hg cat -r $C1 target
63 $ hg cat -r $C1 target | head -n 10
64 64 Tainted file
65 65 Passwords: hunter2
66 $ hg cat -r 0 target
66 $ hg cat -r 0 target | head -n 10
67 67 Initially untainted file
68 68
69 69 Try to censor revision with too large of a tombstone message
70 70
71 71 $ hg censor -r $C1 -t 'blah blah blah blah blah blah blah blah bla' target
72 72 abort: censor tombstone must be no longer than censored data
73 73 [255]
74 74
75 75 Censor revision with 2 offenses
76 76
77 77 (this also tests file pattern matching: path relative to cwd case)
78 78
79 79 $ mkdir -p foo/bar/baz
80 80 $ hg --cwd foo/bar/baz censor -r $C2 -t "remove password" ../../../target
81 $ hg cat -r $H1 target
81 $ hg cat -r $H1 target | head -n 10
82 82 Tainted file is now sanitized
83 $ hg cat -r $H2 target
83 $ hg cat -r $H2 target | head -n 10
84 84 Tainted file now super sanitized
85 $ hg cat -r $C2 target
85 $ hg cat -r $C2 target | head -n 10
86 86 abort: censored node: 1e0247a9a4b7
87 87 (set censor.policy to ignore errors)
88 [255]
89 $ hg cat -r $C1 target
88 $ hg cat -r $C1 target | head -n 10
90 89 Tainted file
91 90 Passwords: hunter2
92 $ hg cat -r 0 target
91 $ hg cat -r 0 target | head -n 10
93 92 Initially untainted file
94 93
95 94 Censor revision with 1 offense
96 95
97 96 (this also tests file pattern matching: with 'path:' scheme)
98 97
99 98 $ hg --cwd foo/bar/baz censor -r $C1 path:target
100 $ hg cat -r $H1 target
99 $ hg cat -r $H1 target | head -n 10
101 100 Tainted file is now sanitized
102 $ hg cat -r $H2 target
101 $ hg cat -r $H2 target | head -n 10
103 102 Tainted file now super sanitized
104 $ hg cat -r $C2 target
103 $ hg cat -r $C2 target | head -n 10
105 104 abort: censored node: 1e0247a9a4b7
106 105 (set censor.policy to ignore errors)
107 [255]
108 $ hg cat -r $C1 target
106 $ hg cat -r $C1 target | head -n 10
109 107 abort: censored node: 613bc869fceb
110 108 (set censor.policy to ignore errors)
111 [255]
112 $ hg cat -r 0 target
109 $ hg cat -r 0 target | head -n 10
113 110 Initially untainted file
114 111
115 112 Can only checkout target at uncensored revisions, -X is workaround for --all
116 113
117 $ hg revert -r $C2 target
114 $ hg revert -r $C2 target | head -n 10
118 115 abort: censored node: 1e0247a9a4b7
119 116 (set censor.policy to ignore errors)
120 [255]
121 $ hg revert -r $C1 target
117 $ hg revert -r $C1 target | head -n 10
122 118 abort: censored node: 613bc869fceb
123 119 (set censor.policy to ignore errors)
124 [255]
125 120 $ hg revert -r $C1 --all
126 121 reverting bystander
127 122 reverting target
128 123 abort: censored node: 613bc869fceb
129 124 (set censor.policy to ignore errors)
130 125 [255]
131 126 $ hg revert -r $C1 --all -X target
132 $ cat target
127 $ cat target | head -n 10
133 128 Tainted file now super sanitized
134 129 $ hg revert -r 0 --all
135 130 reverting target
136 $ cat target
131 $ cat target | head -n 10
137 132 Initially untainted file
138 133 $ hg revert -r $H2 --all
139 134 reverting bystander
140 135 reverting target
141 $ cat target
136 $ cat target | head -n 10
142 137 Tainted file now super sanitized
143 138
144 139 Uncensored file can be viewed at any revision
145 140
146 $ hg cat -r $H1 bystander
141 $ hg cat -r $H1 bystander | head -n 10
147 142 Normal file v2
148 $ hg cat -r $C2 bystander
143 $ hg cat -r $C2 bystander | head -n 10
149 144 Normal file v2
150 $ hg cat -r $C1 bystander
145 $ hg cat -r $C1 bystander | head -n 10
151 146 Normal file here
152 $ hg cat -r 0 bystander
147 $ hg cat -r 0 bystander | head -n 10
153 148 Normal file here
154 149
155 150 Can update to children of censored revision
156 151
157 152 $ hg update -r $H1
158 153 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
159 $ cat target
154 $ cat target | head -n 10
160 155 Tainted file is now sanitized
161 156 $ hg update -r $H2
162 157 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
163 $ cat target
158 $ cat target | head -n 10
164 159 Tainted file now super sanitized
165 160
166 161 Set censor policy to abort in trusted $HGRC so hg verify fails
167 162
168 163 $ cp $HGRCPATH.orig $HGRCPATH
169 164 $ cat >> $HGRCPATH <<EOF
170 165 > [censor]
171 166 > policy = abort
172 167 > EOF
173 168
174 169 Repo fails verification due to censorship
175 170
176 171 $ hg verify
177 172 checking changesets
178 173 checking manifests
179 174 crosschecking files in changesets and manifests
180 175 checking files
181 176 target@1: censored file data
182 177 target@2: censored file data
183 178 checked 5 changesets with 7 changes to 2 files
184 179 2 integrity errors encountered!
185 180 (first damaged changeset appears to be 1)
186 181 [1]
187 182
188 183 Cannot update to revision with censored data
189 184
190 185 $ hg update -r $C2
191 186 abort: censored node: 1e0247a9a4b7
192 187 (set censor.policy to ignore errors)
193 188 [255]
194 189 $ hg update -r $C1
195 190 abort: censored node: 613bc869fceb
196 191 (set censor.policy to ignore errors)
197 192 [255]
198 193 $ hg update -r 0
199 194 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
200 195 $ hg update -r $H2
201 196 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
202 197
203 198 Set censor policy to ignore in trusted $HGRC so hg verify passes
204 199
205 200 $ cp $HGRCPATH.orig $HGRCPATH
206 201 $ cat >> $HGRCPATH <<EOF
207 202 > [censor]
208 203 > policy = ignore
209 204 > EOF
210 205
211 206 Repo passes verification with warnings with explicit config
212 207
213 208 $ hg verify
214 209 checking changesets
215 210 checking manifests
216 211 crosschecking files in changesets and manifests
217 212 checking files
218 213 checked 5 changesets with 7 changes to 2 files
219 214
220 215 May update to revision with censored data with explicit config
221 216
222 217 $ hg update -r $C2
223 218 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
224 $ cat target
219 $ cat target | head -n 10
225 220 $ hg update -r $C1
226 221 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
227 $ cat target
222 $ cat target | head -n 10
228 223 $ hg update -r 0
229 224 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
230 $ cat target
225 $ cat target | head -n 10
231 226 Initially untainted file
232 227 $ hg update -r $H2
233 228 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
234 $ cat target
229 $ cat target | head -n 10
235 230 Tainted file now super sanitized
236 231
237 232 Can merge in revision with censored data. Test requires one branch of history
238 233 with the file censored, but we can't censor at a head, so advance H1.
239 234
240 235 $ hg update -r $H1
241 236 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
242 237 $ C3=$H1
243 238 $ echo 'advanced head H1' > target
244 239 $ hg ci -m 'advance head H1' target
245 240 $ H1=`hg id --debug -i`
246 241 $ hg censor -r $C3 target
247 242 $ hg update -r $H2
248 243 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
249 244 $ hg merge -r $C3
250 245 merging target
251 246 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
252 247 (branch merge, don't forget to commit)
253 248
254 249 Revisions present in repository heads may not be censored
255 250
256 251 $ hg update -C -r $H2
257 252 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
258 253 $ hg censor -r $H2 target
259 254 abort: cannot censor file in heads (78a8fc215e79)
260 255 (clean/delete and commit first)
261 256 [255]
262 257 $ echo 'twiddling thumbs' > bystander
263 258 $ hg ci -m 'bystander commit'
264 259 $ H2=`hg id --debug -i`
265 260 $ hg censor -r "$H2^" target
266 261 abort: cannot censor file in heads (efbe78065929)
267 262 (clean/delete and commit first)
268 263 [255]
269 264
270 265 Cannot censor working directory
271 266
272 267 $ echo 'seriously no passwords' > target
273 268 $ hg ci -m 'extend second head arbitrarily' target
274 269 $ H2=`hg id --debug -i`
275 270 $ hg update -r "$H2^"
276 271 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
277 272 $ hg censor -r . target
278 273 abort: cannot censor working directory
279 274 (clean/delete/update first)
280 275 [255]
281 276 $ hg update -r $H2
282 277 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
283 278
284 279 Can re-add file after being deleted + censored
285 280
286 281 $ C4=$H2
287 282 $ hg rm target
288 283 $ hg ci -m 'delete target so it may be censored'
289 284 $ H2=`hg id --debug -i`
290 285 $ hg censor -r $C4 target
291 $ hg cat -r $C4 target
292 $ hg cat -r "$H2^^" target
286 $ hg cat -r $C4 target | head -n 10
287 $ hg cat -r "$H2^^" target | head -n 10
293 288 Tainted file now super sanitized
294 289 $ echo 'fresh start' > target
295 290 $ hg add target
296 291 $ hg ci -m reincarnated target
297 292 $ H2=`hg id --debug -i`
298 $ hg cat -r $H2 target
293 $ hg cat -r $H2 target | head -n 10
299 294 fresh start
300 $ hg cat -r "$H2^" target
295 $ hg cat -r "$H2^" target | head -n 10
301 296 target: no such file in rev 452ec1762369
302 [1]
303 $ hg cat -r $C4 target
304 $ hg cat -r "$H2^^^" target
297 $ hg cat -r $C4 target | head -n 10
298 $ hg cat -r "$H2^^^" target | head -n 10
305 299 Tainted file now super sanitized
306 300
307 301 Can censor after revlog has expanded to no longer permit inline storage
308 302
309 303 $ for x in `"$PYTHON" $TESTDIR/seq.py 0 50000`
310 304 > do
311 305 > echo "Password: hunter$x" >> target
312 306 > done
313 307 $ hg ci -m 'add 100k passwords'
314 308 $ H2=`hg id --debug -i`
315 309 $ C5=$H2
316 310 $ hg revert -r "$H2^" target
317 311 $ hg ci -m 'cleaned 100k passwords'
318 312 $ H2=`hg id --debug -i`
319 313 $ hg censor -r $C5 target
320 $ hg cat -r $C5 target
321 $ hg cat -r $H2 target
314 $ hg cat -r $C5 target | head -n 10
315 $ hg cat -r $H2 target | head -n 10
322 316 fresh start
323 317
324 318 Repo with censored nodes can be cloned and cloned nodes are censored
325 319
326 320 $ cd ..
327 321 $ hg clone r rclone
328 322 updating to branch default
329 323 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
330 324 $ cd rclone
331 $ hg cat -r $H1 target
325 $ hg cat -r $H1 target | head -n 10
332 326 advanced head H1
333 $ hg cat -r $H2~5 target
327 $ hg cat -r $H2~5 target | head -n 10
334 328 Tainted file now super sanitized
335 $ hg cat -r $C2 target
336 $ hg cat -r $C1 target
337 $ hg cat -r 0 target
329 $ hg cat -r $C2 target | head -n 10
330 $ hg cat -r $C1 target | head -n 10
331 $ hg cat -r 0 target | head -n 10
338 332 Initially untainted file
339 333 $ hg verify
340 334 checking changesets
341 335 checking manifests
342 336 crosschecking files in changesets and manifests
343 337 checking files
344 338 checked 12 changesets with 13 changes to 2 files
345 339
346 340 Repo cloned before tainted content introduced can pull censored nodes
347 341
348 342 $ cd ../rpull
349 $ hg cat -r tip target
343 $ hg cat -r tip target | head -n 10
350 344 Initially untainted file
351 345 $ hg verify
352 346 checking changesets
353 347 checking manifests
354 348 crosschecking files in changesets and manifests
355 349 checking files
356 350 checked 1 changesets with 2 changes to 2 files
357 351 $ hg pull -r $H1 -r $H2
358 352 pulling from $TESTTMP/r
359 353 searching for changes
360 354 adding changesets
361 355 adding manifests
362 356 adding file changes
363 357 added 11 changesets with 11 changes to 2 files (+1 heads)
364 358 new changesets 186fb27560c3:683e4645fded
365 359 (run 'hg heads' to see heads, 'hg merge' to merge)
366 360 $ hg update 4
367 361 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
368 $ cat target
362 $ cat target | head -n 10
369 363 Tainted file now super sanitized
370 $ hg cat -r $H1 target
364 $ hg cat -r $H1 target | head -n 10
371 365 advanced head H1
372 $ hg cat -r $H2~5 target
366 $ hg cat -r $H2~5 target | head -n 10
373 367 Tainted file now super sanitized
374 $ hg cat -r $C2 target
375 $ hg cat -r $C1 target
376 $ hg cat -r 0 target
368 $ hg cat -r $C2 target | head -n 10
369 $ hg cat -r $C1 target | head -n 10
370 $ hg cat -r 0 target | head -n 10
377 371 Initially untainted file
378 372 $ hg verify
379 373 checking changesets
380 374 checking manifests
381 375 crosschecking files in changesets and manifests
382 376 checking files
383 377 checked 12 changesets with 13 changes to 2 files
384 378
385 379 Censored nodes can be pushed if they censor previously unexchanged nodes
386 380
387 381 $ echo 'Passwords: hunter2hunter2' > target
388 382 $ hg ci -m 're-add password from clone' target
389 383 created new head
390 384 $ H3=`hg id --debug -i`
391 385 $ REV=$H3
392 386 $ echo 'Re-sanitized; nothing to see here' > target
393 387 $ hg ci -m 're-sanitized' target
394 388 $ H2=`hg id --debug -i`
395 389 $ CLEANREV=$H2
396 $ hg cat -r $REV target
390 $ hg cat -r $REV target | head -n 10
397 391 Passwords: hunter2hunter2
398 392 $ hg censor -r $REV target
399 $ hg cat -r $REV target
400 $ hg cat -r $CLEANREV target
393 $ hg cat -r $REV target | head -n 10
394 $ hg cat -r $CLEANREV target | head -n 10
401 395 Re-sanitized; nothing to see here
402 396 $ hg push -f -r $H2
403 397 pushing to $TESTTMP/r
404 398 searching for changes
405 399 adding changesets
406 400 adding manifests
407 401 adding file changes
408 402 added 2 changesets with 2 changes to 1 files (+1 heads)
409 403
410 404 $ cd ../r
411 $ hg cat -r $REV target
412 $ hg cat -r $CLEANREV target
405 $ hg cat -r $REV target | head -n 10
406 $ hg cat -r $CLEANREV target | head -n 10
413 407 Re-sanitized; nothing to see here
414 408 $ hg update $CLEANREV
415 409 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
416 $ cat target
410 $ cat target | head -n 10
417 411 Re-sanitized; nothing to see here
418 412
419 413 Censored nodes can be bundled up and unbundled in another repo
420 414
421 415 $ hg bundle --base 0 ../pwbundle
422 416 13 changesets found
423 417 $ cd ../rclone
424 418 $ hg unbundle ../pwbundle
425 419 adding changesets
426 420 adding manifests
427 421 adding file changes
428 422 added 2 changesets with 2 changes to 2 files (+1 heads)
429 423 new changesets 075be80ac777:dcbaf17bf3a1 (2 drafts)
430 424 (run 'hg heads .' to see heads, 'hg merge' to merge)
431 $ hg cat -r $REV target
432 $ hg cat -r $CLEANREV target
425 $ hg cat -r $REV target | head -n 10
426 $ hg cat -r $CLEANREV target | head -n 10
433 427 Re-sanitized; nothing to see here
434 428 $ hg update $CLEANREV
435 429 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
436 $ cat target
430 $ cat target | head -n 10
437 431 Re-sanitized; nothing to see here
438 432 $ hg verify
439 433 checking changesets
440 434 checking manifests
441 435 crosschecking files in changesets and manifests
442 436 checking files
443 437 checked 14 changesets with 15 changes to 2 files
444 438
445 439 Grepping only warns, doesn't error out
446 440
447 441 $ cd ../rpull
448 442 $ hg grep 'Normal file'
449 443 bystander:Normal file v2
450 444 $ hg grep nothing
451 445 target:Re-sanitized; nothing to see here
452 446 $ hg grep --diff 'Normal file'
453 447 cannot search in censored file: target:7
454 448 cannot search in censored file: target:10
455 449 cannot search in censored file: target:12
456 450 bystander:6:-:Normal file v2
457 451 cannot search in censored file: target:1
458 452 cannot search in censored file: target:2
459 453 cannot search in censored file: target:3
460 454 bystander:2:-:Normal file here
461 455 bystander:2:+:Normal file v2
462 456 bystander:0:+:Normal file here
463 457 $ hg grep --diff nothing
464 458 cannot search in censored file: target:7
465 459 cannot search in censored file: target:10
466 460 cannot search in censored file: target:12
467 461 target:13:+:Re-sanitized; nothing to see here
468 462 cannot search in censored file: target:1
469 463 cannot search in censored file: target:2
470 464 cannot search in censored file: target:3
471 465
472 466 Censored nodes can be imported on top of censored nodes, consecutively
473 467
474 468 $ hg init ../rimport
475 469 $ hg bundle --base 1 ../rimport/splitbundle
476 470 12 changesets found
477 471 $ cd ../rimport
478 472 $ hg pull -r $H1 -r $H2 ../r
479 473 pulling from ../r
480 474 adding changesets
481 475 adding manifests
482 476 adding file changes
483 477 added 8 changesets with 10 changes to 2 files (+1 heads)
484 478 new changesets e97f55b2665a:dcbaf17bf3a1
485 479 (run 'hg heads' to see heads, 'hg merge' to merge)
486 480 $ hg unbundle splitbundle
487 481 adding changesets
488 482 adding manifests
489 483 adding file changes
490 484 added 6 changesets with 5 changes to 2 files (+1 heads)
491 485 new changesets efbe78065929:683e4645fded (6 drafts)
492 486 (run 'hg heads .' to see heads, 'hg merge' to merge)
493 487 $ hg update $H2
494 488 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
495 $ cat target
489 $ cat target | head -n 10
496 490 Re-sanitized; nothing to see here
497 491 $ hg verify
498 492 checking changesets
499 493 checking manifests
500 494 crosschecking files in changesets and manifests
501 495 checking files
502 496 checked 14 changesets with 15 changes to 2 files
503 497 $ cd ../r
504 498
505 499 Can import bundle where first revision of a file is censored
506 500
507 501 $ hg init ../rinit
508 502 $ hg censor -r 0 target
509 503 $ hg bundle -r 0 --base null ../rinit/initbundle
510 504 1 changesets found
511 505 $ cd ../rinit
512 506 $ hg unbundle initbundle
513 507 adding changesets
514 508 adding manifests
515 509 adding file changes
516 510 added 1 changesets with 2 changes to 2 files
517 511 new changesets e97f55b2665a (1 drafts)
518 512 (run 'hg update' to get a working copy)
519 $ hg cat -r 0 target
513 $ hg cat -r 0 target | head -n 10
General Comments 0
You need to be logged in to leave comments. Login now