mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 00:14:35 +03:00
62eb1177d6
In certain situations you would be told "you should pull and merge" even when there is nothing to pull.
268 lines
4.8 KiB
Bash
Executable File
268 lines
4.8 KiB
Bash
Executable File
#!/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 ..
|
|
|
|
exit 0
|