Mercurial > hg > mercurial-crew-with-dirclash
view tests/test-rename-merge2 @ 5378:8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
The getchanges function of some converter_source classes can return
some false positives. I.e. they sometimes claim that a file "foo"
was changed in some revision, even though its contents are still the
same.
convert_svn is particularly bad, but I think this can also happen with
convert_cvs and, at least in theory, with mercurial_source.
For regular conversions this is not really a problem - as long as
getfile returns the right contents, we'll get a converted revision
with the right contents. But when we use --filemap, this could lead
to superfluous revisions being converted.
Instead of fixing every converter_source, I decided to change
mercurial_sink to work around this problem.
When --filemap is used, we're interested only in revisions that touch
some specific files. If a revision doesn't change any of these files,
then we're not interested in it (at least for revisions with a single
parent; merges are special).
For mercurial_sink, we abuse this property and rollback a commit if
the manifest text hasn't changed. This avoids duplicating the logic
from localrepo.filecommit to detect unchanged files.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Thu, 04 Oct 2007 23:21:37 -0300 |
parents | 7a7d4937272b |
children |
line wrap: on
line source
#!/bin/sh mkdir -p t cd t cat <<EOF > merge import sys, os f = open(sys.argv[1], "wb") f.write("merge %s %s %s" % (sys.argv[1], sys.argv[2], sys.argv[3])) f.close() EOF HGMERGE="python ../merge"; export HGMERGE # perform a test merge with possible renaming # # args: # $1 = action in local branch # $2 = action in remote branch # $3 = action in working dir # $4 = expected result tm() { mkdir t cd t hg init echo "[merge]" >> .hg/hgrc echo "followcopies = 1" >> .hg/hgrc # base echo base > a echo base > rev # used to force commits hg add a rev hg ci -m "base" -d "0 0" # remote echo remote > rev if [ "$2" != "" ] ; then $2 ; fi hg ci -m "remote" -d "0 0" # local hg co -q 0 echo local > rev if [ "$1" != "" ] ; then $1 ; fi hg ci -m "local" -d "0 0" # working dir echo local > rev if [ "$3" != "" ] ; then $3 ; fi # merge echo "--------------" echo "test L:$1 R:$2 W:$3 - $4" echo "--------------" hg merge -y --debug --traceback echo "--------------" hg status -camC -X rev hg ci -m "merge" -d "0 0" echo "--------------" echo cd .. rm -r t } up() { cp rev $1 hg add $1 2> /dev/null if [ "$2" != "" ] ; then cp rev $2 hg add $2 2> /dev/null fi } uc() { up $1; hg cp $1 $2; } # update + copy um() { up $1; hg mv $1 $2; } nc() { hg cp $1 $2; } # just copy nm() { hg mv $1 $2; } # just move tm "up a " "nc a b" " " "1 get local a to b" tm "nc a b" "up a " " " "2 get rem change to a and b" tm "up a " "nm a b" " " "3 get local a change to b, remove a" tm "nm a b" "up a " " " "4 get remote change to b" tm " " "nc a b" " " "5 get b" tm "nc a b" " " " " "6 nothing" tm " " "nm a b" " " "7 get b" tm "nm a b" " " " " "8 nothing" tm "um a b" "um a b" " " "9 do merge with ancestor in a" #tm "um a c" "um x c" " " "10 do merge with no ancestor" tm "nm a b" "nm a c" " " "11 get c, keep b" tm "nc a b" "up b " " " "12 merge b no ancestor" tm "up b " "nm a b" " " "13 merge b no ancestor" tm "nc a b" "up a b" " " "14 merge b no ancestor" tm "up b " "nm a b" " " "15 merge b no ancestor, remove a" tm "nc a b" "up a b" " " "16 get a, merge b no ancestor" tm "up a b" "nc a b" " " "17 keep a, merge b no ancestor" tm "nm a b" "up a b" " " "18 merge b no ancestor" tm "up a b" "nm a b" " " "19 merge b no ancestor, prompt remove a" tm "up a " "um a b" " " "20 merge a and b to b, remove a" tm "um a b" "up a " " " "21 merge a and b to b" #tm "nm a b" "um x a" " " "22 get a, keep b" tm "nm a b" "up a c" " " "23 get c, keep b"