Mercurial > hg-stable
view tests/test-convert-cvsnt-mergepoints @ 10251:a19d2993385d stable
subrepo: fix merging of already merged subrepos (issue1986)
This fixes a bug seen when merging a main repo which contains a subrepo when
both repos have been merged before. Each repo (main and sub) has two
branches, both of which have been merged before.
In a subrepo, if the revision to merge to is an ancestor of the current rev,
then the merge should be a noop.
Test provided by Steve Losh.
author | Benoit Boissinot <benoit.boissinot@ens-lyon.org> |
---|---|
date | Fri, 15 Jan 2010 21:08:04 +0100 |
parents | 56a5f80556f5 |
children |
line wrap: on
line source
#!/bin/sh "$TESTDIR/hghave" cvs || exit 80 filterpath() { eval "$@" | sed "s:$CVSROOT:*REPO*:g" } cvscall() { echo cvs -f "$@" cvs -f "$@" } # output of 'cvs ci' varies unpredictably, so discard most of it # -- just keep the part that matters cvsci() { echo cvs -f ci -f "$@" cvs -f ci -f "$@" 2>&1 | egrep "^(new|initial) revision:" } hgcat() { hg --cwd src-hg cat -r tip "$1" } echo "[extensions]" >> $HGRCPATH echo "convert = " >> $HGRCPATH echo "graphlog = " >> $HGRCPATH echo "% create cvs repository" mkdir cvsmaster cd cvsmaster CVSROOT=`pwd` export CVSROOT CVS_OPTIONS=-f export CVS_OPTIONS cd .. filterpath cvscall -Q -d "$CVSROOT" init echo "% checkout #1: add foo.txt" cvscall -Q checkout -d cvsworktmp . cd cvsworktmp mkdir foo cvscall -Q add foo cd foo echo foo > foo.txt cvscall -Q add foo.txt cvsci -m "add foo.txt" foo.txt cd ../.. rm -rf cvsworktmp echo "% checkout #2: create MYBRANCH1 and modify foo.txt on it" cvscall -Q checkout -d cvswork foo cd cvswork cvscall -q rtag -b -R MYBRANCH1 foo cvscall -Q update -P -r MYBRANCH1 echo bar > foo.txt cvsci -m "bar" foo.txt echo baz > foo.txt cvsci -m "baz" foo.txt echo "% create MYBRANCH1_2 and modify foo.txt some more" cvscall -q rtag -b -R -r MYBRANCH1 MYBRANCH1_2 foo cvscall -Q update -P -r MYBRANCH1_2 echo bazzie > foo.txt cvsci -m "bazzie" foo.txt echo "% create MYBRANCH1_1 and modify foo.txt yet again" cvscall -q rtag -b -R MYBRANCH1_1 foo cvscall -Q update -P -r MYBRANCH1_1 echo quux > foo.txt cvsci -m "quux" foo.txt echo "% merge MYBRANCH1 to MYBRANCH1_1" filterpath cvscall -Q update -P -jMYBRANCH1 # carefully placed sleep to dodge cvs bug (optimization?) where it # sometimes ignores a "commit" command if it comes too fast (the -f # option in cvsci seems to work for all the other commits in this # script) sleep 1 echo xyzzy > foo.txt cvsci -m "merge1+clobber" foo.txt echo "% return to trunk and merge MYBRANCH1_2" cvscall -Q update -P -A filterpath cvscall -Q update -P -jMYBRANCH1_2 cvsci -m "merge2" foo.txt REALCVS=`which cvs` echo "for x in \$*; do if [ \"\$x\" = \"rlog\" ]; then echo \"RCS file: $CVSROOT/foo/foo.txt,v\"; cat $TESTDIR/test-convert-cvsnt-mergepoints.rlog; exit 0; fi; done; $REALCVS \$*" > ../cvs chmod +x ../cvs PATH=..:${PATH} hg debugcvsps --parents foo | sed -e 's/Author:.*/Author:/' -e 's/Date:.*/Date:/' cd ..