[PATCH 1 of 3] update: add test cases for updating across branches

Stuart W Marks smarks at smarks.org
Fri Sep 18 01:45:18 CDT 2009


# HG changeset patch
# User Stuart W Marks <smarks at smarks.org>
# Date 1253254165 25200
# Node ID c0fd3e7cc502916a0293b18eaa279c00ad07faf1
# Parent  c564dbb2a6d5394c995c1ae93943a16253e7b1e5
update: add test cases for updating across branches

Add test-update-branches to cover cases of 'hg update': to a descendant,
crossing named branches, and crossing branches within a named branch;
with no option, -c or -C; with or without uncommitted changes; and
with or without a specific revision. Tests only, no behavior change.

diff -r c564dbb2a6d5 -r c0fd3e7cc502 tests/test-update-branches
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-update-branches	Thu Sep 17 23:09:25 2009 -0700
@@ -0,0 +1,122 @@
+#!/bin/sh
+
+hg init
+echo foo > foo
+echo zero > a
+hg ci -qAm0
+echo one > a ; hg ci -m1
+echo two > a ; hg ci -m2
+hg up -q 1
+echo three > a ; hg ci -qm3
+hg up -q 0
+hg branch -q b1
+echo four > a ; hg ci -qm4
+echo five > a ; hg ci -qm5
+
+echo % initial repo state
+echo
+hg --config 'extensions.graphlog=' \
+    glog --template '{rev}:{node|short} {parents} {branches}\n'
+
+# @  5:e1bb631146ca  b1
+# |
+# o  4:a4fdb3b883c4 0:b608b9236435  b1
+# |
+# | o  3:4b57d2520816 1:44592833ba9f
+# | |
+# | | o  2:063f31070f65
+# | |/
+# | o  1:44592833ba9f
+# |/
+# o  0:b608b9236435
+#
+# Expected results for "hg update REV"
+#
+# opts           state        linear      same branch     diff branch
+# 
+# none           clean          OK         abort(1)          OK
+# none           dirty        merge        abort(2)        abort(3)
+#
+# -c             clean          OK           OK              OK
+# -c             dirty        abort(4)     abort(4)        abort(4)
+#
+# -C             clean          OK           OK              OK
+# -C             dirty        discard      discard         discard
+#
+# abort(1) = abort: crosses branches (use 'hg merge' or 'hg update -C')
+# abort(2) = abort: crosses branches (use 'hg merge' or 'hg update -C'
+#            to discard changes)
+# abort(3) = abort: crosses named branches (use 'hg update -C' to
+#            discard changes)
+# abort(4) = abort: uncommitted local changes
+#
+# "linear" = update to an ancestor or descendant
+# "same branch" = crossing to branch with same name
+# "diff branch" = crossing to a branch with a different name
+
+function revtest { # msg {clean|dirty} start-rev target-rev [update-opts]
+    echo % revtest $1
+    hg up -qC $3
+    test $2 = dirty && echo dirty > foo
+    hg up $5 $4
+    hg parent --template 'parent={rev}\n'
+    hg stat
+}    
+
+revtest 'none clean linear' clean 1 2
+revtest 'none clean same'   clean 2 3
+revtest 'none clean diff'   clean 3 4
+revtest 'none dirty linear' dirty 1 2
+revtest 'none dirty same'   dirty 2 3
+revtest 'none dirty diff'   dirty 3 4
+
+revtest '-c clean linear'   clean 1 2 -c
+revtest '-c clean same'     clean 2 3 -c
+revtest '-c clean diff'     clean 3 4 -c
+revtest '-c dirty linear'   dirty 1 2 -c
+revtest '-c dirty same'     dirty 2 3 -c
+revtest '-c dirty diff'     dirty 3 4 -c
+
+revtest '-C clean linear'   clean 1 2 -C
+revtest '-C clean same'     clean 2 3 -C
+revtest '-C clean diff'     clean 3 4 -C
+revtest '-C dirty linear'   dirty 1 2 -C
+revtest '-C dirty same'     dirty 2 3 -C
+revtest '-C dirty diff'     dirty 3 4 -C
+
+# Expected results for "hg update"
+#
+# opts           state        linear     cross branch
+# 
+# none           clean          OK         abort(1)
+# none           dirty        merge        abort(2)
+#
+# -c             clean          OK           OK
+# -c             dirty        abort(4)     abort(4)
+#
+# -C             clean          OK           OK
+# -C             dirty        discard      discard
+
+function norevtest { # msg {clean|dirty} start-rev [update-opts]
+    echo % norevtest $1
+    hg up -qC $3
+    test $2 = dirty && echo dirty > foo
+    hg up $4
+    hg parent --template 'parent={rev}\n'
+    hg stat
+}    
+
+norevtest 'none clean linear' clean 4
+norevtest 'none clean cross'  clean 2
+norevtest 'none dirty linear' dirty 4
+norevtest 'none dirty cross'  dirty 2
+
+norevtest '-c clean linear'   clean 4 -c
+norevtest '-c clean cross'    clean 2 -c
+norevtest '-c dirty linear'   dirty 4 -c
+norevtest '-c dirty cross'    dirty 2 -c
+
+norevtest '-C clean linear'   clean 4 -C
+norevtest '-C clean cross'    clean 2 -C
+norevtest '-C dirty linear'   dirty 4 -C
+norevtest '-C dirty cross'    dirty 2 -C
diff -r c564dbb2a6d5 -r c0fd3e7cc502 tests/test-update-branches.out
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-update-branches.out	Thu Sep 17 23:09:25 2009 -0700
@@ -0,0 +1,114 @@
+% initial repo state
+
+@  5:e1bb631146ca  b1
+|
+o  4:a4fdb3b883c4 0:b608b9236435  b1
+|
+| o  3:4b57d2520816 1:44592833ba9f
+| |
+| | o  2:063f31070f65
+| |/
+| o  1:44592833ba9f
+|/
+o  0:b608b9236435
+
+% revtest none clean linear
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=2
+% revtest none clean same
+abort: crosses branches (use 'hg merge' or 'hg update -C')
+parent=2
+% revtest none clean diff
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=4
+% revtest none dirty linear
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=2
+M foo
+% revtest none dirty same
+abort: crosses branches (use 'hg merge' or 'hg update -C' to discard changes)
+parent=2
+M foo
+% revtest none dirty diff
+abort: crosses named branches (use 'hg update -C' to discard changes)
+parent=3
+M foo
+% revtest -c clean linear
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=2
+% revtest -c clean same
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=3
+% revtest -c clean diff
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=4
+% revtest -c dirty linear
+abort: uncommitted local changes
+parent=1
+M foo
+% revtest -c dirty same
+abort: uncommitted local changes
+parent=2
+M foo
+% revtest -c dirty diff
+abort: uncommitted local changes
+parent=3
+M foo
+% revtest -C clean linear
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=2
+% revtest -C clean same
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=3
+% revtest -C clean diff
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=4
+% revtest -C dirty linear
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=2
+% revtest -C dirty same
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=3
+% revtest -C dirty diff
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=4
+% norevtest none clean linear
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=5
+% norevtest none clean cross
+abort: crosses branches (use 'hg merge' or 'hg update -C')
+parent=2
+% norevtest none dirty linear
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=5
+M foo
+% norevtest none dirty cross
+abort: crosses branches (use 'hg merge' or 'hg update -C' to discard changes)
+parent=2
+M foo
+% norevtest -c clean linear
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=5
+% norevtest -c clean cross
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=3
+% norevtest -c dirty linear
+abort: uncommitted local changes
+parent=4
+M foo
+% norevtest -c dirty cross
+abort: uncommitted local changes
+parent=2
+M foo
+% norevtest -C clean linear
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=5
+% norevtest -C clean cross
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=3
+% norevtest -C dirty linear
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=5
+% norevtest -C dirty cross
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+parent=3


More information about the Mercurial-devel mailing list