summaryrefslogtreecommitdiff
path: root/tests/test-rebase-mq.t
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-rebase-mq.t')
-rw-r--r--tests/test-rebase-mq.t343
1 files changed, 343 insertions, 0 deletions
diff --git a/tests/test-rebase-mq.t b/tests/test-rebase-mq.t
new file mode 100644
index 0000000..7301ebe
--- /dev/null
+++ b/tests/test-rebase-mq.t
@@ -0,0 +1,343 @@
+ $ cat >> $HGRCPATH <<EOF
+ > [extensions]
+ > graphlog=
+ > rebase=
+ > mq=
+ >
+ > [mq]
+ > plain=true
+ >
+ > [alias]
+ > tglog = log -G --template "{rev}: '{desc}' tags: {tags}\n"
+ > EOF
+
+
+ $ hg init a
+ $ cd a
+ $ hg qinit -c
+
+ $ echo c1 > f
+ $ hg add f
+ $ hg ci -m C1
+
+ $ echo r1 > f
+ $ hg ci -m R1
+
+ $ hg up -q 0
+
+ $ hg qnew f.patch
+ $ echo mq1 > f
+ $ hg qref -m P0
+
+ $ hg qnew f2.patch
+ $ echo mq2 > f
+ $ hg qref -m P1
+
+ $ hg tglog
+ @ 3: 'P1' tags: f2.patch qtip tip
+ |
+ o 2: 'P0' tags: f.patch qbase
+ |
+ | o 1: 'R1' tags:
+ |/
+ o 0: 'C1' tags: qparent
+
+
+Rebase - try to rebase on an applied mq patch:
+
+ $ hg rebase -s 1 -d 3
+ abort: cannot rebase onto an applied mq patch
+ [255]
+
+Rebase - same thing, but mq patch is default dest:
+
+ $ hg up -q 1
+ $ hg rebase
+ abort: cannot rebase onto an applied mq patch
+ [255]
+ $ hg up -q qtip
+
+Rebase - generate a conflict:
+
+ $ hg rebase -s 2 -d 1
+ merging f
+ warning: conflicts during merge.
+ merging f incomplete! (edit conflicts, then use 'hg resolve --mark')
+ abort: unresolved conflicts (see hg resolve, then hg rebase --continue)
+ [255]
+
+Fix the 1st conflict:
+
+ $ echo mq1r1 > f
+ $ hg resolve -m f
+ $ hg rebase -c
+ merging f
+ warning: conflicts during merge.
+ merging f incomplete! (edit conflicts, then use 'hg resolve --mark')
+ abort: unresolved conflicts (see hg resolve, then hg rebase --continue)
+ [255]
+
+Fix the 2nd conflict:
+
+ $ echo mq1r1mq2 > f
+ $ hg resolve -m f
+ $ hg rebase -c
+ saved backup bundle to $TESTTMP/a/.hg/strip-backup/*-backup.hg (glob)
+
+ $ hg tglog
+ @ 3: 'P1' tags: f2.patch qtip tip
+ |
+ o 2: 'P0' tags: f.patch qbase
+ |
+ o 1: 'R1' tags: qparent
+ |
+ o 0: 'C1' tags:
+
+ $ hg up -q qbase
+
+ $ cat f
+ mq1r1
+
+ $ cat .hg/patches/f.patch
+ # HG changeset patch
+ # User test
+ # Date ?????????? ? (glob)
+ # Node ID ???????????????????????????????????????? (glob)
+ # Parent bac9ed9960d8992bcad75864a879fa76cadaf1b0
+ P0
+
+ diff -r bac9ed9960d8 -r ???????????? f (glob)
+ --- a/f Thu Jan 01 00:00:00 1970 +0000
+ +++ b/f ??? ??? ?? ??:??:?? ???? ????? (glob)
+ @@ -1,1 +1,1 @@
+ -r1
+ +mq1r1
+
+Update to qtip:
+
+ $ hg up -q qtip
+
+ $ cat f
+ mq1r1mq2
+
+ $ cat .hg/patches/f2.patch
+ # HG changeset patch
+ # User test
+ # Date ?????????? ? (glob)
+ # Node ID ???????????????????????????????????????? (glob)
+ # Parent ???????????????????????????????????????? (glob)
+ P1
+
+ diff -r ???????????? -r ???????????? f (glob)
+ --- a/f ??? ??? ?? ??:??:?? ???? ????? (glob)
+ +++ b/f ??? ??? ?? ??:??:?? ???? ????? (glob)
+ @@ -1,1 +1,1 @@
+ -mq1r1
+ +mq1r1mq2
+
+Adding one git-style patch and one normal:
+
+ $ hg qpop -a
+ popping f2.patch
+ popping f.patch
+ patch queue now empty
+
+ $ rm -fr .hg/patches
+ $ hg qinit -c
+
+ $ hg up -q 0
+
+ $ hg qnew --git f_git.patch
+ $ echo mq1 > p
+ $ hg add p
+ $ hg qref --git -m 'P0 (git)'
+
+ $ hg qnew f.patch
+ $ echo mq2 > p
+ $ hg qref -m P1
+ $ hg qci -m 'save patch state'
+
+ $ hg qseries -s
+ f_git.patch: P0 (git)
+ f.patch: P1
+
+ $ hg -R .hg/patches manifest
+ .hgignore
+ f.patch
+ f_git.patch
+ series
+
+ $ cat .hg/patches/f_git.patch
+ P0 (git)
+
+ diff --git a/p b/p
+ new file mode 100644
+ --- /dev/null
+ +++ b/p
+ @@ -0,0 +1,1 @@
+ +mq1
+
+ $ cat .hg/patches/f.patch
+ P1
+
+ diff -r ???????????? p (glob)
+ --- a/p ??? ??? ?? ??:??:?? ???? ????? (glob)
+ +++ b/p ??? ??? ?? ??:??:?? ???? ????? (glob)
+ @@ -1,1 +1,1 @@
+ -mq1
+ +mq2
+
+
+Rebase the applied mq patches:
+
+ $ hg rebase -s 2 -d 1
+ saved backup bundle to $TESTTMP/a/.hg/strip-backup/*-backup.hg (glob)
+
+ $ hg qci -m 'save patch state'
+
+ $ hg qseries -s
+ f_git.patch: P0 (git)
+ f.patch: P1
+
+ $ hg -R .hg/patches manifest
+ .hgignore
+ f.patch
+ f_git.patch
+ series
+
+ $ cat .hg/patches/f_git.patch
+ # HG changeset patch
+ # User test
+ # Date ?????????? ? (glob)
+ # Node ID ???????????????????????????????????????? (glob)
+ # Parent bac9ed9960d8992bcad75864a879fa76cadaf1b0
+ P0 (git)
+
+ diff --git a/p b/p
+ new file mode 100644
+ --- /dev/null
+ +++ b/p
+ @@ -0,0 +1,1 @@
+ +mq1
+
+ $ cat .hg/patches/f.patch
+ # HG changeset patch
+ # User test
+ # Date ?????????? ? (glob)
+ # Node ID ???????????????????????????????????????? (glob)
+ # Parent ???????????????????????????????????????? (glob)
+ P1
+
+ diff -r ???????????? -r ???????????? p (glob)
+ --- a/p ??? ??? ?? ??:??:?? ???? ????? (glob)
+ +++ b/p ??? ??? ?? ??:??:?? ???? ????? (glob)
+ @@ -1,1 +1,1 @@
+ -mq1
+ +mq2
+
+ $ cd ..
+
+Rebase with guards
+
+ $ hg init foo
+ $ cd foo
+ $ echo a > a
+ $ hg ci -Am a
+ adding a
+
+Create mq repo with guarded patches foo and bar and empty patch:
+
+ $ hg qinit
+ $ echo guarded > guarded
+ $ hg add guarded
+ $ hg qnew guarded
+ $ hg qnew empty-important -m 'important commit message'
+ $ echo bar > bar
+ $ hg add bar
+ $ hg qnew bar
+ $ echo foo > foo
+ $ hg add foo
+ $ hg qnew foo
+ $ hg qpop -a
+ popping foo
+ popping bar
+ popping empty-important
+ popping guarded
+ patch queue now empty
+ $ hg qguard guarded +guarded
+ $ hg qguard bar +baz
+ $ hg qguard foo +baz
+ $ hg qselect baz
+ number of unguarded, unapplied patches has changed from 1 to 3
+ $ hg qpush bar
+ applying empty-important
+ patch empty-important is empty
+ applying bar
+ now at: bar
+
+ $ hg qguard -l
+ guarded: +guarded
+ empty-important: unguarded
+ bar: +baz
+ foo: +baz
+
+ $ hg tglog
+ @ 2: 'imported patch bar' tags: bar qtip tip
+ |
+ o 1: 'important commit message' tags: empty-important qbase
+ |
+ o 0: 'a' tags: qparent
+
+Create new head to rebase bar onto:
+
+ $ hg up -C 0
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo b > b
+ $ hg add b
+ $ hg ci -m b
+ created new head
+ $ hg up -C 2
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo a >> a
+ $ hg qref
+
+ $ hg tglog
+ @ 3: '[mq]: bar' tags: bar qtip tip
+ |
+ | o 2: 'b' tags:
+ | |
+ o | 1: 'important commit message' tags: empty-important qbase
+ |/
+ o 0: 'a' tags: qparent
+
+
+Rebase bar (make sure series order is preserved and empty-important also is
+removed from the series):
+
+ $ hg qseries
+ guarded
+ empty-important
+ bar
+ foo
+ $ [ -f .hg/patches/empty-important ]
+ $ hg -q rebase -d 2
+ $ hg qseries
+ guarded
+ bar
+ foo
+ $ [ -f .hg/patches/empty-important ]
+ [1]
+
+ $ hg qguard -l
+ guarded: +guarded
+ bar: +baz
+ foo: +baz
+
+ $ hg tglog
+ @ 2:* '[mq]: bar' tags: bar qbase qtip tip (glob)
+ |
+ o 1:* 'b' tags: qparent (glob)
+ |
+ o 0:* 'a' tags: (glob)
+
+ $ cd ..