Mercurial > hg
view tests/test-convert-hg-svn @ 10428:e553a425751d stable
convert: differentiate between IOError and OSError on commitctx()
The IOError exception is overloaded to mean 'this file was deleted in
the current commit'. Separate the code that handles IOError and file
deletion from general OSError exceptions. The latter are real errors,
but IOError is not always a throwable error.
This solves the accidental marking of files as 'deleted' in commits that
try to write for example in .hg/store/data revlogs that the current user
has no permission to modify (a normal OSError that should abort the
current commit).
Changed by pmezard: use getattr() to be on the safe side.
author | Giorgos Keramidas <keramida@ceid.upatras.gr> |
---|---|
date | Thu, 11 Feb 2010 23:15:42 +0200 |
parents | a02d43acbc04 |
children | c52057614c72 |
line wrap: on
line source
#!/bin/sh "$TESTDIR/hghave" svn svn-bindings || exit 80 fix_path() { tr '\\' / } echo "[extensions]" >> $HGRCPATH echo "convert = " >> $HGRCPATH echo "mq = " >> $HGRCPATH svnpath=`pwd | fix_path`/svn-repo svnadmin create $svnpath cat > $svnpath/hooks/pre-revprop-change <<'EOF' #!/bin/sh REPOS="$1" REV="$2" USER="$3" PROPNAME="$4" ACTION="$5" if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi if [ "$ACTION" = "A" -a "$PROPNAME" = "hg:convert-branch" ]; then exit 0; fi if [ "$ACTION" = "A" -a "$PROPNAME" = "hg:convert-rev" ]; then exit 0; fi echo "Changing prohibited revision property" >&2 exit 1 EOF chmod +x $svnpath/hooks/pre-revprop-change # SVN wants all paths to start with a slash. Unfortunately, # Windows ones don't. Handle that. svnurl=$svnpath expr $svnurl : "\/" > /dev/null if [ $? -ne 0 ]; then svnurl='/'$svnurl fi svnurl=file://$svnurl svn co $svnurl $svnpath-wc cd $svnpath-wc echo a > a svn add a svn ci -m'added a' a cd .. echo % initial roundtrip hg convert -s svn -d hg $svnpath-wc $svnpath-hg | grep -v initializing hg convert -s hg -d svn $svnpath-hg $svnpath-wc echo % second roundtrip should do nothing hg convert -s svn -d hg $svnpath-wc $svnpath-hg hg convert -s hg -d svn $svnpath-hg $svnpath-wc echo % new hg rev hg clone $svnpath-hg $svnpath-work cd $svnpath-work echo b > b hg add b hg ci -mb echo '% adding an empty revision' hg qnew -m emtpy empty hg qfinish -a cd .. echo % echo hg to svn hg --cwd $svnpath-hg pull -q $svnpath-work hg convert -s hg -d svn $svnpath-hg $svnpath-wc echo % svn back to hg should do nothing hg convert -s svn -d hg $svnpath-wc $svnpath-hg echo % hg back to svn should do nothing hg convert -s hg -d svn $svnpath-hg $svnpath-wc