Show More
@@ -0,0 +1,81 b'' | |||
|
1 | #!/bin/sh | |
|
2 | ||
|
3 | # Construct the following history tree: | |
|
4 | # | |
|
5 | # @ 5:e1bb631146ca b1 | |
|
6 | # | | |
|
7 | # o 4:a4fdb3b883c4 0:b608b9236435 b1 | |
|
8 | # | | |
|
9 | # | o 3:4b57d2520816 1:44592833ba9f | |
|
10 | # | | | |
|
11 | # | | o 2:063f31070f65 | |
|
12 | # | |/ | |
|
13 | # | o 1:44592833ba9f | |
|
14 | # |/ | |
|
15 | # o 0:b608b9236435 | |
|
16 | ||
|
17 | hg init | |
|
18 | echo foo > foo | |
|
19 | echo zero > a | |
|
20 | hg ci -qAm0 | |
|
21 | echo one > a ; hg ci -m1 | |
|
22 | echo two > a ; hg ci -m2 | |
|
23 | hg up -q 1 | |
|
24 | echo three > a ; hg ci -qm3 | |
|
25 | hg up -q 0 | |
|
26 | hg branch -q b1 | |
|
27 | echo four > a ; hg ci -qm4 | |
|
28 | echo five > a ; hg ci -qm5 | |
|
29 | ||
|
30 | echo % initial repo state | |
|
31 | echo | |
|
32 | hg --config 'extensions.graphlog=' \ | |
|
33 | glog --template '{rev}:{node|short} {parents} {branches}\n' | |
|
34 | ||
|
35 | # Test helper functions. | |
|
36 | ||
|
37 | revtest () { | |
|
38 | msg=$1 | |
|
39 | dirtyflag=$2 # 'clean' or 'dirty' | |
|
40 | startrev=$3 | |
|
41 | targetrev=$4 | |
|
42 | opt=$5 | |
|
43 | echo % revtest $msg $startrev $targetrev | |
|
44 | hg up -qC $startrev | |
|
45 | test $dirtyflag = dirty && echo dirty > foo | |
|
46 | hg up $opt $targetrev | |
|
47 | hg parent --template 'parent={rev}\n' | |
|
48 | hg stat | |
|
49 | } | |
|
50 | ||
|
51 | norevtest () { | |
|
52 | msg=$1 | |
|
53 | dirtyflag=$2 # 'clean' or 'dirty' | |
|
54 | startrev=$3 | |
|
55 | opt=$4 | |
|
56 | echo % norevtest $msg $startrev | |
|
57 | hg up -qC $startrev | |
|
58 | test $dirtyflag = dirty && echo dirty > foo | |
|
59 | hg up $opt | |
|
60 | hg parent --template 'parent={rev}\n' | |
|
61 | hg stat | |
|
62 | } | |
|
63 | ||
|
64 | # Test cases are documented in a table in the update function of merge.py. | |
|
65 | # Cases are run as shown in that table, row by row. | |
|
66 | ||
|
67 | norevtest 'none clean linear' clean 4 | |
|
68 | norevtest 'none clean same' clean 2 | |
|
69 | ||
|
70 | revtest 'none clean linear' clean 1 2 | |
|
71 | revtest 'none clean same' clean 2 3 | |
|
72 | revtest 'none clean cross' clean 3 4 | |
|
73 | ||
|
74 | revtest 'none dirty linear' dirty 1 2 | |
|
75 | revtest 'none dirty same' dirty 2 3 | |
|
76 | revtest 'none dirty cross' dirty 3 4 | |
|
77 | ||
|
78 | revtest '-C dirty linear' dirty 1 2 -C | |
|
79 | revtest '-c dirty linear' dirty 1 2 -c | |
|
80 | norevtest '-c clean same' clean 2 -c | |
|
81 | revtest '-cC dirty linear' dirty 1 2 -cC |
@@ -0,0 +1,55 b'' | |||
|
1 | % initial repo state | |
|
2 | ||
|
3 | @ 5:e1bb631146ca b1 | |
|
4 | | | |
|
5 | o 4:a4fdb3b883c4 0:b608b9236435 b1 | |
|
6 | | | |
|
7 | | o 3:4b57d2520816 1:44592833ba9f | |
|
8 | | | | |
|
9 | | | o 2:063f31070f65 | |
|
10 | | |/ | |
|
11 | | o 1:44592833ba9f | |
|
12 | |/ | |
|
13 | o 0:b608b9236435 | |
|
14 | ||
|
15 | % norevtest none clean linear 4 | |
|
16 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
17 | parent=5 | |
|
18 | % norevtest none clean same 2 | |
|
19 | abort: crosses branches (use 'hg merge' or 'hg update -C') | |
|
20 | parent=2 | |
|
21 | % revtest none clean linear 1 2 | |
|
22 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
23 | parent=2 | |
|
24 | % revtest none clean same 2 3 | |
|
25 | abort: crosses branches (use 'hg merge' or 'hg update -C') | |
|
26 | parent=2 | |
|
27 | % revtest none clean cross 3 4 | |
|
28 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
29 | parent=4 | |
|
30 | % revtest none dirty linear 1 2 | |
|
31 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
32 | parent=2 | |
|
33 | M foo | |
|
34 | % revtest none dirty same 2 3 | |
|
35 | abort: crosses branches (use 'hg merge' or 'hg update -C' to discard changes) | |
|
36 | parent=2 | |
|
37 | M foo | |
|
38 | % revtest none dirty cross 3 4 | |
|
39 | abort: crosses named branches (use 'hg update -C' to discard changes) | |
|
40 | parent=3 | |
|
41 | M foo | |
|
42 | % revtest -C dirty linear 1 2 | |
|
43 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
44 | parent=2 | |
|
45 | % revtest -c dirty linear 1 2 | |
|
46 | abort: uncommitted local changes | |
|
47 | parent=1 | |
|
48 | M foo | |
|
49 | % norevtest -c clean same 2 | |
|
50 | 1 files updated, 0 files merged, 0 files removed, 0 files unresolved | |
|
51 | parent=3 | |
|
52 | % revtest -cC dirty linear 1 2 | |
|
53 | abort: cannot specify both -c/--check and -C/--clean | |
|
54 | parent=1 | |
|
55 | M foo |
@@ -397,9 +397,37 b' def update(repo, node, branchmerge, forc' | |||
|
397 | 397 | """ |
|
398 | 398 | Perform a merge between the working directory and the given node |
|
399 | 399 | |
|
400 | node = the node to update to, or None if unspecified | |
|
400 | 401 | branchmerge = whether to merge between branches |
|
401 | 402 | force = whether to force branch merging or file overwriting |
|
402 | 403 | partial = a function to filter file lists (dirstate not updated) |
|
404 | ||
|
405 | The table below shows all the behaviors of the update command | |
|
406 | given the -c and -C or no options, whether the working directory | |
|
407 | is dirty, whether a revision is specified, and the relationship of | |
|
408 | the parent rev to the target rev (linear, on the same named | |
|
409 | branch, or on another named branch). | |
|
410 | ||
|
411 | This logic is tested by test-update-branches. | |
|
412 | ||
|
413 | -c -C dirty rev | linear same cross | |
|
414 | n n n n | ok (1) x | |
|
415 | n n n y | ok (1) ok | |
|
416 | n n y * | merge (2) (3) | |
|
417 | n y * * | --- discard --- | |
|
418 | y n y * | --- (4) --- | |
|
419 | y n n * | --- ok --- | |
|
420 | y y * * | --- (5) --- | |
|
421 | ||
|
422 | x = can't happen | |
|
423 | * = don't-care | |
|
424 | 1 = abort: crosses branches (use 'hg merge' or 'hg update -C') | |
|
425 | 2 = abort: crosses branches (use 'hg merge' or 'hg update -C' | |
|
426 | to discard changes) | |
|
427 | 3 = abort: crosses named branches (use 'hg update -C' to | |
|
428 | discard changes) | |
|
429 | 4 = abort: uncommitted local changes | |
|
430 | 5 = incompatible options (checked in commands.py) | |
|
403 | 431 | """ |
|
404 | 432 | |
|
405 | 433 | wlock = repo.wlock() |
General Comments 0
You need to be logged in to leave comments.
Login now