view tests/test-push-warn @ 11059:ef4aa90b1e58

Move 'findrenames' code into its own file. The next few patches will increase the size of the "findrenames" functionality. This patch simply moves the function into its own file to avoid clutter building up in 'cmdutil.py'.
author David Greenaway <hg-dev@davidgreenaway.com>
date Sat, 03 Apr 2010 11:58:16 +1100
parents a101a743c570
children e43c23d189a5
line wrap: on
line source

#!/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 % 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