##// END OF EJS Templates
tests: update test to work with Git 2.16...
Gregory Szorc -
r35804:8144f1b0 default
parent child Browse files
Show More
@@ -1,1255 +1,1255 b''
1 1 #require git
2 2
3 3 make git commits repeatable
4 4
5 5 $ cat >> $HGRCPATH <<EOF
6 6 > [defaults]
7 7 > commit = -d "0 0"
8 8 > EOF
9 9
10 10 $ echo "[core]" >> $HOME/.gitconfig
11 11 $ echo "autocrlf = false" >> $HOME/.gitconfig
12 12 $ GIT_AUTHOR_NAME='test'; export GIT_AUTHOR_NAME
13 13 $ GIT_AUTHOR_EMAIL='test@example.org'; export GIT_AUTHOR_EMAIL
14 14 $ GIT_AUTHOR_DATE='1234567891 +0000'; export GIT_AUTHOR_DATE
15 15 $ GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; export GIT_COMMITTER_NAME
16 16 $ GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"; export GIT_COMMITTER_EMAIL
17 17 $ GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"; export GIT_COMMITTER_DATE
18 18 $ GIT_CONFIG_NOSYSTEM=1; export GIT_CONFIG_NOSYSTEM
19 19
20 20 root hg repo
21 21
22 22 $ hg init t
23 23 $ cd t
24 24 $ echo a > a
25 25 $ hg add a
26 26 $ hg commit -m a
27 27 $ cd ..
28 28
29 29 new external git repo
30 30
31 31 $ mkdir gitroot
32 32 $ cd gitroot
33 33 $ git init -q
34 34 $ echo g > g
35 35 $ git add g
36 36 $ git commit -q -m g
37 37
38 38 add subrepo clone
39 39
40 40 $ cd ../t
41 41 $ echo 's = [git]../gitroot' > .hgsub
42 42 $ git clone -q ../gitroot s
43 43 $ hg add .hgsub
44 44
45 45 git subrepo is disabled by default
46 46
47 47 $ hg commit -m 'new git subrepo'
48 48 abort: git subrepos not allowed
49 49 (see 'hg help config.subrepos' for details)
50 50 [255]
51 51
52 52 so enable it
53 53
54 54 $ cat >> $HGRCPATH <<EOF
55 55 > [subrepos]
56 56 > git:allowed = true
57 57 > EOF
58 58
59 59 $ hg commit -m 'new git subrepo'
60 60
61 61 $ hg debugsub
62 62 path s
63 63 source ../gitroot
64 64 revision da5f5b1d8ffcf62fb8327bcd3c89a4367a6018e7
65 65
66 66 record a new commit from upstream from a different branch
67 67
68 68 $ cd ../gitroot
69 69 $ git checkout -q -b testing
70 70 $ echo gg >> g
71 71 $ git commit -q -a -m gg
72 72
73 73 $ cd ../t/s
74 74 $ git pull -q >/dev/null 2>/dev/null
75 75 $ git checkout -q -b testing origin/testing >/dev/null
76 76
77 77 $ cd ..
78 78 $ hg status --subrepos
79 79 M s/g
80 80 $ hg commit -m 'update git subrepo'
81 81 $ hg debugsub
82 82 path s
83 83 source ../gitroot
84 84 revision 126f2a14290cd5ce061fdedc430170e8d39e1c5a
85 85
86 86 make $GITROOT pushable, by replacing it with a clone with nothing checked out
87 87
88 88 $ cd ..
89 89 $ git clone gitroot gitrootbare --bare -q
90 90 $ rm -rf gitroot
91 91 $ mv gitrootbare gitroot
92 92
93 93 clone root
94 94
95 95 $ cd t
96 96 $ hg clone . ../tc 2> /dev/null
97 97 updating to branch default
98 98 cloning subrepo s from $TESTTMP/gitroot
99 99 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
100 100 $ cd ../tc
101 101 $ hg debugsub
102 102 path s
103 103 source ../gitroot
104 104 revision 126f2a14290cd5ce061fdedc430170e8d39e1c5a
105 105 $ cd ..
106 106
107 107 clone with subrepo disabled (update should fail)
108 108
109 109 $ hg clone t -U tc2 --config subrepos.allowed=false
110 110 $ hg update -R tc2 --config subrepos.allowed=false
111 111 abort: subrepos not enabled
112 112 (see 'hg help config.subrepos' for details)
113 113 [255]
114 114 $ ls tc2
115 115 a
116 116
117 117 $ hg clone t tc3 --config subrepos.allowed=false
118 118 updating to branch default
119 119 abort: subrepos not enabled
120 120 (see 'hg help config.subrepos' for details)
121 121 [255]
122 122 $ ls tc3
123 123 a
124 124
125 125 update to previous substate
126 126
127 127 $ cd tc
128 128 $ hg update 1 -q
129 129 $ cat s/g
130 130 g
131 131 $ hg debugsub
132 132 path s
133 133 source ../gitroot
134 134 revision da5f5b1d8ffcf62fb8327bcd3c89a4367a6018e7
135 135
136 136 clone root, make local change
137 137
138 138 $ cd ../t
139 139 $ hg clone . ../ta 2> /dev/null
140 140 updating to branch default
141 141 cloning subrepo s from $TESTTMP/gitroot
142 142 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
143 143
144 144 $ cd ../ta
145 145 $ echo ggg >> s/g
146 146 $ hg status --subrepos
147 147 M s/g
148 148 $ hg diff --subrepos
149 149 diff --git a/s/g b/s/g
150 150 index 089258f..85341ee 100644
151 151 --- a/s/g
152 152 +++ b/s/g
153 153 @@ -1,2 +1,3 @@
154 154 g
155 155 gg
156 156 +ggg
157 157 $ hg commit --subrepos -m ggg
158 158 committing subrepository s
159 159 $ hg debugsub
160 160 path s
161 161 source ../gitroot
162 162 revision 79695940086840c99328513acbe35f90fcd55e57
163 163
164 164 clone root separately, make different local change
165 165
166 166 $ cd ../t
167 167 $ hg clone . ../tb 2> /dev/null
168 168 updating to branch default
169 169 cloning subrepo s from $TESTTMP/gitroot
170 170 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
171 171
172 172 $ cd ../tb/s
173 173 $ hg status --subrepos
174 174 $ echo f > f
175 175 $ hg status --subrepos
176 176 ? s/f
177 177 $ hg add .
178 178 adding f
179 179 $ git add f
180 180 $ cd ..
181 181
182 182 $ hg status --subrepos
183 183 A s/f
184 184 $ hg commit --subrepos -m f
185 185 committing subrepository s
186 186 $ hg debugsub
187 187 path s
188 188 source ../gitroot
189 189 revision aa84837ccfbdfedcdcdeeedc309d73e6eb069edc
190 190
191 191 user b push changes
192 192
193 193 $ hg push 2>/dev/null
194 194 pushing to $TESTTMP/t
195 195 pushing branch testing of subrepository "s"
196 196 searching for changes
197 197 adding changesets
198 198 adding manifests
199 199 adding file changes
200 200 added 1 changesets with 1 changes to 1 files
201 201
202 202 user a pulls, merges, commits
203 203
204 204 $ cd ../ta
205 205 $ hg pull
206 206 pulling from $TESTTMP/t
207 207 searching for changes
208 208 adding changesets
209 209 adding manifests
210 210 adding file changes
211 211 added 1 changesets with 1 changes to 1 files (+1 heads)
212 212 new changesets 089416c11d73
213 213 (run 'hg heads' to see heads, 'hg merge' to merge)
214 214 $ hg merge 2>/dev/null
215 215 subrepository s diverged (local revision: 7969594, remote revision: aa84837)
216 216 (M)erge, keep (l)ocal [working copy] or keep (r)emote [merge rev]? m
217 217 pulling subrepo s from $TESTTMP/gitroot
218 218 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
219 219 (branch merge, don't forget to commit)
220 220 $ hg st --subrepos s
221 221 A s/f
222 222 $ cat s/f
223 223 f
224 224 $ cat s/g
225 225 g
226 226 gg
227 227 ggg
228 228 $ hg commit --subrepos -m 'merge'
229 229 committing subrepository s
230 230 $ hg status --subrepos --rev 1:5
231 231 M .hgsubstate
232 232 M s/g
233 233 A s/f
234 234 $ hg debugsub
235 235 path s
236 236 source ../gitroot
237 237 revision f47b465e1bce645dbf37232a00574aa1546ca8d3
238 238 $ hg push 2>/dev/null
239 239 pushing to $TESTTMP/t
240 240 pushing branch testing of subrepository "s"
241 241 searching for changes
242 242 adding changesets
243 243 adding manifests
244 244 adding file changes
245 245 added 2 changesets with 2 changes to 1 files
246 246
247 247 make upstream git changes
248 248
249 249 $ cd ..
250 250 $ git clone -q gitroot gitclone
251 251 $ cd gitclone
252 252 $ echo ff >> f
253 253 $ git commit -q -a -m ff
254 254 $ echo fff >> f
255 255 $ git commit -q -a -m fff
256 256 $ git push origin testing 2>/dev/null
257 257
258 258 make and push changes to hg without updating the subrepo
259 259
260 260 $ cd ../t
261 261 $ hg clone . ../td 2>&1 | egrep -v '^Cloning into|^done\.'
262 262 updating to branch default
263 263 cloning subrepo s from $TESTTMP/gitroot
264 264 checking out detached HEAD in subrepository "s"
265 265 check out a git branch if you intend to make changes
266 266 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
267 267 $ cd ../td
268 268 $ echo aa >> a
269 269 $ hg commit -m aa
270 270 $ hg push
271 271 pushing to $TESTTMP/t
272 272 searching for changes
273 273 adding changesets
274 274 adding manifests
275 275 adding file changes
276 276 added 1 changesets with 1 changes to 1 files
277 277
278 278 sync to upstream git, distribute changes
279 279
280 280 $ cd ../ta
281 281 $ hg pull -u -q
282 282 $ cd s
283 283 $ git pull -q >/dev/null 2>/dev/null
284 284 $ cd ..
285 285 $ hg commit -m 'git upstream sync'
286 286 $ hg debugsub
287 287 path s
288 288 source ../gitroot
289 289 revision 32a343883b74769118bb1d3b4b1fbf9156f4dddc
290 290 $ hg push -q
291 291
292 292 $ cd ../tb
293 293 $ hg pull -q
294 294 $ hg update 2>/dev/null
295 295 pulling subrepo s from $TESTTMP/gitroot
296 296 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
297 297 $ hg debugsub
298 298 path s
299 299 source ../gitroot
300 300 revision 32a343883b74769118bb1d3b4b1fbf9156f4dddc
301 301
302 302 create a new git branch
303 303
304 304 $ cd s
305 305 $ git checkout -b b2
306 306 Switched to a new branch 'b2'
307 307 $ echo a>a
308 308 $ git add a
309 309 $ git commit -qm 'add a'
310 310 $ cd ..
311 311 $ hg commit -m 'add branch in s'
312 312
313 313 pulling new git branch should not create tracking branch named 'origin/b2'
314 314 (issue3870)
315 315 $ cd ../td/s
316 316 $ git remote set-url origin $TESTTMP/tb/s
317 317 $ git branch --no-track oldtesting
318 318 $ cd ..
319 319 $ hg pull -q ../tb
320 320 $ hg up
321 321 From $TESTTMP/tb/s
322 322 * [new branch] b2 -> origin/b2
323 Previous HEAD position was f47b465... merge
323 Previous HEAD position was f47b465* merge (glob)
324 324 Switched to a new branch 'b2'
325 325 pulling subrepo s from $TESTTMP/tb/s
326 326 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
327 327
328 328 update to a revision without the subrepo, keeping the local git repository
329 329
330 330 $ cd ../t
331 331 $ hg up 0
332 332 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
333 333 $ ls -a s
334 334 .
335 335 ..
336 336 .git
337 337
338 338 $ hg up 2
339 339 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
340 340 $ ls -a s
341 341 .
342 342 ..
343 343 .git
344 344 g
345 345
346 346 archive subrepos
347 347
348 348 $ cd ../tc
349 349 $ hg pull -q
350 350 $ hg archive --subrepos -r 5 ../archive 2>/dev/null
351 351 pulling subrepo s from $TESTTMP/gitroot
352 352 $ cd ../archive
353 353 $ cat s/f
354 354 f
355 355 $ cat s/g
356 356 g
357 357 gg
358 358 ggg
359 359
360 360 $ hg -R ../tc archive --subrepo -r 5 -X ../tc/**f ../archive_x 2>/dev/null
361 361 $ find ../archive_x | sort | grep -v pax_global_header
362 362 ../archive_x
363 363 ../archive_x/.hg_archival.txt
364 364 ../archive_x/.hgsub
365 365 ../archive_x/.hgsubstate
366 366 ../archive_x/a
367 367 ../archive_x/s
368 368 ../archive_x/s/g
369 369
370 370 $ hg -R ../tc archive -S ../archive.tgz --prefix '.' 2>/dev/null
371 371 $ tar -tzf ../archive.tgz | sort | grep -v pax_global_header
372 372 .hg_archival.txt
373 373 .hgsub
374 374 .hgsubstate
375 375 a
376 376 s/g
377 377
378 378 create nested repo
379 379
380 380 $ cd ..
381 381 $ hg init outer
382 382 $ cd outer
383 383 $ echo b>b
384 384 $ hg add b
385 385 $ hg commit -m b
386 386
387 387 $ hg clone ../t inner 2> /dev/null
388 388 updating to branch default
389 389 cloning subrepo s from $TESTTMP/gitroot
390 390 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
391 391 $ echo inner = inner > .hgsub
392 392 $ hg add .hgsub
393 393 $ hg commit -m 'nested sub'
394 394
395 395 nested commit
396 396
397 397 $ echo ffff >> inner/s/f
398 398 $ hg status --subrepos
399 399 M inner/s/f
400 400 $ hg commit --subrepos -m nested
401 401 committing subrepository inner
402 402 committing subrepository inner/s
403 403
404 404 nested archive
405 405
406 406 $ hg archive --subrepos ../narchive
407 407 $ ls ../narchive/inner/s | grep -v pax_global_header
408 408 f
409 409 g
410 410
411 411 relative source expansion
412 412
413 413 $ cd ..
414 414 $ mkdir d
415 415 $ hg clone t d/t 2> /dev/null
416 416 updating to branch default
417 417 cloning subrepo s from $TESTTMP/gitroot
418 418 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
419 419
420 420 Don't crash if the subrepo is missing
421 421
422 422 $ hg clone t missing -q
423 423 $ cd missing
424 424 $ rm -rf s
425 425 $ hg status -S
426 426 $ hg sum | grep commit
427 427 commit: 1 subrepos
428 428 $ hg push -q
429 429 abort: subrepo s is missing (in subrepository "s")
430 430 [255]
431 431 $ hg commit --subrepos -qm missing
432 432 abort: subrepo s is missing (in subrepository "s")
433 433 [255]
434 434
435 435 #if symlink
436 436 Don't crash if subrepo is a broken symlink
437 437 $ ln -s broken s
438 438 $ hg status -S
439 439 abort: subrepo 's' traverses symbolic link
440 440 [255]
441 441 $ hg push -q
442 442 abort: subrepo 's' traverses symbolic link
443 443 [255]
444 444 $ hg commit --subrepos -qm missing
445 445 abort: subrepo 's' traverses symbolic link
446 446 [255]
447 447 $ rm s
448 448 #endif
449 449
450 450 $ hg update -C 2> /dev/null
451 451 cloning subrepo s from $TESTTMP/gitroot
452 452 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
453 453 $ hg sum | grep commit
454 454 commit: (clean)
455 455
456 456 Don't crash if the .hgsubstate entry is missing
457 457
458 458 $ hg update 1 -q
459 459 $ hg rm .hgsubstate
460 460 $ hg commit .hgsubstate -m 'no substate'
461 461 nothing changed
462 462 [1]
463 463 $ hg tag -l nosubstate
464 464 $ hg manifest
465 465 .hgsub
466 466 .hgsubstate
467 467 a
468 468
469 469 $ hg status -S
470 470 R .hgsubstate
471 471 $ hg sum | grep commit
472 472 commit: 1 removed, 1 subrepos (new branch head)
473 473
474 474 $ hg commit -m 'restore substate'
475 475 nothing changed
476 476 [1]
477 477 $ hg manifest
478 478 .hgsub
479 479 .hgsubstate
480 480 a
481 481 $ hg sum | grep commit
482 482 commit: 1 removed, 1 subrepos (new branch head)
483 483
484 484 $ hg update -qC nosubstate
485 485 $ ls s
486 486 g
487 487
488 488 issue3109: false positives in git diff-index
489 489
490 490 $ hg update -q
491 491 $ touch -t 200001010000 s/g
492 492 $ hg status --subrepos
493 493 $ touch -t 200001010000 s/g
494 494 $ hg sum | grep commit
495 495 commit: (clean)
496 496
497 497 Check hg update --clean
498 498 $ cd $TESTTMP/ta
499 499 $ echo > s/g
500 500 $ cd s
501 501 $ echo c1 > f1
502 502 $ echo c1 > f2
503 503 $ git add f1
504 504 $ cd ..
505 505 $ hg status -S
506 506 M s/g
507 507 A s/f1
508 508 ? s/f2
509 509 $ ls s
510 510 f
511 511 f1
512 512 f2
513 513 g
514 514 $ hg update --clean
515 515 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
516 516 $ hg status -S
517 517 ? s/f1
518 518 ? s/f2
519 519 $ ls s
520 520 f
521 521 f1
522 522 f2
523 523 g
524 524
525 525 Sticky subrepositories, no changes
526 526 $ cd $TESTTMP/ta
527 527 $ hg id -n
528 528 7
529 529 $ cd s
530 530 $ git rev-parse HEAD
531 531 32a343883b74769118bb1d3b4b1fbf9156f4dddc
532 532 $ cd ..
533 533 $ hg update 1 > /dev/null 2>&1
534 534 $ hg id -n
535 535 1
536 536 $ cd s
537 537 $ git rev-parse HEAD
538 538 da5f5b1d8ffcf62fb8327bcd3c89a4367a6018e7
539 539 $ cd ..
540 540
541 541 Sticky subrepositories, file changes
542 542 $ touch s/f1
543 543 $ cd s
544 544 $ git add f1
545 545 $ cd ..
546 546 $ hg id -n
547 547 1+
548 548 $ cd s
549 549 $ git rev-parse HEAD
550 550 da5f5b1d8ffcf62fb8327bcd3c89a4367a6018e7
551 551 $ cd ..
552 552 $ hg update 4
553 553 subrepository s diverged (local revision: da5f5b1, remote revision: aa84837)
554 554 (M)erge, keep (l)ocal [working copy] or keep (r)emote [destination]? m
555 555 subrepository sources for s differ
556 556 use (l)ocal source (da5f5b1) or (r)emote source (aa84837)? l
557 557 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
558 558 $ hg id -n
559 559 4+
560 560 $ cd s
561 561 $ git rev-parse HEAD
562 562 da5f5b1d8ffcf62fb8327bcd3c89a4367a6018e7
563 563 $ cd ..
564 564 $ hg update --clean tip > /dev/null 2>&1
565 565
566 566 Sticky subrepository, revision updates
567 567 $ hg id -n
568 568 7
569 569 $ cd s
570 570 $ git rev-parse HEAD
571 571 32a343883b74769118bb1d3b4b1fbf9156f4dddc
572 572 $ cd ..
573 573 $ cd s
574 574 $ git checkout aa84837ccfbdfedcdcdeeedc309d73e6eb069edc
575 Previous HEAD position was 32a3438... fff
576 HEAD is now at aa84837... f
575 Previous HEAD position was 32a3438* fff (glob)
576 HEAD is now at aa84837* f (glob)
577 577 $ cd ..
578 578 $ hg update 1
579 579 subrepository s diverged (local revision: 32a3438, remote revision: da5f5b1)
580 580 (M)erge, keep (l)ocal [working copy] or keep (r)emote [destination]? m
581 581 subrepository sources for s differ (in checked out version)
582 582 use (l)ocal source (32a3438) or (r)emote source (da5f5b1)? l
583 583 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
584 584 $ hg id -n
585 585 1+
586 586 $ cd s
587 587 $ git rev-parse HEAD
588 588 aa84837ccfbdfedcdcdeeedc309d73e6eb069edc
589 589 $ cd ..
590 590
591 591 Sticky subrepository, file changes and revision updates
592 592 $ touch s/f1
593 593 $ cd s
594 594 $ git add f1
595 595 $ git rev-parse HEAD
596 596 aa84837ccfbdfedcdcdeeedc309d73e6eb069edc
597 597 $ cd ..
598 598 $ hg id -n
599 599 1+
600 600 $ hg update 7
601 601 subrepository s diverged (local revision: 32a3438, remote revision: 32a3438)
602 602 (M)erge, keep (l)ocal [working copy] or keep (r)emote [destination]? m
603 603 subrepository sources for s differ
604 604 use (l)ocal source (32a3438) or (r)emote source (32a3438)? l
605 605 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
606 606 $ hg id -n
607 607 7+
608 608 $ cd s
609 609 $ git rev-parse HEAD
610 610 aa84837ccfbdfedcdcdeeedc309d73e6eb069edc
611 611 $ cd ..
612 612
613 613 Sticky repository, update --clean
614 614 $ hg update --clean tip 2>/dev/null
615 615 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
616 616 $ hg id -n
617 617 7
618 618 $ cd s
619 619 $ git rev-parse HEAD
620 620 32a343883b74769118bb1d3b4b1fbf9156f4dddc
621 621 $ cd ..
622 622
623 623 Test subrepo already at intended revision:
624 624 $ cd s
625 625 $ git checkout 32a343883b74769118bb1d3b4b1fbf9156f4dddc
626 HEAD is now at 32a3438... fff
626 HEAD is now at 32a3438* fff (glob)
627 627 $ cd ..
628 628 $ hg update 1
629 Previous HEAD position was 32a3438... fff
630 HEAD is now at da5f5b1... g
629 Previous HEAD position was 32a3438* fff (glob)
630 HEAD is now at da5f5b1* g (glob)
631 631 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
632 632 $ hg id -n
633 633 1
634 634 $ cd s
635 635 $ git rev-parse HEAD
636 636 da5f5b1d8ffcf62fb8327bcd3c89a4367a6018e7
637 637 $ cd ..
638 638
639 639 Test forgetting files, not implemented in git subrepo, used to
640 640 traceback
641 641 #if no-windows
642 642 $ hg forget 'notafile*'
643 643 notafile*: $ENOENT$
644 644 [1]
645 645 #else
646 646 error: The filename, directory name, or volume label syntax is incorrect
647 647 $ hg forget 'notafile'
648 648 notafile: * (glob)
649 649 [1]
650 650 #endif
651 651
652 652 $ cd ..
653 653
654 654 Test sanitizing ".hg/hgrc" in subrepo
655 655
656 656 $ cd t
657 657 $ hg tip -q
658 658 7:af6d2edbb0d3
659 659 $ hg update -q -C af6d2edbb0d3
660 660 $ cd s
661 661 $ git checkout -q -b sanitize-test
662 662 $ mkdir .hg
663 663 $ echo '.hg/hgrc in git repo' > .hg/hgrc
664 664 $ mkdir -p sub/.hg
665 665 $ echo 'sub/.hg/hgrc in git repo' > sub/.hg/hgrc
666 666 $ git add .hg sub
667 667 $ git commit -qm 'add .hg/hgrc to be sanitized at hg update'
668 668 $ git push -q origin sanitize-test
669 669 $ cd ..
670 670 $ grep ' s$' .hgsubstate
671 671 32a343883b74769118bb1d3b4b1fbf9156f4dddc s
672 672 $ hg commit -qm 'commit with git revision including .hg/hgrc'
673 673 $ hg parents -q
674 674 8:3473d20bddcf
675 675 $ grep ' s$' .hgsubstate
676 676 c4069473b459cf27fd4d7c2f50c4346b4e936599 s
677 677 $ cd ..
678 678
679 679 $ hg -R tc pull -q
680 680 $ hg -R tc update -q -C 3473d20bddcf 2>&1 | sort
681 681 warning: removing potentially hostile 'hgrc' in '$TESTTMP/tc/s/.hg'
682 682 warning: removing potentially hostile 'hgrc' in '$TESTTMP/tc/s/sub/.hg'
683 683 $ cd tc
684 684 $ hg parents -q
685 685 8:3473d20bddcf
686 686 $ grep ' s$' .hgsubstate
687 687 c4069473b459cf27fd4d7c2f50c4346b4e936599 s
688 688 $ test -f s/.hg/hgrc
689 689 [1]
690 690 $ test -f s/sub/.hg/hgrc
691 691 [1]
692 692 $ cd ..
693 693
694 694 additional test for "git merge --ff" route:
695 695
696 696 $ cd t
697 697 $ hg tip -q
698 698 8:3473d20bddcf
699 699 $ hg update -q -C af6d2edbb0d3
700 700 $ cd s
701 701 $ git checkout -q testing
702 702 $ mkdir .hg
703 703 $ echo '.hg/hgrc in git repo' > .hg/hgrc
704 704 $ mkdir -p sub/.hg
705 705 $ echo 'sub/.hg/hgrc in git repo' > sub/.hg/hgrc
706 706 $ git add .hg sub
707 707 $ git commit -qm 'add .hg/hgrc to be sanitized at hg update (git merge --ff)'
708 708 $ git push -q origin testing
709 709 $ cd ..
710 710 $ grep ' s$' .hgsubstate
711 711 32a343883b74769118bb1d3b4b1fbf9156f4dddc s
712 712 $ hg commit -qm 'commit with git revision including .hg/hgrc'
713 713 $ hg parents -q
714 714 9:ed23f7fe024e
715 715 $ grep ' s$' .hgsubstate
716 716 f262643c1077219fbd3858d54e78ef050ef84fbf s
717 717 $ cd ..
718 718
719 719 $ cd tc
720 720 $ hg update -q -C af6d2edbb0d3
721 721 $ test -f s/.hg/hgrc
722 722 [1]
723 723 $ test -f s/sub/.hg/hgrc
724 724 [1]
725 725 $ cd ..
726 726 $ hg -R tc pull -q
727 727 $ hg -R tc update -q -C ed23f7fe024e 2>&1 | sort
728 728 warning: removing potentially hostile 'hgrc' in '$TESTTMP/tc/s/.hg'
729 729 warning: removing potentially hostile 'hgrc' in '$TESTTMP/tc/s/sub/.hg'
730 730 $ cd tc
731 731 $ hg parents -q
732 732 9:ed23f7fe024e
733 733 $ grep ' s$' .hgsubstate
734 734 f262643c1077219fbd3858d54e78ef050ef84fbf s
735 735 $ test -f s/.hg/hgrc
736 736 [1]
737 737 $ test -f s/sub/.hg/hgrc
738 738 [1]
739 739
740 740 Test that sanitizing is omitted in meta data area:
741 741
742 742 $ mkdir s/.git/.hg
743 743 $ echo '.hg/hgrc in git metadata area' > s/.git/.hg/hgrc
744 744 $ hg update -q -C af6d2edbb0d3
745 745 checking out detached HEAD in subrepository "s"
746 746 check out a git branch if you intend to make changes
747 747
748 748 check differences made by most recent change
749 749 $ cd s
750 750 $ cat > foobar << EOF
751 751 > woopwoop
752 752 >
753 753 > foo
754 754 > bar
755 755 > EOF
756 756 $ git add foobar
757 757 $ cd ..
758 758
759 759 $ hg diff --subrepos
760 760 diff --git a/s/foobar b/s/foobar
761 761 new file mode 100644
762 762 index 0000000..8a5a5e2
763 763 --- /dev/null
764 764 +++ b/s/foobar
765 765 @@ -0,0 +1,4 @@
766 766 +woopwoop
767 767 +
768 768 +foo
769 769 +bar
770 770
771 771 $ hg commit --subrepos -m "Added foobar"
772 772 committing subrepository s
773 773 created new head
774 774
775 775 $ hg diff -c . --subrepos --nodates
776 776 diff -r af6d2edbb0d3 -r 255ee8cf690e .hgsubstate
777 777 --- a/.hgsubstate
778 778 +++ b/.hgsubstate
779 779 @@ -1,1 +1,1 @@
780 780 -32a343883b74769118bb1d3b4b1fbf9156f4dddc s
781 781 +fd4dbf828a5b2fcd36b2bcf21ea773820970d129 s
782 782 diff --git a/s/foobar b/s/foobar
783 783 new file mode 100644
784 784 index 0000000..8a5a5e2
785 785 --- /dev/null
786 786 +++ b/s/foobar
787 787 @@ -0,0 +1,4 @@
788 788 +woopwoop
789 789 +
790 790 +foo
791 791 +bar
792 792
793 793 check output when only diffing the subrepository
794 794 $ hg diff -c . --subrepos s
795 795 diff --git a/s/foobar b/s/foobar
796 796 new file mode 100644
797 797 index 0000000..8a5a5e2
798 798 --- /dev/null
799 799 +++ b/s/foobar
800 800 @@ -0,0 +1,4 @@
801 801 +woopwoop
802 802 +
803 803 +foo
804 804 +bar
805 805
806 806 check output when diffing something else
807 807 $ hg diff -c . --subrepos .hgsubstate --nodates
808 808 diff -r af6d2edbb0d3 -r 255ee8cf690e .hgsubstate
809 809 --- a/.hgsubstate
810 810 +++ b/.hgsubstate
811 811 @@ -1,1 +1,1 @@
812 812 -32a343883b74769118bb1d3b4b1fbf9156f4dddc s
813 813 +fd4dbf828a5b2fcd36b2bcf21ea773820970d129 s
814 814
815 815 add new changes, including whitespace
816 816 $ cd s
817 817 $ cat > foobar << EOF
818 818 > woop woop
819 819 >
820 820 > foo
821 821 > bar
822 822 > EOF
823 823 $ echo foo > barfoo
824 824 $ git add barfoo
825 825 $ cd ..
826 826
827 827 $ hg diff --subrepos --ignore-all-space
828 828 diff --git a/s/barfoo b/s/barfoo
829 829 new file mode 100644
830 830 index 0000000..257cc56
831 831 --- /dev/null
832 832 +++ b/s/barfoo
833 833 @@ -0,0 +1* @@ (glob)
834 834 +foo
835 835 $ hg diff --subrepos s/foobar
836 836 diff --git a/s/foobar b/s/foobar
837 837 index 8a5a5e2..bd5812a 100644
838 838 --- a/s/foobar
839 839 +++ b/s/foobar
840 840 @@ -1,4 +1,4 @@
841 841 -woopwoop
842 842 +woop woop
843 843
844 844 foo
845 845 bar
846 846
847 847 execute a diffstat
848 848 the output contains a regex, because git 1.7.10 and 1.7.11
849 849 change the amount of whitespace
850 850 $ hg diff --subrepos --stat
851 851 \s*barfoo \|\s+1 \+ (re)
852 852 \s*foobar \|\s+2 \+- (re)
853 853 2 files changed, 2 insertions\(\+\), 1 deletions?\(-\) (re)
854 854
855 855 adding an include should ignore the other elements
856 856 $ hg diff --subrepos -I s/foobar
857 857 diff --git a/s/foobar b/s/foobar
858 858 index 8a5a5e2..bd5812a 100644
859 859 --- a/s/foobar
860 860 +++ b/s/foobar
861 861 @@ -1,4 +1,4 @@
862 862 -woopwoop
863 863 +woop woop
864 864
865 865 foo
866 866 bar
867 867
868 868 adding an exclude should ignore this element
869 869 $ hg diff --subrepos -X s/foobar
870 870 diff --git a/s/barfoo b/s/barfoo
871 871 new file mode 100644
872 872 index 0000000..257cc56
873 873 --- /dev/null
874 874 +++ b/s/barfoo
875 875 @@ -0,0 +1* @@ (glob)
876 876 +foo
877 877
878 878 moving a file should show a removal and an add
879 879 $ hg revert --all
880 880 reverting subrepo ../gitroot
881 881 $ cd s
882 882 $ git mv foobar woop
883 883 $ cd ..
884 884 $ hg diff --subrepos
885 885 diff --git a/s/foobar b/s/foobar
886 886 deleted file mode 100644
887 887 index 8a5a5e2..0000000
888 888 --- a/s/foobar
889 889 +++ /dev/null
890 890 @@ -1,4 +0,0 @@
891 891 -woopwoop
892 892 -
893 893 -foo
894 894 -bar
895 895 diff --git a/s/woop b/s/woop
896 896 new file mode 100644
897 897 index 0000000..8a5a5e2
898 898 --- /dev/null
899 899 +++ b/s/woop
900 900 @@ -0,0 +1,4 @@
901 901 +woopwoop
902 902 +
903 903 +foo
904 904 +bar
905 905 $ rm s/woop
906 906
907 907 revert the subrepository
908 908 $ hg revert --all
909 909 reverting subrepo ../gitroot
910 910
911 911 $ hg status --subrepos
912 912 ? s/barfoo
913 913 ? s/foobar.orig
914 914
915 915 $ mv s/foobar.orig s/foobar
916 916
917 917 $ hg revert --no-backup s
918 918 reverting subrepo ../gitroot
919 919
920 920 $ hg status --subrepos
921 921 ? s/barfoo
922 922
923 923 revert moves orig files to the right place
924 924 $ echo 'bloop' > s/foobar
925 925 $ hg revert --all --verbose --config 'ui.origbackuppath=.hg/origbackups'
926 926 reverting subrepo ../gitroot
927 927 creating directory: $TESTTMP/tc/.hg/origbackups
928 928 saving current version of foobar as $TESTTMP/tc/.hg/origbackups/foobar
929 929 $ ls .hg/origbackups
930 930 foobar
931 931 $ rm -rf .hg/origbackups
932 932
933 933 show file at specific revision
934 934 $ cat > s/foobar << EOF
935 935 > woop woop
936 936 > fooo bar
937 937 > EOF
938 938 $ hg commit --subrepos -m "updated foobar"
939 939 committing subrepository s
940 940 $ cat > s/foobar << EOF
941 941 > current foobar
942 942 > (should not be visible using hg cat)
943 943 > EOF
944 944
945 945 $ hg cat -r . s/foobar
946 946 woop woop
947 947 fooo bar (no-eol)
948 948 $ hg cat -r "parents(.)" s/foobar > catparents
949 949
950 950 $ mkdir -p tmp/s
951 951
952 952 $ hg cat -r "parents(.)" --output tmp/%% s/foobar
953 953 $ diff tmp/% catparents
954 954
955 955 $ hg cat -r "parents(.)" --output tmp/%s s/foobar
956 956 $ diff tmp/foobar catparents
957 957
958 958 $ hg cat -r "parents(.)" --output tmp/%d/otherfoobar s/foobar
959 959 $ diff tmp/s/otherfoobar catparents
960 960
961 961 $ hg cat -r "parents(.)" --output tmp/%p s/foobar
962 962 $ diff tmp/s/foobar catparents
963 963
964 964 $ hg cat -r "parents(.)" --output tmp/%H s/foobar
965 965 $ diff tmp/255ee8cf690ec86e99b1e80147ea93ece117cd9d catparents
966 966
967 967 $ hg cat -r "parents(.)" --output tmp/%R s/foobar
968 968 $ diff tmp/10 catparents
969 969
970 970 $ hg cat -r "parents(.)" --output tmp/%h s/foobar
971 971 $ diff tmp/255ee8cf690e catparents
972 972
973 973 $ rm tmp/10
974 974 $ hg cat -r "parents(.)" --output tmp/%r s/foobar
975 975 $ diff tmp/10 catparents
976 976
977 977 $ mkdir tmp/tc
978 978 $ hg cat -r "parents(.)" --output tmp/%b/foobar s/foobar
979 979 $ diff tmp/tc/foobar catparents
980 980
981 981 cleanup
982 982 $ rm -r tmp
983 983 $ rm catparents
984 984
985 985 add git files, using either files or patterns
986 986 $ echo "hsss! hsssssssh!" > s/snake.python
987 987 $ echo "ccc" > s/c.c
988 988 $ echo "cpp" > s/cpp.cpp
989 989
990 990 $ hg add s/snake.python s/c.c s/cpp.cpp
991 991 $ hg st --subrepos s
992 992 M s/foobar
993 993 A s/c.c
994 994 A s/cpp.cpp
995 995 A s/snake.python
996 996 ? s/barfoo
997 997 $ hg revert s
998 998 reverting subrepo ../gitroot
999 999
1000 1000 $ hg add --subrepos "glob:**.python"
1001 1001 adding s/snake.python
1002 1002 $ hg st --subrepos s
1003 1003 A s/snake.python
1004 1004 ? s/barfoo
1005 1005 ? s/c.c
1006 1006 ? s/cpp.cpp
1007 1007 ? s/foobar.orig
1008 1008 $ hg revert s
1009 1009 reverting subrepo ../gitroot
1010 1010
1011 1011 $ hg add --subrepos s
1012 1012 adding s/barfoo
1013 1013 adding s/c.c
1014 1014 adding s/cpp.cpp
1015 1015 adding s/foobar.orig
1016 1016 adding s/snake.python
1017 1017 $ hg st --subrepos s
1018 1018 A s/barfoo
1019 1019 A s/c.c
1020 1020 A s/cpp.cpp
1021 1021 A s/foobar.orig
1022 1022 A s/snake.python
1023 1023 $ hg revert s
1024 1024 reverting subrepo ../gitroot
1025 1025 make sure everything is reverted correctly
1026 1026 $ hg st --subrepos s
1027 1027 ? s/barfoo
1028 1028 ? s/c.c
1029 1029 ? s/cpp.cpp
1030 1030 ? s/foobar.orig
1031 1031 ? s/snake.python
1032 1032
1033 1033 $ hg add --subrepos --exclude "path:s/c.c"
1034 1034 adding s/barfoo
1035 1035 adding s/cpp.cpp
1036 1036 adding s/foobar.orig
1037 1037 adding s/snake.python
1038 1038 $ hg st --subrepos s
1039 1039 A s/barfoo
1040 1040 A s/cpp.cpp
1041 1041 A s/foobar.orig
1042 1042 A s/snake.python
1043 1043 ? s/c.c
1044 1044 $ hg revert --all -q
1045 1045
1046 1046 .hgignore should not have influence in subrepos
1047 1047 $ cat > .hgignore << EOF
1048 1048 > syntax: glob
1049 1049 > *.python
1050 1050 > EOF
1051 1051 $ hg add .hgignore
1052 1052 $ hg add --subrepos "glob:**.python" s/barfoo
1053 1053 adding s/snake.python
1054 1054 $ hg st --subrepos s
1055 1055 A s/barfoo
1056 1056 A s/snake.python
1057 1057 ? s/c.c
1058 1058 ? s/cpp.cpp
1059 1059 ? s/foobar.orig
1060 1060 $ hg revert --all -q
1061 1061
1062 1062 .gitignore should have influence,
1063 1063 except for explicitly added files (no patterns)
1064 1064 $ cat > s/.gitignore << EOF
1065 1065 > *.python
1066 1066 > EOF
1067 1067 $ hg add s/.gitignore
1068 1068 $ hg st --subrepos s
1069 1069 A s/.gitignore
1070 1070 ? s/barfoo
1071 1071 ? s/c.c
1072 1072 ? s/cpp.cpp
1073 1073 ? s/foobar.orig
1074 1074 $ hg st --subrepos s --all
1075 1075 A s/.gitignore
1076 1076 ? s/barfoo
1077 1077 ? s/c.c
1078 1078 ? s/cpp.cpp
1079 1079 ? s/foobar.orig
1080 1080 I s/snake.python
1081 1081 C s/f
1082 1082 C s/foobar
1083 1083 C s/g
1084 1084 $ hg add --subrepos "glob:**.python"
1085 1085 $ hg st --subrepos s
1086 1086 A s/.gitignore
1087 1087 ? s/barfoo
1088 1088 ? s/c.c
1089 1089 ? s/cpp.cpp
1090 1090 ? s/foobar.orig
1091 1091 $ hg add --subrepos s/snake.python
1092 1092 $ hg st --subrepos s
1093 1093 A s/.gitignore
1094 1094 A s/snake.python
1095 1095 ? s/barfoo
1096 1096 ? s/c.c
1097 1097 ? s/cpp.cpp
1098 1098 ? s/foobar.orig
1099 1099
1100 1100 correctly do a dry run
1101 1101 $ hg add --subrepos s --dry-run
1102 1102 adding s/barfoo
1103 1103 adding s/c.c
1104 1104 adding s/cpp.cpp
1105 1105 adding s/foobar.orig
1106 1106 $ hg st --subrepos s
1107 1107 A s/.gitignore
1108 1108 A s/snake.python
1109 1109 ? s/barfoo
1110 1110 ? s/c.c
1111 1111 ? s/cpp.cpp
1112 1112 ? s/foobar.orig
1113 1113
1114 1114 error given when adding an already tracked file
1115 1115 $ hg add s/.gitignore
1116 1116 s/.gitignore already tracked!
1117 1117 [1]
1118 1118 $ hg add s/g
1119 1119 s/g already tracked!
1120 1120 [1]
1121 1121
1122 1122 removed files can be re-added
1123 1123 removing files using 'rm' or 'git rm' has the same effect,
1124 1124 since we ignore the staging area
1125 1125 $ hg ci --subrepos -m 'snake'
1126 1126 committing subrepository s
1127 1127 $ cd s
1128 1128 $ rm snake.python
1129 1129 (remove leftover .hg so Mercurial doesn't look for a root here)
1130 1130 $ rm -rf .hg
1131 1131 $ hg status --subrepos --all .
1132 1132 R snake.python
1133 1133 ? barfoo
1134 1134 ? c.c
1135 1135 ? cpp.cpp
1136 1136 ? foobar.orig
1137 1137 C .gitignore
1138 1138 C f
1139 1139 C foobar
1140 1140 C g
1141 1141 $ git rm snake.python
1142 1142 rm 'snake.python'
1143 1143 $ hg status --subrepos --all .
1144 1144 R snake.python
1145 1145 ? barfoo
1146 1146 ? c.c
1147 1147 ? cpp.cpp
1148 1148 ? foobar.orig
1149 1149 C .gitignore
1150 1150 C f
1151 1151 C foobar
1152 1152 C g
1153 1153 $ touch snake.python
1154 1154 $ cd ..
1155 1155 $ hg add s/snake.python
1156 1156 $ hg status -S
1157 1157 M s/snake.python
1158 1158 ? .hgignore
1159 1159 ? s/barfoo
1160 1160 ? s/c.c
1161 1161 ? s/cpp.cpp
1162 1162 ? s/foobar.orig
1163 1163 $ hg revert --all -q
1164 1164
1165 1165 make sure we show changed files, rather than changed subtrees
1166 1166 $ mkdir s/foo
1167 1167 $ touch s/foo/bwuh
1168 1168 $ hg add s/foo/bwuh
1169 1169 $ hg commit -S -m "add bwuh"
1170 1170 committing subrepository s
1171 1171 $ hg status -S --change .
1172 1172 M .hgsubstate
1173 1173 A s/foo/bwuh
1174 1174 ? s/barfoo
1175 1175 ? s/c.c
1176 1176 ? s/cpp.cpp
1177 1177 ? s/foobar.orig
1178 1178 ? s/snake.python.orig
1179 1179
1180 1180 #if git19
1181 1181
1182 1182 test for Git CVE-2016-3068
1183 1183 $ hg init malicious-subrepository
1184 1184 $ cd malicious-subrepository
1185 1185 $ echo "s = [git]ext::sh -c echo% pwned:% \$PWNED_MSG% >pwned.txt" > .hgsub
1186 1186 $ git init s
1187 1187 Initialized empty Git repository in $TESTTMP/tc/malicious-subrepository/s/.git/
1188 1188 $ cd s
1189 1189 $ git commit --allow-empty -m 'empty'
1190 1190 [master (root-commit) 153f934] empty
1191 1191 $ cd ..
1192 1192 $ hg add .hgsub
1193 1193 $ hg commit -m "add subrepo"
1194 1194 $ cd ..
1195 1195 $ rm -f pwned.txt
1196 1196 $ unset GIT_ALLOW_PROTOCOL
1197 1197 $ PWNED_MSG="your git is too old or mercurial has regressed" hg clone \
1198 1198 > malicious-subrepository malicious-subrepository-protected
1199 1199 Cloning into '$TESTTMP/tc/malicious-subrepository-protected/s'...
1200 1200 fatal: transport 'ext' not allowed
1201 1201 updating to branch default
1202 1202 cloning subrepo s from ext::sh -c echo% pwned:% $PWNED_MSG% >pwned.txt
1203 1203 abort: git clone error 128 in s (in subrepository "s")
1204 1204 [255]
1205 1205 $ f -Dq pwned.txt
1206 1206 pwned.txt: file not found
1207 1207
1208 1208 whitelisting of ext should be respected (that's the git submodule behaviour)
1209 1209 $ rm -f pwned.txt
1210 1210 $ env GIT_ALLOW_PROTOCOL=ext PWNED_MSG="you asked for it" hg clone \
1211 1211 > malicious-subrepository malicious-subrepository-clone-allowed
1212 1212 Cloning into '$TESTTMP/tc/malicious-subrepository-clone-allowed/s'...
1213 1213 fatal: Could not read from remote repository.
1214 1214
1215 1215 Please make sure you have the correct access rights
1216 1216 and the repository exists.
1217 1217 updating to branch default
1218 1218 cloning subrepo s from ext::sh -c echo% pwned:% $PWNED_MSG% >pwned.txt
1219 1219 abort: git clone error 128 in s (in subrepository "s")
1220 1220 [255]
1221 1221 $ f -Dq pwned.txt
1222 1222 pwned: you asked for it
1223 1223
1224 1224 #endif
1225 1225
1226 1226 test for ssh exploit with git subrepos 2017-07-25
1227 1227
1228 1228 $ hg init malicious-proxycommand
1229 1229 $ cd malicious-proxycommand
1230 1230 $ echo 's = [git]ssh://-oProxyCommand=rm${IFS}non-existent/path' > .hgsub
1231 1231 $ git init s
1232 1232 Initialized empty Git repository in $TESTTMP/tc/malicious-proxycommand/s/.git/
1233 1233 $ cd s
1234 1234 $ git commit --allow-empty -m 'empty'
1235 1235 [master (root-commit) 153f934] empty
1236 1236 $ cd ..
1237 1237 $ hg add .hgsub
1238 1238 $ hg ci -m 'add subrepo'
1239 1239 $ cd ..
1240 1240 $ hg clone malicious-proxycommand malicious-proxycommand-clone
1241 1241 updating to branch default
1242 1242 abort: potentially unsafe url: 'ssh://-oProxyCommand=rm${IFS}non-existent/path' (in subrepository "s")
1243 1243 [255]
1244 1244
1245 1245 also check that a percent encoded '-' (%2D) doesn't work
1246 1246
1247 1247 $ cd malicious-proxycommand
1248 1248 $ echo 's = [git]ssh://%2DoProxyCommand=rm${IFS}non-existent/path' > .hgsub
1249 1249 $ hg ci -m 'change url to percent encoded'
1250 1250 $ cd ..
1251 1251 $ rm -r malicious-proxycommand-clone
1252 1252 $ hg clone malicious-proxycommand malicious-proxycommand-clone
1253 1253 updating to branch default
1254 1254 abort: potentially unsafe url: 'ssh://-oProxyCommand=rm${IFS}non-existent/path' (in subrepository "s")
1255 1255 [255]
General Comments 0
You need to be logged in to leave comments. Login now