view tests/test-update-branches @ 9717:68a1b9d0663e

update: allow branch crossing without -c or -C, with no uncommitted changes Update will now allow crossing branches within the same named branch, when given a specific revision, if the working dir is clean, without requiring the -c or -C option. Abort if no revision is given and this would cross branches. Minor change to abort message if uncommitted changes are found. Modify test-update-branches and output to reflect the altered case. Modify test-merge5.out to reflect the altered case. Modify test-up-local-change.out with new message.
author Stuart W Marks <smarks@smarks.org>
date Thu, 05 Nov 2009 10:53:59 +0100
parents ea8c207a0f78
children
line wrap: on
line source

#!/bin/sh

# Construct the following history tree:
#
# @  5:e1bb631146ca  b1
# |
# o  4:a4fdb3b883c4 0:b608b9236435  b1
# |
# | o  3:4b57d2520816 1:44592833ba9f
# | |
# | | o  2:063f31070f65
# | |/
# | o  1:44592833ba9f
# |/
# o  0:b608b9236435

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'

# Test helper functions.

revtest () {
    msg=$1
    dirtyflag=$2   # 'clean' or 'dirty'
    startrev=$3
    targetrev=$4
    opt=$5
    echo % revtest $msg $startrev $targetrev
    hg up -qC $startrev
    test $dirtyflag = dirty && echo dirty > foo
    hg up $opt $targetrev
    hg parent --template 'parent={rev}\n'
    hg stat
}    

norevtest () {
    msg=$1
    dirtyflag=$2   # 'clean' or 'dirty'
    startrev=$3
    opt=$4
    echo % norevtest $msg $startrev
    hg up -qC $startrev
    test $dirtyflag = dirty && echo dirty > foo
    hg up $opt
    hg parent --template 'parent={rev}\n'
    hg stat
}    

# Test cases are documented in a table in the update function of merge.py.
# Cases are run as shown in that table, row by row.

norevtest 'none clean linear' clean 4
norevtest 'none clean same'   clean 2

revtest 'none clean linear' clean 1 2
revtest 'none clean same'   clean 2 3
revtest 'none clean cross'  clean 3 4

revtest 'none dirty linear' dirty 1 2
revtest 'none dirty same'   dirty 2 3
revtest 'none dirty cross'  dirty 3 4

revtest '-C dirty linear'   dirty 1 2 -C
revtest '-c dirty linear'   dirty 1 2 -c
norevtest '-c clean same'   clean 2 -c
revtest '-cC dirty linear'  dirty 1 2 -cC