|
|
#!/bin/sh
|
|
|
|
|
|
echo "[extensions]" >> $HGRCPATH
|
|
|
echo "graphlog=" >> $HGRCPATH
|
|
|
|
|
|
mkdir a
|
|
|
cd a
|
|
|
hg init
|
|
|
echo foo > t1
|
|
|
hg add t1
|
|
|
hg commit -m "1" -d "1000000 0"
|
|
|
|
|
|
cd ..
|
|
|
hg clone a b
|
|
|
|
|
|
cd a
|
|
|
echo foo > t2
|
|
|
hg add t2
|
|
|
hg commit -m "2" -d "1000000 0"
|
|
|
|
|
|
cd ../b
|
|
|
echo foo > t3
|
|
|
hg add t3
|
|
|
hg commit -m "3" -d "1000000 0"
|
|
|
|
|
|
hg push ../a
|
|
|
hg pull ../a
|
|
|
hg push ../a
|
|
|
hg merge
|
|
|
hg commit -m "4" -d "1000000 0"
|
|
|
hg push ../a
|
|
|
cd ..
|
|
|
|
|
|
hg init c
|
|
|
cd c
|
|
|
for i in 0 1 2; do
|
|
|
echo $i >> foo
|
|
|
hg ci -Am $i -d "1000000 0"
|
|
|
done
|
|
|
cd ..
|
|
|
|
|
|
hg clone c d
|
|
|
cd d
|
|
|
for i in 0 1; do
|
|
|
hg co -C $i
|
|
|
echo d-$i >> foo
|
|
|
hg ci -m d-$i -d "1000000 0"
|
|
|
done
|
|
|
|
|
|
HGMERGE=true hg merge 3
|
|
|
hg ci -m c-d -d "1000000 0"
|
|
|
|
|
|
hg push ../c; echo $?
|
|
|
hg push -r 2 ../c; echo $?
|
|
|
hg push -r 3 ../c; echo $?
|
|
|
hg push -r 3 -r 4 ../c; echo $?
|
|
|
hg push -f -r 3 -r 4 ../c; echo $?
|
|
|
hg push -r 5 ../c; echo $?
|
|
|
hg in ../c
|
|
|
|
|
|
echo % issue 450
|
|
|
hg init ../e
|
|
|
hg push -r 0 ../e ; echo $?
|
|
|
hg push -r 1 ../e ; echo $?
|
|
|
|
|
|
cd ..
|
|
|
|
|
|
echo % issue 736
|
|
|
hg init f
|
|
|
cd f
|
|
|
hg -q branch a
|
|
|
echo 0 > foo
|
|
|
hg -q ci -d "1000000 0" -Am 0
|
|
|
echo 1 > foo
|
|
|
hg -q ci -d "1000000 0" -m 1
|
|
|
hg -q up 0
|
|
|
echo 2 > foo
|
|
|
hg -q ci -d "1000000 0" -m 2
|
|
|
hg -q up 0
|
|
|
hg -q branch b
|
|
|
echo 3 > foo
|
|
|
hg -q ci -d "1000000 0" -m 3
|
|
|
cd ..
|
|
|
|
|
|
hg -q clone f g
|
|
|
cd g
|
|
|
|
|
|
echo % push on existing branch and new branch
|
|
|
hg -q up 1
|
|
|
echo 4 > foo
|
|
|
hg -q ci -d "1000000 0" -m 4
|
|
|
hg -q up 0
|
|
|
echo 5 > foo
|
|
|
hg -q branch c
|
|
|
hg -q ci -d "1000000 0" -m 5
|
|
|
hg push ../f; echo $?
|
|
|
hg push -r 4 -r 5 ../f; echo $?
|
|
|
|
|
|
echo % multiple new branches
|
|
|
hg -q branch d
|
|
|
echo 6 > foo
|
|
|
hg -q ci -d "1000000 0" -m 6
|
|
|
hg push ../f; echo $?
|
|
|
hg push -r 4 -r 6 ../f; echo $?
|
|
|
cd ../g
|
|
|
|
|
|
echo % fail on multiple head push
|
|
|
hg -q up 1
|
|
|
echo 7 > foo
|
|
|
hg -q ci -d "1000000 0" -m 7
|
|
|
hg push -r 4 -r 7 ../f; echo $?
|
|
|
|
|
|
echo % push replacement head on existing branches
|
|
|
hg -q up 3
|
|
|
echo 8 > foo
|
|
|
hg -q ci -d "1000000 0" -m 8
|
|
|
hg push -r 7 -r 8 ../f; echo $?
|
|
|
|
|
|
echo % merge of branch a to other branch b followed by unrelated push on branch a
|
|
|
hg -q up 7
|
|
|
HGMERGE=true hg -q merge 8
|
|
|
hg -q ci -d "1000000 0" -m 9
|
|
|
hg -q up 8
|
|
|
echo 10 > foo
|
|
|
hg -q ci -d "1000000 0" -m 10
|
|
|
hg push -r 9 ../f; echo $?
|
|
|
hg push -r 10 ../f; echo $?
|
|
|
|
|
|
echo % cheating the counting algorithm
|
|
|
hg -q up 9
|
|
|
HGMERGE=true hg -q merge 2
|
|
|
hg -q ci -d "1000000 0" -m 11
|
|
|
hg -q up 1
|
|
|
echo 12 > foo
|
|
|
hg -q ci -d "1000000 0" -m 12
|
|
|
hg push -r 11 -r 12 ../f; echo $?
|
|
|
|
|
|
echo % failed push of new named branch
|
|
|
echo 12 > foo
|
|
|
hg -q ci -d "1000000 0" -m 12a
|
|
|
hg -q up 11
|
|
|
echo 13 > foo
|
|
|
hg -q branch e
|
|
|
hg -q ci -d "1000000 0" -m 13d
|
|
|
hg push -r 12 -r 13 ../f; echo $?
|
|
|
|
|
|
echo % using --new-branch to push new named branch
|
|
|
hg push --new-branch -r 12 -r 13 ../f; echo $?
|
|
|
|
|
|
echo % checking prepush logic does not allow silently pushing multiple new heads
|
|
|
cd ..
|
|
|
hg init h
|
|
|
echo init > h/init
|
|
|
hg -R h ci -Am init
|
|
|
echo a > h/a
|
|
|
hg -R h ci -Am a
|
|
|
hg clone h i
|
|
|
hg -R h up 0
|
|
|
echo b > h/b
|
|
|
hg -R h ci -Am b
|
|
|
hg -R i up 0
|
|
|
echo c > i/c
|
|
|
hg -R i ci -Am c
|
|
|
hg -R i push h
|
|
|
echo
|
|
|
|
|
|
echo % check prepush logic with merged branches
|
|
|
hg init j
|
|
|
hg -R j branch a
|
|
|
echo init > j/foo
|
|
|
hg -R j ci -Am init
|
|
|
hg clone j k
|
|
|
echo a1 > j/foo
|
|
|
hg -R j ci -m a1
|
|
|
hg -R k branch b
|
|
|
echo b > k/foo
|
|
|
hg -R k ci -m b
|
|
|
hg -R k up 0
|
|
|
hg -R k merge b
|
|
|
hg -R k ci -m merge
|
|
|
hg -R k push -r a j
|
|
|
echo
|
|
|
|
|
|
echo % prepush -r should not allow you to sneak in new heads
|
|
|
hg init l
|
|
|
cd l
|
|
|
echo a >> foo
|
|
|
hg -q add foo
|
|
|
hg -q branch a
|
|
|
hg -q ci -d '0 0' -ma
|
|
|
hg -q up null
|
|
|
echo a >> foo
|
|
|
hg -q add foo
|
|
|
hg -q branch b
|
|
|
hg -q ci -d '0 0' -mb
|
|
|
cd ..
|
|
|
hg -q clone l m -u a
|
|
|
cd m
|
|
|
hg -q merge b
|
|
|
hg -q ci -d '0 0' -mmb
|
|
|
hg -q up 0
|
|
|
echo a >> foo
|
|
|
hg -q ci -ma2
|
|
|
hg -q up 2
|
|
|
echo a >> foo
|
|
|
hg -q branch -f b
|
|
|
hg -q ci -d '0 0' -mb2
|
|
|
hg -q merge 3
|
|
|
hg -q ci -d '0 0' -mma
|
|
|
hg push ../l -b b
|
|
|
cd ..
|
|
|
|
|
|
echo % check prepush with new branch head on former topo non-head
|
|
|
hg init n
|
|
|
cd n
|
|
|
hg branch A
|
|
|
echo a >a
|
|
|
hg ci -Ama
|
|
|
hg branch B
|
|
|
echo b >b
|
|
|
hg ci -Amb
|
|
|
# b is now branch head of B, and a topological head
|
|
|
# a is now branch head of A, but not a topological head
|
|
|
hg clone . inner
|
|
|
cd inner
|
|
|
hg up B
|
|
|
echo b1 >b1
|
|
|
hg ci -Amb1
|
|
|
# in the clone b1 is now the head of B
|
|
|
cd ..
|
|
|
hg up 0
|
|
|
echo a2 >a2
|
|
|
hg ci -Ama2
|
|
|
# a2 is now the new branch head of A, and a new topological head
|
|
|
# it replaces a former inner branch head, so it should at most warn about A, not B
|
|
|
echo %% glog of local
|
|
|
hg glog --template "{rev}: {branches} {desc}\n"
|
|
|
echo %% glog of remote
|
|
|
hg glog -R inner --template "{rev}: {branches} {desc}\n"
|
|
|
echo %% outgoing
|
|
|
hg out inner --template "{rev}: {branches} {desc}\n"
|
|
|
hg push inner
|
|
|
cd ..
|
|
|
|
|
|
echo % check prepush with new branch head on former topo head
|
|
|
hg init o
|
|
|
cd o
|
|
|
hg branch A
|
|
|
echo a >a
|
|
|
hg ci -Ama
|
|
|
hg branch B
|
|
|
echo b >b
|
|
|
hg ci -Amb
|
|
|
# b is now branch head of B, and a topological head
|
|
|
hg up 0
|
|
|
echo a1 >a1
|
|
|
hg ci -Ama1
|
|
|
# a1 is now branch head of A, and a topological head
|
|
|
hg clone . inner
|
|
|
cd inner
|
|
|
hg up B
|
|
|
echo b1 >b1
|
|
|
hg ci -Amb1
|
|
|
# in the clone b1 is now the head of B
|
|
|
cd ..
|
|
|
echo a2 >a2
|
|
|
hg ci -Ama2
|
|
|
# a2 is now the new branch head of A, and a topological head
|
|
|
# it replaces a former topological and branch head, so this should not warn
|
|
|
echo %% glog of local
|
|
|
hg glog --template "{rev}: {branches} {desc}\n"
|
|
|
echo %% glog of remote
|
|
|
hg glog -R inner --template "{rev}: {branches} {desc}\n"
|
|
|
echo %% outgoing
|
|
|
hg out inner --template "{rev}: {branches} {desc}\n"
|
|
|
hg push inner
|
|
|
cd ..
|
|
|
|
|
|
echo % check prepush with new branch head and new child of former branch head
|
|
|
echo % but child is on different branch
|
|
|
hg init p
|
|
|
cd p
|
|
|
hg branch A
|
|
|
echo a0 >a
|
|
|
hg ci -Ama0
|
|
|
echo a1 >a
|
|
|
hg ci -ma1
|
|
|
hg up null
|
|
|
hg branch B
|
|
|
echo b0 >b
|
|
|
hg ci -Amb0
|
|
|
echo b1 >b
|
|
|
hg ci -mb1
|
|
|
|
|
|
hg clone . inner
|
|
|
|
|
|
hg up A
|
|
|
hg branch -f B
|
|
|
echo a3 >a
|
|
|
hg ci -ma3
|
|
|
hg up 3
|
|
|
hg branch -f A
|
|
|
echo b3 >b
|
|
|
hg ci -mb3
|
|
|
|
|
|
echo %% glog of local
|
|
|
hg glog --template "{rev}: {branches} {desc}\n"
|
|
|
echo %% glog of remote
|
|
|
hg glog -R inner --template "{rev}: {branches} {desc}\n"
|
|
|
echo %% outgoing
|
|
|
hg out inner --template "{rev}: {branches} {desc}\n"
|
|
|
hg push inner
|
|
|
hg push inner -r4 -r5
|
|
|
hg in inner
|
|
|
cd ..
|
|
|
|
|
|
exit 0
|
|
|
|