Mercurial > hg
view tests/test-push-warn @ 11988:8380ed691df8
util: add an interpolate() function to for replacing multiple values
util.interpolate can be used to replace multiple items in a string all at once
(and optionally apply a function to the replacement), without worrying about
recursing:
>>> import util
>>> s = '$foo, $spam'
>>> util.interpolate(r'\$', { 'foo': 'bar', 'spam': 'eggs' }, s)
'bar, eggs'
>>> util.interpolate(r'\$', { 'foo': 'spam', 'spam': 'foo' }, s)
'spam, foo'
>>> util.interpolate(r'\$', { 'foo': 'spam', 'spam': 'foo' }, s, lambda s: s.upper())
'SPAM, FOO'
The patch also changes filemerge.py to use this new function.
author | Steve Losh <steve@stevelosh.com> |
---|---|
date | Wed, 18 Aug 2010 18:18:26 -0400 |
parents | e43c23d189a5 |
children | 4c94b6d0fb1c |
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 % 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