inotify: make inotifydirstate.status() returns a tuple of lists.
This makes it consistent with dirstate.status(), which is important if
there are other extensions messing with the output of status(). Those
extensions can safely assume that dirstate.status() returns a tuple of
lists, because its docstring says it does. But
inotifystatus.dirstate() returns a list of lists, which can break
those other extensions.
#!/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