comparison tests/test-mq.t @ 11894:a15936ac7ec5

tests: unify test-mq
author Nicolas Dumazet <nicdumz.commits@gmail.com>
date Sun, 15 Aug 2010 21:41:45 +0900
parents tests/test-mq@4f9dfb54c8b5
children 863567a1364f
comparison
equal deleted inserted replaced
11893:aa50d07208d2 11894:a15936ac7ec5
1 $ . $TESTDIR/helpers.sh
2
3 $ checkundo()
4 > {
5 > if [ -f .hg/store/undo ]; then
6 > echo ".hg/store/undo still exists after $1"
7 > fi
8 > }
9
10 $ echo "[extensions]" >> $HGRCPATH
11 $ echo "mq=" >> $HGRCPATH
12
13 $ echo "[mq]" >> $HGRCPATH
14 $ echo "plain=true" >> $HGRCPATH
15
16
17 help
18
19 $ hg help mq
20 mq extension - manage a stack of patches
21
22 This extension lets you work with a stack of patches in a Mercurial
23 repository. It manages two stacks of patches - all known patches, and applied
24 patches (subset of known patches).
25
26 Known patches are represented as patch files in the .hg/patches directory.
27 Applied patches are both patch files and changesets.
28
29 Common tasks (use "hg help command" for more details):
30
31 create new patch qnew
32 import existing patch qimport
33
34 print patch series qseries
35 print applied patches qapplied
36
37 add known patch to applied stack qpush
38 remove patch from applied stack qpop
39 refresh contents of top applied patch qrefresh
40
41 By default, mq will automatically use git patches when required to avoid
42 losing file mode changes, copy records, binary files or empty files creations
43 or deletions. This behaviour can be configured with:
44
45 [mq]
46 git = auto/keep/yes/no
47
48 If set to 'keep', mq will obey the [diff] section configuration while
49 preserving existing git patches upon qrefresh. If set to 'yes' or 'no', mq
50 will override the [diff] section and always generate git or regular patches,
51 possibly losing data in the second case.
52
53 You will by default be managing a patch queue named "patches". You can create
54 other, independent patch queues with the "hg qqueue" command.
55
56 list of commands:
57
58 qapplied print the patches already applied
59 qclone clone main and patch repository at same time
60 qdelete remove patches from queue
61 qdiff diff of the current patch and subsequent modifications
62 qfinish move applied patches into repository history
63 qfold fold the named patches into the current patch
64 qgoto push or pop patches until named patch is at top of stack
65 qguard set or print guards for a patch
66 qheader print the header of the topmost or specified patch
67 qimport import a patch
68 qnew create a new patch
69 qnext print the name of the next patch
70 qpop pop the current patch off the stack
71 qprev print the name of the previous patch
72 qpush push the next patch onto the stack
73 qqueue manage multiple patch queues
74 qrefresh update the current patch
75 qrename rename a patch
76 qselect set or print guarded patches to push
77 qseries print the entire series file
78 qtop print the name of the current patch
79 qunapplied print the patches not yet applied
80 strip strip changesets and all their descendants from the repository
81
82 use "hg -v help mq" to show aliases and global options
83
84 $ hg init a
85 $ cd a
86 $ echo a > a
87 $ hg ci -Ama
88 adding a
89
90 $ hg clone . ../k
91 updating to branch default
92 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
93
94 $ mkdir b
95 $ echo z > b/z
96 $ hg ci -Ama
97 adding b/z
98
99
100 qinit
101
102 $ hg qinit
103
104 $ cd ..
105 $ hg init b
106
107
108 -R qinit
109
110 $ hg -R b qinit
111
112 $ hg init c
113
114
115 qinit -c
116
117 $ hg --cwd c qinit -c
118 $ hg -R c/.hg/patches st
119 A .hgignore
120 A series
121
122
123 qinit; qinit -c
124
125 $ hg init d
126 $ cd d
127 $ hg qinit
128 $ hg qinit -c
129
130 qinit -c should create both files if they don't exist
131
132 $ cat .hg/patches/.hgignore
133 ^\.hg
134 ^\.mq
135 syntax: glob
136 status
137 guards
138 $ cat .hg/patches/series
139 $ hg qinit -c
140 abort: repository .* already exists!
141 $ cd ..
142
143 $ echo '% qinit; <stuff>; qinit -c'
144 % qinit; <stuff>; qinit -c
145 $ hg init e
146 $ cd e
147 $ hg qnew A
148 $ checkundo qnew
149 $ echo foo > foo
150 $ hg add foo
151 $ hg qrefresh
152 $ hg qnew B
153 $ echo >> foo
154 $ hg qrefresh
155 $ echo status >> .hg/patches/.hgignore
156 $ echo bleh >> .hg/patches/.hgignore
157 $ hg qinit -c
158 adding .hg/patches/A
159 adding .hg/patches/B
160 $ hg -R .hg/patches status
161 A .hgignore
162 A A
163 A B
164 A series
165
166 qinit -c shouldn't touch these files if they already exist
167
168 $ cat .hg/patches/.hgignore
169 status
170 bleh
171 $ cat .hg/patches/series
172 A
173 B
174
175 status --mq with color (issue2096)
176
177 $ hg status --mq --config extensions.color= --color=always
178 A .hgignore
179 A A
180 A B
181 A series
182 $ cd ..
183
184
185 init --mq without repo
186
187 $ mkdir f
188 $ cd f
189 $ hg init --mq
190 abort: There is no Mercurial repository here (.hg not found)
191 $ cd ..
192
193 init --mq with repo path
194
195 $ hg init g
196 $ hg init --mq g
197 $ test -d g/.hg/patches/.hg && echo "ok" || echo "failed"
198 ok
199
200 init --mq with nonexistent directory
201
202 $ hg init --mq nonexistentdir
203 abort: repository nonexistentdir not found!
204
205
206 init --mq with bundle (non "local")
207
208 $ hg -R a bundle --all a.bundle >/dev/null
209 $ hg init --mq a.bundle
210 abort: only a local queue repository may be initialized
211
212 $ cd a
213
214 $ hg qnew -m 'foo bar' test.patch
215
216 $ echo '# comment' > .hg/patches/series.tmp
217 $ echo >> .hg/patches/series.tmp # empty line
218 $ cat .hg/patches/series >> .hg/patches/series.tmp
219 $ mv .hg/patches/series.tmp .hg/patches/series
220
221
222 qrefresh
223
224 $ echo a >> a
225 $ hg qrefresh
226 $ cat .hg/patches/test.patch
227 foo bar
228
229 diff -r [a-f0-9]* a
230 --- a/a\t(?P<date>.*)
231 \+\+\+ b/a\t(?P<date2>.*)
232 @@ -1,1 +1,2 @@
233 a
234 +a
235
236 empty qrefresh
237
238 $ hg qrefresh -X a
239
240 revision:
241
242 $ hg diff -r -2 -r -1
243
244 patch:
245
246 $ cat .hg/patches/test.patch
247 foo bar
248
249
250 working dir diff:
251
252 $ hg diff --nodates -q
253 --- a/a
254 +++ b/a
255 @@ -1,1 +1,2 @@
256 a
257 +a
258
259 restore things
260
261 $ hg qrefresh
262 $ checkundo qrefresh
263
264
265 qpop
266
267 $ hg qpop
268 popping test.patch
269 patch queue now empty
270 $ checkundo qpop
271
272
273 qpush with dump of tag cache
274 Dump the tag cache to ensure that it has exactly one head after qpush.
275
276 $ rm -f .hg/tags.cache
277 $ hg tags > /dev/null
278
279 .hg/tags.cache (pre qpush):
280
281 $ cat .hg/tags.cache
282 1 [\da-f]{40}
283
284 $ hg qpush
285 applying test.patch
286 now at: test.patch
287 $ hg tags > /dev/null
288
289 .hg/tags.cache (post qpush):
290
291 $ cat .hg/tags.cache
292 2 [\da-f]{40}
293
294 $ checkundo qpush
295 $ cd ..
296
297
298 pop/push outside repo
299 $ hg -R a qpop
300 popping test.patch
301 patch queue now empty
302 $ hg -R a qpush
303 applying test.patch
304 now at: test.patch
305
306 $ cd a
307 $ hg qnew test2.patch
308
309 qrefresh in subdir
310
311 $ cd b
312 $ echo a > a
313 $ hg add a
314 $ hg qrefresh
315
316 pop/push -a in subdir
317
318 $ hg qpop -a
319 popping test2.patch
320 popping test.patch
321 patch queue now empty
322 $ hg --traceback qpush -a
323 applying test.patch
324 applying test2.patch
325 now at: test2.patch
326
327
328 setting columns & formatted tests truncating (issue1912)
329
330 $ COLUMNS=4 hg qseries --config ui.formatted=true
331 test.patch
332 test2.patch
333 $ COLUMNS=20 hg qseries --config ui.formatted=true -vs
334 0 A test.patch: f...
335 1 A test2.patch:
336 $ hg qpop
337 popping test2.patch
338 now at: test.patch
339 $ hg qseries -vs
340 0 A test.patch: foo bar
341 1 U test2.patch:
342 $ hg sum | grep mq
343 mq: 1 applied, 1 unapplied
344 $ hg qpush
345 applying test2.patch
346 now at: test2.patch
347 $ hg sum | grep mq
348 mq: 2 applied
349 $ hg qapplied
350 test.patch
351 test2.patch
352 $ hg qtop
353 test2.patch
354
355
356 prev
357
358 $ hg qapp -1
359 test.patch
360
361 next
362
363 $ hg qunapp -1
364 all patches applied
365
366 $ hg qpop
367 popping test2.patch
368 now at: test.patch
369
370 commit should fail
371
372 $ hg commit
373 abort: cannot commit over an applied mq patch
374
375 push should fail
376
377 $ hg push ../../k
378 pushing to ../../k
379 abort: source has mq patches applied
380
381
382 import should fail
383
384 $ hg st .
385 $ echo foo >> ../a
386 $ hg diff > ../../import.diff
387 $ hg revert --no-backup ../a
388 $ hg import ../../import.diff
389 abort: cannot import over an applied patch
390 $ hg st
391
392 import --no-commit should succeed
393
394 $ hg import --no-commit ../../import.diff
395 applying ../../import.diff
396 $ hg st
397 M a
398 $ hg revert --no-backup ../a
399
400
401 qunapplied
402
403 $ hg qunapplied
404 test2.patch
405
406
407 qpush/qpop with index
408
409 $ hg qnew test1b.patch
410 $ echo 1b > 1b
411 $ hg add 1b
412 $ hg qrefresh
413 $ hg qpush 2
414 applying test2.patch
415 now at: test2.patch
416 $ hg qpop 0
417 popping test2.patch
418 popping test1b.patch
419 now at: test.patch
420 $ hg qpush test.patch+1
421 applying test1b.patch
422 now at: test1b.patch
423 $ hg qpush test.patch+2
424 applying test2.patch
425 now at: test2.patch
426 $ hg qpop test2.patch-1
427 popping test2.patch
428 now at: test1b.patch
429 $ hg qpop test2.patch-2
430 popping test1b.patch
431 now at: test.patch
432 $ hg qpush test1b.patch+1
433 applying test1b.patch
434 applying test2.patch
435 now at: test2.patch
436
437
438 qpush --move
439
440 $ hg qpop -a
441 popping test2.patch
442 popping test1b.patch
443 popping test.patch
444 patch queue now empty
445 $ hg qguard test1b.patch -- -negguard
446 $ hg qguard test2.patch -- +posguard
447 $ hg qpush --move test2.patch # can't move guarded patch
448 cannot push 'test2.patch' - guarded by ['+posguard']
449 $ hg qselect posguard
450 number of unguarded, unapplied patches has changed from 2 to 3
451 $ hg qpush --move test2.patch # move to front
452 applying test2.patch
453 now at: test2.patch
454 $ hg qpush --move test1b.patch # negative guard unselected
455 applying test1b.patch
456 now at: test1b.patch
457 $ hg qpush --move test.patch # noop move
458 applying test.patch
459 now at: test.patch
460 $ hg qseries -v
461 0 A test2.patch
462 1 A test1b.patch
463 2 A test.patch
464 $ hg qpop -a
465 popping test.patch
466 popping test1b.patch
467 popping test2.patch
468 patch queue now empty
469
470 cleaning up
471
472 $ hg qselect --none
473 guards deactivated
474 number of unguarded, unapplied patches has changed from 3 to 2
475 $ hg qguard --none test1b.patch
476 $ hg qguard --none test2.patch
477 $ hg qpush --move test.patch
478 applying test.patch
479 now at: test.patch
480 $ hg qpush --move test1b.patch
481 applying test1b.patch
482 now at: test1b.patch
483 $ hg qpush --move bogus # nonexistent patch
484 abort: patch bogus not in series
485 $ hg qpush --move # no patch
486 abort: please specify the patch to move
487 $ hg qpush --move test.patch # already applied
488 abort: cannot push to a previous patch: test.patch
489 $ hg qpush
490 applying test2.patch
491 now at: test2.patch
492
493
494 series after move
495
496 $ cat `hg root`/.hg/patches/series
497 test.patch
498 test1b.patch
499 test2.patch
500 # comment
501
502
503
504 pop, qapplied, qunapplied
505
506 $ hg qseries -v
507 0 A test.patch
508 1 A test1b.patch
509 2 A test2.patch
510
511 qapplied -1 test.patch
512
513 $ hg qapplied -1 test.patch
514 only one patch applied
515
516 qapplied -1 test1b.patch
517
518 $ hg qapplied -1 test1b.patch
519 test.patch
520
521 qapplied -1 test2.patch
522
523 $ hg qapplied -1 test2.patch
524 test1b.patch
525
526 qapplied -1
527
528 $ hg qapplied -1
529 test1b.patch
530
531 qapplied
532
533 $ hg qapplied
534 test.patch
535 test1b.patch
536 test2.patch
537
538 qapplied test1b.patch
539
540 $ hg qapplied test1b.patch
541 test.patch
542 test1b.patch
543
544 qunapplied -1
545
546 $ hg qunapplied -1
547 all patches applied
548
549 qunapplied
550
551 $ hg qunapplied
552
553 popping
554
555 $ hg qpop
556 popping test2.patch
557 now at: test1b.patch
558
559 qunapplied -1
560
561 $ hg qunapplied -1
562 test2.patch
563
564 qunapplied
565
566 $ hg qunapplied
567 test2.patch
568
569 qunapplied test2.patch
570
571 $ hg qunapplied test2.patch
572
573 qunapplied -1 test2.patch
574
575 $ hg qunapplied -1 test2.patch
576 all patches applied
577
578 popping -a
579
580 $ hg qpop -a
581 popping test1b.patch
582 popping test.patch
583 patch queue now empty
584
585 qapplied
586
587 $ hg qapplied
588
589 qapplied -1
590
591 $ hg qapplied -1
592 no patches applied
593 $ hg qpush
594 applying test.patch
595 now at: test.patch
596
597
598 push should succeed
599
600 $ hg qpop -a
601 popping test.patch
602 patch queue now empty
603 $ hg push ../../k
604 pushing to ../../k
605 searching for changes
606 adding changesets
607 adding manifests
608 adding file changes
609 added 1 changesets with 1 changes to 1 files
610
611
612 qpush/qpop error codes
613
614 $ errorcode()
615 > {
616 > hg "$@" && echo " $@ succeeds" || echo " $@ fails"
617 > }
618
619
620 we want to start with some patches applied
621
622 $ hg qpush -a
623 applying test.patch
624 applying test1b.patch
625 applying test2.patch
626 now at: test2.patch
627
628 % pops all patches and succeeds
629
630 $ errorcode qpop -a
631 popping test2.patch
632 popping test1b.patch
633 popping test.patch
634 patch queue now empty
635 qpop -a succeeds
636
637 % does nothing and succeeds
638
639 $ errorcode qpop -a
640 no patches applied
641 qpop -a succeeds
642
643 % fails - nothing else to pop
644
645 $ errorcode qpop
646 no patches applied
647 qpop fails
648
649 % pushes a patch and succeeds
650
651 $ errorcode qpush
652 applying test.patch
653 now at: test.patch
654 qpush succeeds
655
656 % pops a patch and succeeds
657
658 $ errorcode qpop
659 popping test.patch
660 patch queue now empty
661 qpop succeeds
662
663 % pushes up to test1b.patch and succeeds
664
665 $ errorcode qpush test1b.patch
666 applying test.patch
667 applying test1b.patch
668 now at: test1b.patch
669 qpush test1b.patch succeeds
670
671 % does nothing and succeeds
672
673 $ errorcode qpush test1b.patch
674 qpush: test1b.patch is already at the top
675 qpush test1b.patch succeeds
676
677 % does nothing and succeeds
678
679 $ errorcode qpop test1b.patch
680 qpop: test1b.patch is already at the top
681 qpop test1b.patch succeeds
682
683 % fails - can't push to this patch
684
685 $ errorcode qpush test.patch
686 abort: cannot push to a previous patch: test.patch
687 qpush test.patch fails
688
689 % fails - can't pop to this patch
690
691 $ errorcode qpop test2.patch
692 abort: patch test2.patch is not applied
693 qpop test2.patch fails
694
695 % pops up to test.patch and succeeds
696
697 $ errorcode qpop test.patch
698 popping test1b.patch
699 now at: test.patch
700 qpop test.patch succeeds
701
702 % pushes all patches and succeeds
703
704 $ errorcode qpush -a
705 applying test1b.patch
706 applying test2.patch
707 now at: test2.patch
708 qpush -a succeeds
709
710 % does nothing and succeeds
711
712 $ errorcode qpush -a
713 all patches are currently applied
714 qpush -a succeeds
715
716 % fails - nothing else to push
717
718 $ errorcode qpush
719 patch series already fully applied
720 qpush fails
721
722 % does nothing and succeeds
723
724 $ errorcode qpush test2.patch
725 qpush: test2.patch is already at the top
726 qpush test2.patch succeeds
727
728
729
730 strip
731
732 $ cd ../../b
733 $ echo x>x
734 $ hg ci -Ama
735 adding x
736 $ hg strip tip | hidebackup
737 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
738 saved backup bundle to
739 $ hg unbundle .hg/strip-backup/*
740 adding changesets
741 adding manifests
742 adding file changes
743 added 1 changesets with 1 changes to 1 files
744 (run 'hg update' to get a working copy)
745
746
747 strip with local changes, should complain
748
749 $ hg up
750 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
751 $ echo y>y
752 $ hg add y
753 $ hg strip tip | hidebackup
754 abort: local changes found
755
756 --force strip with local changes
757
758 $ hg strip -f tip | hidebackup
759 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
760 saved backup bundle to
761
762
763 cd b; hg qrefresh
764
765 $ hg init refresh
766 $ cd refresh
767 $ echo a > a
768 $ hg ci -Ama
769 adding a
770 $ hg qnew -mfoo foo
771 $ echo a >> a
772 $ hg qrefresh
773 $ mkdir b
774 $ cd b
775 $ echo f > f
776 $ hg add f
777 $ hg qrefresh
778 $ cat ../.hg/patches/foo
779 foo
780
781 diff -r cb9a9f314b8b a
782 --- a/a\t(?P<date>.*)
783 \+\+\+ b/a\t(?P<date>.*)
784 @@ -1,1 +1,2 @@
785 a
786 +a
787 diff -r cb9a9f314b8b b/f
788 --- /dev/null\t(?P<date>.*)
789 \+\+\+ b/b/f\t(?P<date>.*)
790 @@ -0,0 +1,1 @@
791 +f
792
793 hg qrefresh .
794
795 $ hg qrefresh .
796 $ cat ../.hg/patches/foo
797 foo
798
799 diff -r cb9a9f314b8b b/f
800 --- /dev/null\t(?P<date>.*)
801 \+\+\+ b/b/f\t(?P<date>.*)
802 @@ -0,0 +1,1 @@
803 +f
804 $ hg status
805 M a
806
807
808 qpush failure
809
810 $ cd ..
811 $ hg qrefresh
812 $ hg qnew -mbar bar
813 $ echo foo > foo
814 $ echo bar > bar
815 $ hg add foo bar
816 $ hg qrefresh
817 $ hg qpop -a
818 popping bar
819 popping foo
820 patch queue now empty
821 $ echo bar > foo
822 $ hg qpush -a
823 applying foo
824 applying bar
825 file foo already exists
826 1 out of 1 hunks FAILED -- saving rejects to file foo.rej
827 patch failed, unable to continue (try -v)
828 patch failed, rejects left in working dir
829 errors during apply, please fix and refresh bar
830 $ hg st
831 ? foo
832 ? foo.rej
833
834
835 mq tags
836
837 $ hg log --template '{rev} {tags}\n' -r qparent:qtip
838 0 qparent
839 1 foo qbase
840 2 bar qtip tip
841
842
843 bad node in status
844
845 $ hg qpop
846 popping bar
847 now at: foo
848 $ hg strip -qn tip
849 $ hg tip
850 changeset: 0:cb9a9f314b8b
851 tag: tip
852 user: test
853 date: Thu Jan 01 00:00:00 1970 +0000
854 summary: a
855
856 $ hg branches
857 default 0:cb9a9f314b8b
858 $ hg qpop
859 no patches applied
860
861 $ cat >>$HGRCPATH <<EOF
862 > [diff]
863 > git = True
864 > EOF
865 $ cd ..
866 $ hg init git
867 $ cd git
868 $ hg qinit
869
870 $ hg qnew -m'new file' new
871 $ echo foo > new
872 $ chmod +x new
873 $ hg add new
874 $ hg qrefresh
875 $ cat .hg/patches/new
876 new file
877
878 diff --git a/new b/new
879 new file mode 100755
880 --- /dev/null
881 +++ b/new
882 @@ -0,0 +1,1 @@
883 +foo
884
885 $ hg qnew -m'copy file' copy
886 $ hg cp new copy
887 $ hg qrefresh
888 $ cat .hg/patches/copy
889 copy file
890
891 diff --git a/new b/copy
892 copy from new
893 copy to copy
894
895 $ hg qpop
896 popping copy
897 now at: new
898 $ hg qpush
899 applying copy
900 now at: copy
901 $ hg qdiff
902 diff --git a/new b/copy
903 copy from new
904 copy to copy
905 $ cat >>$HGRCPATH <<EOF
906 > [diff]
907 > git = False
908 > EOF
909 $ hg qdiff --git
910 diff --git a/new b/copy
911 copy from new
912 copy to copy
913 $ cd ..
914
915
916 test file addition in slow path
917
918 $ hg init slow
919 $ cd slow
920 $ hg qinit
921 $ echo foo > foo
922 $ hg add foo
923 $ hg ci -m 'add foo'
924 $ hg qnew bar
925 $ echo bar > bar
926 $ hg add bar
927 $ hg mv foo baz
928 $ hg qrefresh --git
929 $ hg up -C 0
930 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
931 $ echo >> foo
932 $ hg ci -m 'change foo'
933 created new head
934 $ hg up -C 1
935 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
936 $ hg qrefresh --git 2>&1 | grep -v 'saving bundle'
937 $ cat .hg/patches/bar
938 diff --git a/bar b/bar
939 new file mode 100644
940 --- /dev/null
941 +++ b/bar
942 @@ -0,0 +1,1 @@
943 +bar
944 diff --git a/foo b/baz
945 rename from foo
946 rename to baz
947 $ hg log -v --template '{rev} {file_copies}\n' -r .
948 2 baz (foo)
949 $ hg qrefresh --git
950 $ cat .hg/patches/bar
951 diff --git a/bar b/bar
952 new file mode 100644
953 --- /dev/null
954 +++ b/bar
955 @@ -0,0 +1,1 @@
956 +bar
957 diff --git a/foo b/baz
958 rename from foo
959 rename to baz
960 $ hg log -v --template '{rev} {file_copies}\n' -r .
961 2 baz (foo)
962 $ hg qrefresh
963 $ grep 'diff --git' .hg/patches/bar
964 diff --git a/bar b/bar
965 diff --git a/foo b/baz
966
967
968 test file move chains in the slow path
969
970 $ hg up -C 1
971 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
972 $ echo >> foo
973 $ hg ci -m 'change foo again'
974 $ hg up -C 2
975 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
976 $ hg mv bar quux
977 $ hg mv baz bleh
978 $ hg qrefresh --git 2>&1 | grep -v 'saving bundle'
979 $ cat .hg/patches/bar
980 diff --git a/foo b/bleh
981 rename from foo
982 rename to bleh
983 diff --git a/quux b/quux
984 new file mode 100644
985 --- /dev/null
986 +++ b/quux
987 @@ -0,0 +1,1 @@
988 +bar
989 $ hg log -v --template '{rev} {file_copies}\n' -r .
990 3 bleh (foo)
991 $ hg mv quux fred
992 $ hg mv bleh barney
993 $ hg qrefresh --git
994 $ cat .hg/patches/bar
995 diff --git a/foo b/barney
996 rename from foo
997 rename to barney
998 diff --git a/fred b/fred
999 new file mode 100644
1000 --- /dev/null
1001 +++ b/fred
1002 @@ -0,0 +1,1 @@
1003 +bar
1004 $ hg log -v --template '{rev} {file_copies}\n' -r .
1005 3 barney (foo)
1006
1007
1008 refresh omitting an added file
1009
1010 $ hg qnew baz
1011 $ echo newfile > newfile
1012 $ hg add newfile
1013 $ hg qrefresh
1014 $ hg st -A newfile
1015 C newfile
1016 $ hg qrefresh -X newfile
1017 $ hg st -A newfile
1018 A newfile
1019 $ hg revert newfile
1020 $ rm newfile
1021 $ hg qpop
1022 popping baz
1023 now at: bar
1024 $ hg qdel baz
1025
1026
1027 create a git patch
1028
1029 $ echo a > alexander
1030 $ hg add alexander
1031 $ hg qnew -f --git addalexander
1032 $ grep diff .hg/patches/addalexander
1033 diff --git a/alexander b/alexander
1034
1035
1036 create a git binary patch
1037
1038 $ cat > writebin.py <<EOF
1039 > import sys
1040 > path = sys.argv[1]
1041 > open(path, 'wb').write('BIN\x00ARY')
1042 > EOF
1043 $ python writebin.py bucephalus
1044
1045 $ python "$TESTDIR/md5sum.py" bucephalus
1046 8ba2a2f3e77b55d03051ff9c24ad65e7 bucephalus
1047 $ hg add bucephalus
1048 $ hg qnew -f --git addbucephalus
1049 $ grep diff .hg/patches/addbucephalus
1050 diff --git a/bucephalus b/bucephalus
1051
1052
1053 check binary patches can be popped and pushed
1054
1055 $ hg qpop
1056 popping addbucephalus
1057 now at: addalexander
1058 $ test -f bucephalus && echo % bucephalus should not be there
1059 $ hg qpush
1060 applying addbucephalus
1061 now at: addbucephalus
1062 $ test -f bucephalus || echo % bucephalus should be there
1063 $ python "$TESTDIR/md5sum.py" bucephalus
1064 8ba2a2f3e77b55d03051ff9c24ad65e7 bucephalus
1065
1066
1067
1068 strip again
1069
1070 $ cd ..
1071 $ hg init strip
1072 $ cd strip
1073 $ touch foo
1074 $ hg add foo
1075 $ hg ci -m 'add foo'
1076 $ echo >> foo
1077 $ hg ci -m 'change foo 1'
1078 $ hg up -C 0
1079 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1080 $ echo 1 >> foo
1081 $ hg ci -m 'change foo 2'
1082 created new head
1083 $ HGMERGE=true hg merge
1084 merging foo
1085 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
1086 (branch merge, don't forget to commit)
1087 $ hg ci -m merge
1088 $ hg log
1089 changeset: 3:99615015637b
1090 tag: tip
1091 parent: 2:20cbbe65cff7
1092 parent: 1:d2871fc282d4
1093 user: test
1094 date: Thu Jan 01 00:00:00 1970 +0000
1095 summary: merge
1096
1097 changeset: 2:20cbbe65cff7
1098 parent: 0:53245c60e682
1099 user: test
1100 date: Thu Jan 01 00:00:00 1970 +0000
1101 summary: change foo 2
1102
1103 changeset: 1:d2871fc282d4
1104 user: test
1105 date: Thu Jan 01 00:00:00 1970 +0000
1106 summary: change foo 1
1107
1108 changeset: 0:53245c60e682
1109 user: test
1110 date: Thu Jan 01 00:00:00 1970 +0000
1111 summary: add foo
1112
1113 $ hg strip 1 | hidebackup
1114 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1115 saved backup bundle to
1116 $ checkundo strip
1117 $ hg log
1118 changeset: 1:20cbbe65cff7
1119 tag: tip
1120 user: test
1121 date: Thu Jan 01 00:00:00 1970 +0000
1122 summary: change foo 2
1123
1124 changeset: 0:53245c60e682
1125 user: test
1126 date: Thu Jan 01 00:00:00 1970 +0000
1127 summary: add foo
1128
1129 $ cd ..
1130
1131
1132 qclone
1133
1134 $ qlog()
1135 > {
1136 > echo 'main repo:'
1137 > hg log --template ' rev {rev}: {desc}\n'
1138 > echo 'patch repo:'
1139 > hg -R .hg/patches log --template ' rev {rev}: {desc}\n'
1140 > }
1141 $ hg init qclonesource
1142 $ cd qclonesource
1143 $ echo foo > foo
1144 $ hg add foo
1145 $ hg ci -m 'add foo'
1146 $ hg qinit
1147 $ hg qnew patch1
1148 $ echo bar >> foo
1149 $ hg qrefresh -m 'change foo'
1150 $ cd ..
1151
1152
1153 repo with unversioned patch dir
1154
1155 $ hg qclone qclonesource failure
1156 abort: versioned patch repository not found (see init --mq)
1157
1158 $ cd qclonesource
1159 $ hg qinit -c
1160 adding .hg/patches/patch1
1161 $ hg qci -m checkpoint
1162 $ qlog
1163 main repo:
1164 rev 1: change foo
1165 rev 0: add foo
1166 patch repo:
1167 rev 0: checkpoint
1168 $ cd ..
1169
1170
1171 repo with patches applied
1172
1173 $ hg qclone qclonesource qclonedest
1174 updating to branch default
1175 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
1176 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1177 $ cd qclonedest
1178 $ qlog
1179 main repo:
1180 rev 0: add foo
1181 patch repo:
1182 rev 0: checkpoint
1183 $ cd ..
1184
1185
1186 repo with patches unapplied
1187
1188 $ cd qclonesource
1189 $ hg qpop -a
1190 popping patch1
1191 patch queue now empty
1192 $ qlog
1193 main repo:
1194 rev 0: add foo
1195 patch repo:
1196 rev 0: checkpoint
1197 $ cd ..
1198 $ hg qclone qclonesource qclonedest2
1199 updating to branch default
1200 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
1201 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1202 $ cd qclonedest2
1203 $ qlog
1204 main repo:
1205 rev 0: add foo
1206 patch repo:
1207 rev 0: checkpoint
1208 $ cd ..
1209
1210
1211 test applying on an empty file (issue 1033)
1212
1213 $ hg init empty
1214 $ cd empty
1215 $ touch a
1216 $ hg ci -Am addempty
1217 adding a
1218 $ echo a > a
1219 $ hg qnew -f -e changea
1220 $ hg qpop
1221 popping changea
1222 patch queue now empty
1223 $ hg qpush
1224 applying changea
1225 now at: changea
1226 $ cd ..
1227
1228
1229 test qpush with --force, issue1087
1230
1231 $ hg init forcepush
1232 $ cd forcepush
1233 $ echo hello > hello.txt
1234 $ echo bye > bye.txt
1235 $ hg ci -Ama
1236 adding bye.txt
1237 adding hello.txt
1238 $ hg qnew -d '0 0' empty
1239 $ hg qpop
1240 popping empty
1241 patch queue now empty
1242 $ echo world >> hello.txt
1243
1244
1245 qpush should fail, local changes
1246
1247 $ hg qpush
1248 abort: local changes found, refresh first
1249
1250
1251 apply force, should not discard changes with empty patch
1252
1253 $ hg qpush -f
1254 applying empty
1255 patch empty is empty
1256 now at: empty
1257 $ hg diff --config diff.nodates=True
1258 diff -r bf5fc3f07a0a hello.txt
1259 --- a/hello.txt
1260 +++ b/hello.txt
1261 @@ -1,1 +1,2 @@
1262 hello
1263 +world
1264 $ hg qdiff --config diff.nodates=True
1265 diff -r 9ecee4f634e3 hello.txt
1266 --- a/hello.txt
1267 +++ b/hello.txt
1268 @@ -1,1 +1,2 @@
1269 hello
1270 +world
1271 $ hg log -l1 -p
1272 changeset: 1:bf5fc3f07a0a
1273 tag: empty
1274 tag: qbase
1275 tag: qtip
1276 tag: tip
1277 user: test
1278 date: Thu Jan 01 00:00:00 1970 +0000
1279 summary: imported patch empty
1280
1281
1282 $ hg qref -d '0 0'
1283 $ hg qpop
1284 popping empty
1285 patch queue now empty
1286 $ echo universe >> hello.txt
1287 $ echo universe >> bye.txt
1288
1289
1290 qpush should fail, local changes
1291
1292 $ hg qpush
1293 abort: local changes found, refresh first
1294
1295
1296 apply force, should discard changes in hello, but not bye
1297
1298 $ hg qpush -f
1299 applying empty
1300 now at: empty
1301 $ hg st
1302 M bye.txt
1303 $ hg diff --config diff.nodates=True
1304 diff -r ba252371dbc1 bye.txt
1305 --- a/bye.txt
1306 +++ b/bye.txt
1307 @@ -1,1 +1,2 @@
1308 bye
1309 +universe
1310 $ hg qdiff --config diff.nodates=True
1311 diff -r 9ecee4f634e3 bye.txt
1312 --- a/bye.txt
1313 +++ b/bye.txt
1314 @@ -1,1 +1,2 @@
1315 bye
1316 +universe
1317 diff -r 9ecee4f634e3 hello.txt
1318 --- a/hello.txt
1319 +++ b/hello.txt
1320 @@ -1,1 +1,3 @@
1321 hello
1322 +world
1323 +universe
1324
1325
1326 test popping revisions not in working dir ancestry
1327
1328 $ hg qseries -v
1329 0 A empty
1330 $ hg up qparent
1331 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1332 $ hg qpop
1333 popping empty
1334 patch queue now empty
1335
1336 $ cd ..
1337 $ hg init deletion-order
1338 $ cd deletion-order
1339
1340 $ touch a
1341 $ hg ci -Aqm0
1342
1343 $ hg qnew rename-dir
1344 $ hg rm a
1345 $ hg qrefresh
1346
1347 $ mkdir a b
1348 $ touch a/a b/b
1349 $ hg add -q a b
1350 $ hg qrefresh
1351
1352
1353 test popping must remove files added in subdirectories first
1354
1355 $ hg qpop
1356 popping rename-dir
1357 patch queue now empty
1358 $ cd ..
1359