[PATCH 1 of 5] tests: unify test-convert-svn-*

Dan Villiom Podlaski Christiansen danchr at gmail.com
Tue Sep 21 17:15:15 CDT 2010


# HG changeset patch
# User Dan Villiom Podlaski Christiansen <danchr at gmail.com>
# Date 1285087233 -7200
# Node ID de684652dd8a18e71e04739889f86aa5b5cc35bd
# Parent  c263092381e25cfe277899f69d6e0c40d05840c7
tests: unify test-convert-svn-*

diff --git a/tests/test-convert-svn-branches.out b/tests/test-convert-svn-branches.out
deleted file mode 100644
--- a/tests/test-convert-svn-branches.out
+++ /dev/null
@@ -1,52 +0,0 @@
-% convert trunk and branches
-initializing destination A-hg repository
-scanning source...
-sorting...
-converting...
-10 init projA
-9 hello
-8 branch trunk, remove c and dir
-7 change a
-6 change b
-5 move and update c
-4 move and update c
-3 change b again
-2 move to old2
-1 move back to old
-0 last change to a
-% convert again
-scanning source...
-sorting...
-converting...
-0 branch trunk at 1 into old3
-o  branch=newbranch 11 branch trunk at 1 into old3 files:
-|
-| o  branch= 10 last change to a files: a
-| |
-| | o  branch=old 9 move back to old files:
-| | |
-| | o  branch=old2 8 move to old2 files:
-| | |
-| | o  branch=old 7 change b again files: b
-| | |
-| o |  branch= 6 move and update c files: b
-| | |
-| | o  branch=old 5 move and update c files: c
-| | |
-| | o  branch=old 4 change b files: b
-| | |
-| o |  branch= 3 change a files: a
-| | |
-| | o  branch=old 2 branch trunk, remove c and dir files: c
-| |/
-| o  branch= 1 hello files: a b c dir/e
-|/
-o  branch= 0 init projA files:
-
-newbranch                     11:
-default                       10:
-old                            9:
-old2                           8:
-tip
-% test hg failing to call itself
-abort: Mercurial failed to run itself, check hg executable is in PATH
diff --git a/tests/test-convert-svn-branches b/tests/test-convert-svn-branches.t
old mode 100755
new mode 100644
rename from tests/test-convert-svn-branches
rename to tests/test-convert-svn-branches.t
--- a/tests/test-convert-svn-branches
+++ b/tests/test-convert-svn-branches.t
@@ -1,29 +1,86 @@
-#!/bin/sh
 
-"$TESTDIR/hghave" svn svn-bindings || exit 80
+  $ "$TESTDIR/hghave" svn svn-bindings || exit 80
 
-echo "[extensions]" >> $HGRCPATH
-echo "convert = " >> $HGRCPATH
-echo "graphlog =" >> $HGRCPATH
+  $ cat > $HGRCPATH <<EOF
+  > [extensions]
+  > convert = 
+  > graphlog =
+  > EOF
 
-svnadmin create svn-repo
-cat "$TESTDIR/svn/branches.svndump" | svnadmin load svn-repo > /dev/null
+  $ svnadmin create svn-repo
+  $ svnadmin load -q svn-repo < "$TESTDIR/svn/branches.svndump"
 
-echo % convert trunk and branches
-cat >branchmap <<EOF
-old3 newbranch
-EOF
-hg convert --branchmap=branchmap --datesort -r 10 svn-repo A-hg
+Convert trunk and branches
 
-echo % convert again
-hg convert --branchmap=branchmap --datesort svn-repo A-hg
+  $ cat > branchmap <<EOF
+  > old3 newbranch
+  > EOF
+  $ hg convert --branchmap=branchmap --datesort -r 10 svn-repo A-hg
+  initializing destination A-hg repository
+  scanning source...
+  sorting...
+  converting...
+  10 init projA
+  9 hello
+  8 branch trunk, remove c and dir
+  7 change a
+  6 change b
+  5 move and update c
+  4 move and update c
+  3 change b again
+  2 move to old2
+  1 move back to old
+  0 last change to a
 
-cd A-hg
-hg glog --template 'branch={branches} {rev} {desc|firstline} files: {files}\n'
-hg branches | sed 's/:.*/:/'
-hg tags -q
-cd ..
+Convert again
 
-echo '% test hg failing to call itself'
-HG=foobar hg convert svn-repo B-hg 2>&1 | grep itself
+  $ hg convert --branchmap=branchmap --datesort svn-repo A-hg
+  scanning source...
+  sorting...
+  converting...
+  0 branch trunk at 1 into old3
 
+  $ cd A-hg
+  $ hg glog --template 'branch={branches} {rev} {desc|firstline} files: {files}\n'
+  o  branch=newbranch 11 branch trunk at 1 into old3 files:
+  |
+  | o  branch= 10 last change to a files: a
+  | |
+  | | o  branch=old 9 move back to old files:
+  | | |
+  | | o  branch=old2 8 move to old2 files:
+  | | |
+  | | o  branch=old 7 change b again files: b
+  | | |
+  | o |  branch= 6 move and update c files: b
+  | | |
+  | | o  branch=old 5 move and update c files: c
+  | | |
+  | | o  branch=old 4 change b files: b
+  | | |
+  | o |  branch= 3 change a files: a
+  | | |
+  | | o  branch=old 2 branch trunk, remove c and dir files: c
+  | |/
+  | o  branch= 1 hello files: a b c dir/e
+  |/
+  o  branch= 0 init projA files:
+  
+
+  $ hg branches
+  newbranch                     11:08fca3ff8634
+  default                       10:098988aa63ba
+  old                            9:b308f345079b
+  old2                           8:49f2336c7b8b (inactive)
+  $ hg tags -q
+  tip
+  $ cd ..
+
+Test hg failing to call itself
+
+  $ HG=foobar hg convert svn-repo B-hg
+  .*
+  initializing destination B-hg repository
+  abort: Mercurial failed to run itself, check hg executable is in PATH
+  [255]
+
diff --git a/tests/test-convert-svn-encoding.out b/tests/test-convert-svn-encoding.out
deleted file mode 100644
--- a/tests/test-convert-svn-encoding.out
+++ /dev/null
@@ -1,5 +0,0 @@
-% convert while testing all possible outputs
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% check tags are in UTF-8
-'221c3fdaf24df5f14c0a64c597581e2eacfb47bb branch\xc3\xa9e\n'
-'7a40952c2db29cf00d9e31df3749e98d8a4bdcbf branch\xc3\xa9\n'
diff --git a/tests/test-convert-svn-encoding b/tests/test-convert-svn-encoding.t
old mode 100755
new mode 100644
rename from tests/test-convert-svn-encoding
rename to tests/test-convert-svn-encoding.t
--- a/tests/test-convert-svn-encoding
+++ b/tests/test-convert-svn-encoding.t
@@ -1,17 +1,135 @@
-#!/bin/sh
 
-"$TESTDIR/hghave" svn svn-bindings || exit 80
+  $ "$TESTDIR/hghave" svn svn-bindings || exit 80
 
-echo "[extensions]" >> $HGRCPATH
-echo "convert = " >> $HGRCPATH
+  $ cat > $HGRCPATH <<EOF
+  > [extensions]
+  > convert = 
+  > graphlog =
+  > EOF
 
-svnadmin create svn-repo
-cat "$TESTDIR/svn/encoding.svndump" | svnadmin load svn-repo > /dev/null
+  $ svnadmin create svn-repo
+  $ svnadmin load -q svn-repo < "$TESTDIR/svn/encoding.svndump"
 
-echo '% convert while testing all possible outputs'
-hg --debug convert svn-repo A-hg > /dev/null
-cd A-hg
-hg up
-echo '% check tags are in UTF-8'
-python -c "print '\n'.join([('%r' % l) for l in file('.hgtags', 'rb').readlines()])"
-cd ..
+Convert while testing all possible outputs
+
+  $ hg --debug convert svn-repo A-hg
+  initializing destination A-hg repository
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo
+  run hg sink pre-conversion action
+  scanning source...
+  found trunk at 'trunk'
+  found tags at 'tags'
+  found branches at 'branches'
+  found branch branché at 5
+  found branch branchée at 6
+  scanning: 1 revisions
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo/trunk
+  fetching revision log for "/trunk" from 4 to 0
+  parsing revision 4 (2 changes)
+  parsing revision 3 (4 changes)
+  parsing revision 2 (3 changes)
+  parsing revision 1 (3 changes)
+  no copyfrom path, don't know what to do.
+  '/branches' is not under '/trunk', ignoring
+  '/tags' is not under '/trunk', ignoring
+  scanning: 2 revisions
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo/branches/branch%C3%A9
+  fetching revision log for "/branches/branché" from 5 to 0
+  parsing revision 5 (1 changes)
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo/branches/branch%C3%A9
+  found parent of branch /branches/branché at 4: /trunk
+  scanning: 3 revisions
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo/branches/branch%C3%A9e
+  fetching revision log for "/branches/branchée" from 6 to 0
+  parsing revision 6 (1 changes)
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo/branches/branch%C3%A9e
+  found parent of branch /branches/branchée at 5: /branches/branché
+  scanning: 4 revisions
+  scanning: 5 revisions
+  scanning: 6 revisions
+  sorting...
+  converting...
+  5 init projA
+  source: svn:afeb9c47-92ff-4c0c-9f72-e1f6eb8ac9af/trunk at 1
+  converting: 0/6 revisions (0.00%)
+  4 hello
+  source: svn:afeb9c47-92ff-4c0c-9f72-e1f6eb8ac9af/trunk at 2
+  converting: 1/6 revisions (16.67%)
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo/trunk
+  scanning paths: /trunk/à 0/3 (0.00%)
+  scanning paths: /trunk/à/é 1/3 (33.33%)
+  scanning paths: /trunk/é 2/3 (66.67%)
+  à/é
+  getting files: à/é 1/2 (50.00%)
+  é
+  getting files: é 2/2 (100.00%)
+  3 copy files
+  source: svn:afeb9c47-92ff-4c0c-9f72-e1f6eb8ac9af/trunk at 3
+  converting: 2/6 revisions (33.33%)
+  scanning paths: /trunk/à 0/4 (0.00%)
+  gone from -1
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo/trunk
+  scanning paths: /trunk/è 1/4 (25.00%)
+  copied to è from é@2
+  scanning paths: /trunk/é 2/4 (50.00%)
+  gone from -1
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo/trunk
+  scanning paths: /trunk/ù 3/4 (75.00%)
+  mark /trunk/ù came from à:2
+  à/é
+  getting files: à/é 1/4 (25.00%)
+  è
+  getting files: è 2/4 (50.00%)
+   è: copy é:6b67ccefd5ce6de77e7ead4f5292843a0255329f
+  é
+  getting files: é 3/4 (75.00%)
+  ù/é
+  getting files: ù/é 4/4 (100.00%)
+   ù/é: copy à/é:a9092a3d84a37b9993b5c73576f6de29b7ea50f6
+  2 remove files
+  source: svn:afeb9c47-92ff-4c0c-9f72-e1f6eb8ac9af/trunk at 4
+  converting: 3/6 revisions (50.00%)
+  scanning paths: /trunk/è 0/2 (0.00%)
+  gone from -1
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo/trunk
+  scanning paths: /trunk/ù 1/2 (50.00%)
+  gone from -1
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo/trunk
+  è
+  getting files: è 1/2 (50.00%)
+  ù/é
+  getting files: ù/é 2/2 (100.00%)
+  1 branch to branch?
+  source: svn:afeb9c47-92ff-4c0c-9f72-e1f6eb8ac9af/branches/branch?@5
+  converting: 4/6 revisions (66.67%)
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo/branches/branch%C3%A9
+  scanning paths: /branches/branché 0/1 (0.00%)
+  0 branch to branch?e
+  source: svn:afeb9c47-92ff-4c0c-9f72-e1f6eb8ac9af/branches/branch?e at 6
+  converting: 5/6 revisions (83.33%)
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo/branches/branch%C3%A9e
+  scanning paths: /branches/branchée 0/1 (0.00%)
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo/branches/branch%C3%A9e
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo
+  reparent to file://.*/test-convert-svn-encoding.t/svn-repo/branches/branch%C3%A9e
+  updating tags
+  .hgtags
+  run hg sink post-conversion action
+  $ cd A-hg
+  $ hg up
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+Check tags are in UTF-8
+
+  $ python -c "print '\n'.join([('%r' % l) for l in file('.hgtags', 'rb').readlines()])"
+  '221c3fdaf24df5f14c0a64c597581e2eacfb47bb branch\xc3\xa9e\n'
+  '7a40952c2db29cf00d9e31df3749e98d8a4bdcbf branch\xc3\xa9\n'
+
+  $ cd ..
diff --git a/tests/test-convert-svn-move.out b/tests/test-convert-svn-move.out
deleted file mode 100644
--- a/tests/test-convert-svn-move.out
+++ /dev/null
@@ -1,123 +0,0 @@
-% convert trunk and branches
-initializing destination A-hg repository
-scanning source...
-sorting...
-converting...
-13 createtrunk
-12 moved1
-11 moved1
-10 moved2
-9 changeb and rm d2
-8 changeb and rm d2
-7 moved1again
-6 moved1again
-5 copyfilefrompast
-4 copydirfrompast
-3 add d3
-2 copy dir and remove subdir
-1 add d4old
-0 rename d4old into d4new
-o  13 rename d4old into d4new files: d4new/g d4old/g
-|
-o  12 add d4old files: d4old/g
-|
-o  11 copy dir and remove subdir files: d3/d31/e d4/d31/e d4/f
-|
-o  10 add d3 files: d3/d31/e d3/f
-|
-o  9 copydirfrompast files: d2/d
-|
-o  8 copyfilefrompast files: d
-|
-o  7 moved1again files: d1/b d1/c
-|
-| o  6 moved1again files:
-| |
-o |  5 changeb and rm d2 files: d1/b d2/d
-| |
-| o  4 changeb and rm d2 files: b
-| |
-o |  3 moved2 files: d2/d
-| |
-o |  2 moved1 files: d1/b d1/c
-| |
-| o  1 moved1 files: b c
-|
-o  0 createtrunk files:
-
-% check move copy records
-A d4new/g
-  d4old/g
-R d4old/g
-% check branches
-default                       13:
-d1                             6:
-% convert files being replaced by directories
-initializing destination hg-repo repository
-scanning source...
-sorting...
-converting...
-3 initial
-2 clobber symlink
-1 clobber1
-0 clobber2
-% manifest before
-644   a
-644   d/b
-644 @ dlink
-644 @ dlink2
-644   dlink3
-% manifest after clobber1
-644   a/b
-644   d/b
-644   dlink/b
-644 @ dlink2
-644   dlink3
-% manifest after clobber2
-644   a/b
-644   d/b
-644   dlink/b
-644 @ dlink2
-644 @ dlink3
-% try updating
-% test convert progress bar
-
-scanning [ <=>                                                              ] 1
-scanning [  <=>                                                             ] 2
-scanning [   <=>                                                            ] 3
-scanning [    <=>                                                           ] 4
-                                                                                
-converting [                                                              ] 0/4
-getting files [==========>                                                ] 1/5
-getting files [======================>                                    ] 2/5
-getting files [==================================>                        ] 3/5
-getting files [==============================================>            ] 4/5
-getting files [==========================================================>] 5/5
-                                                                                
-converting [==============>                                               ] 1/4
-scanning paths [                                                          ] 0/1
-                                                                                
-getting files [==========================================================>] 1/1
-                                                                                
-converting [==============================>                               ] 2/4
-scanning paths [                                                          ] 0/2
-scanning paths [============================>                             ] 1/2
-                                                                                
-getting files [=============>                                             ] 1/4
-getting files [============================>                              ] 2/4
-getting files [===========================================>               ] 3/4
-getting files [==========================================================>] 4/4
-                                                                                
-converting [=============================================>                ] 3/4
-scanning paths [                                                          ] 0/1
-                                                                                
-getting files [==========================================================>] 1/1
-                                                                                
-initializing destination hg-progress repository
-scanning source...
-sorting...
-converting...
-3 initial
-2 clobber symlink
-1 clobber1
-0 clobber2
diff --git a/tests/test-convert-svn-move b/tests/test-convert-svn-move.t
old mode 100755
new mode 100644
rename from tests/test-convert-svn-move
rename to tests/test-convert-svn-move.t
--- a/tests/test-convert-svn-move
+++ b/tests/test-convert-svn-move.t
@@ -1,70 +1,202 @@
-#!/bin/sh
 
-"$TESTDIR/hghave" svn svn-bindings || exit 80
+  $ "$TESTDIR/hghave" svn svn-bindings || exit 80
 
-fix_path()
-{
-    tr '\\' /
-}
+  $ fixpath()
+  > {
+  >     tr '\\' /
+  > }
+  $ cat > $HGRCPATH <<EOF
+  > [extensions]
+  > convert = 
+  > graphlog =
+  > EOF
 
-echo "[extensions]" >> $HGRCPATH
-echo "convert = " >> $HGRCPATH
-echo "hgext.graphlog =" >> $HGRCPATH
+  $ svnadmin create svn-repo
+  $ svnadmin load -q svn-repo < "$TESTDIR/svn/move.svndump"
+  $ svnpath=`pwd | fixpath`
 
-svnadmin create svn-repo
-cat "$TESTDIR/svn/move.svndump" | svnadmin load svn-repo > /dev/null
+SVN wants all paths to start with a slash. Unfortunately,
+Windows ones don't. Handle that.
 
-svnpath=`pwd | fix_path`
-# SVN wants all paths to start with a slash. Unfortunately,
-# Windows ones don't. Handle that.
-expr "$svnpath" : "\/" > /dev/null
-if [ $? -ne 0 ]; then
-    svnpath="/$svnpath"
-fi
-svnurl="file://$svnpath/svn-repo"
+  $ expr "$svnpath" : "\/" > /dev/null
+  > if [ $? -ne 0 ]; then
+  >   svnpath="/$svnpath"
+  > fi
+  > svnurl="file://$svnpath/svn-repo"
 
-echo % convert trunk and branches
-hg convert --datesort "$svnurl"/subproject A-hg
+Convert trunk and branches
 
-cd A-hg
-hg glog --template '{rev} {desc|firstline} files: {files}\n'
-echo '% check move copy records'
-hg st --rev 12:13 --copies
-echo '% check branches'
-hg branches | sed 's/:.*/:/'
-cd ..
+  $ hg convert --datesort "$svnurl"/subproject A-hg
+  initializing destination A-hg repository
+  scanning source...
+  sorting...
+  converting...
+  13 createtrunk
+  12 moved1
+  11 moved1
+  10 moved2
+  9 changeb and rm d2
+  8 changeb and rm d2
+  7 moved1again
+  6 moved1again
+  5 copyfilefrompast
+  4 copydirfrompast
+  3 add d3
+  2 copy dir and remove subdir
+  1 add d4old
+  0 rename d4old into d4new
 
-mkdir test-replace
-cd test-replace
-svnadmin create svn-repo
-cat "$TESTDIR/svn/replace.svndump" | svnadmin load svn-repo > /dev/null
+  $ cd A-hg
+  $ hg glog --template '{rev} {desc|firstline} files: {files}\n'
+  o  13 rename d4old into d4new files: d4new/g d4old/g
+  |
+  o  12 add d4old files: d4old/g
+  |
+  o  11 copy dir and remove subdir files: d3/d31/e d4/d31/e d4/f
+  |
+  o  10 add d3 files: d3/d31/e d3/f
+  |
+  o  9 copydirfrompast files: d2/d
+  |
+  o  8 copyfilefrompast files: d
+  |
+  o  7 moved1again files: d1/b d1/c
+  |
+  | o  6 moved1again files:
+  | |
+  o |  5 changeb and rm d2 files: d1/b d2/d
+  | |
+  | o  4 changeb and rm d2 files: b
+  | |
+  o |  3 moved2 files: d2/d
+  | |
+  o |  2 moved1 files: d1/b d1/c
+  | |
+  | o  1 moved1 files: b c
+  |
+  o  0 createtrunk files:
+  
 
-echo '% convert files being replaced by directories'
-hg convert svn-repo hg-repo
-cd hg-repo
-echo '% manifest before'
-hg -v manifest -r 1
-echo '% manifest after clobber1'
-hg -v manifest -r 2
-echo '% manifest after clobber2'
-hg -v manifest -r 3
-echo '% try updating'
-hg up -qC default
-cd ..
+Check move copy records
 
-echo '% test convert progress bar'
+  $ hg st --rev 12:13 --copies
+  A d4new/g
+    d4old/g
+  R d4old/g
 
-echo "progress=" >> $HGRCPATH
-echo "[progress]" >> $HGRCPATH
-echo "assume-tty=1" >> $HGRCPATH
-echo "delay=0" >> $HGRCPATH
-echo "refresh=0" >> $HGRCPATH
+Check branches
 
-cat > filtercr.py <<EOF
-import sys, re
-for line in sys.stdin:
-    line = re.sub(r'\r+[^\n]', lambda m: '\n' + m.group()[-1:], line)
-    sys.stdout.write(line)
-EOF
+  $ hg branches | sed 's/:.*/:/'
+  default                       13:
+  d1                             6:
+  $ cd ..
 
-hg convert svn-repo hg-progress 2>&1 | python filtercr.py
+  $ mkdir test-replace
+  $ cd test-replace
+  $ svnadmin create svn-repo
+  $ svnadmin load -q svn-repo < "$TESTDIR/svn/replace.svndump"
+
+Convert files being replaced by directories
+
+  $ hg convert svn-repo hg-repo
+  initializing destination hg-repo repository
+  scanning source...
+  sorting...
+  converting...
+  3 initial
+  2 clobber symlink
+  1 clobber1
+  0 clobber2
+
+  $ cd hg-repo
+
+Manifest before
+
+  $ hg -v manifest -r 1
+  644   a
+  644   d/b
+  644 @ dlink
+  644 @ dlink2
+  644   dlink3
+
+Manifest after clobber1
+
+  $ hg -v manifest -r 2
+  644   a/b
+  644   d/b
+  644   dlink/b
+  644 @ dlink2
+  644   dlink3
+
+Manifest after clobber2
+
+  $ hg -v manifest -r 3
+  644   a/b
+  644   d/b
+  644   dlink/b
+  644 @ dlink2
+  644 @ dlink3
+
+Try updating
+
+  $ hg up -qC default
+  $ cd ..
+
+Test convert progress bar'
+
+  $ cat >> $HGRCPATH <<EOF
+  > [extensions]
+  > progress = 
+  > [progress]
+  > assume-tty = 1
+  > delay = 0
+  > refresh = 0
+  > EOF
+  $ cat > filtercr.py <<EOF
+  > import sys, re
+  > for line in sys.stdin:
+  >     line = re.sub(r'\r+[^\n]', lambda m: '\n' + m.group()[-1:], line)
+  >     sys.stdout.write(line)
+  > EOF
+
+  $ hg convert svn-repo hg-progress 2>&1 | python filtercr.py
+  
+  scanning [ <=>                                                              ] 1
+  scanning [  <=>                                                             ] 2
+  scanning [   <=>                                                            ] 3
+  scanning [    <=>                                                           ] 4
+                                                                                  
+  converting [                                                              ] 0/4
+  getting files [==========>                                                ] 1/5
+  getting files [======================>                                    ] 2/5
+  getting files [==================================>                        ] 3/5
+  getting files [==============================================>            ] 4/5
+  getting files [==========================================================>] 5/5
+                                                                                  
+  converting [==============>                                               ] 1/4
+  scanning paths [                                                          ] 0/1
+                                                                                  
+  getting files [==========================================================>] 1/1
+                                                                                  
+  converting [==============================>                               ] 2/4
+  scanning paths [                                                          ] 0/2
+  scanning paths [============================>                             ] 1/2
+                                                                                  
+  getting files [=============>                                             ] 1/4
+  getting files [============================>                              ] 2/4
+  getting files [===========================================>               ] 3/4
+  getting files [==========================================================>] 4/4
+                                                                                  
+  converting [=============================================>                ] 3/4
+  scanning paths [                                                          ] 0/1
+                                                                                  
+  getting files [==========================================================>] 1/1
+                                                                                  
+  initializing destination hg-progress repository
+  scanning source...
+  sorting...
+  converting...
+  3 initial
+  2 clobber symlink
+  1 clobber1
+  0 clobber2
diff --git a/tests/test-convert-svn-sink.out b/tests/test-convert-svn-sink.out
deleted file mode 100644
--- a/tests/test-convert-svn-sink.out
+++ /dev/null
@@ -1,397 +0,0 @@
-% add
-adding a
-adding d1/d2/b
-adding link
-% modify
-1:8231f652da37
-assuming destination a-hg
-initializing svn repository 'a-hg'
-initializing svn working copy 'a-hg-wc'
-scanning source...
-sorting...
-converting...
-1 add a file
-0 modify a file
-At revision 2.
- 2 2 test .
- 2 2 test a
- 2 1 test d1
- 2 1 test d1/d2
- 2 1 test d1/d2/b
- 2 1 test link
-<?xml version="1.0"?>
-<log>
-<logentry
-   revision="2">
-<author>test</author>
-<date/>
-<paths>
-<path
-   action="M">/a</path>
-</paths>
-<msg>modify a file</msg>
-</logentry>
-<logentry
-   revision="1">
-<author>test</author>
-<date/>
-<paths>
-<path
-   action="A">/a</path>
-<path
-   action="A">/d1</path>
-<path
-   action="A">/d1/d2</path>
-<path
-   action="A">/d1/d2/b</path>
-<path
-   action="A">/link</path>
-</paths>
-<msg>add a file</msg>
-</logentry>
-</log>
-a:
-a
-d1
-link
-
-a-hg-wc:
-a
-d1
-link
-same
-% rename
-2:a67e26ccec09
-assuming destination a-hg
-initializing svn working copy 'a-hg-wc'
-scanning source...
-sorting...
-converting...
-0 rename a file
-At revision 3.
- 3 3 test .
- 3 3 test b
- 3 1 test d1
- 3 1 test d1/d2
- 3 1 test d1/d2/b
- 3 3 test newlink
-<?xml version="1.0"?>
-<log>
-<logentry
-   revision="3">
-<author>test</author>
-<date/>
-<paths>
-<path
-   action="D">/a</path>
-<path
-   copyfrom-path="/a"
-   copyfrom-rev="2"
-   action="A">/b</path>
-<path
-   copyfrom-path="/link"
-   copyfrom-rev="2"
-   action="A">/newlink</path>
-<path
-   action="D">/link</path>
-</paths>
-<msg>rename a file</msg>
-</logentry>
-</log>
-a:
-b
-d1
-newlink
-
-a-hg-wc:
-b
-d1
-newlink
-% copy
-3:0cf087b9ab02
-assuming destination a-hg
-initializing svn working copy 'a-hg-wc'
-scanning source...
-sorting...
-converting...
-0 copy a file
-At revision 4.
- 4 4 test .
- 4 3 test b
- 4 4 test c
- 4 1 test d1
- 4 1 test d1/d2
- 4 1 test d1/d2/b
- 4 3 test newlink
-<?xml version="1.0"?>
-<log>
-<logentry
-   revision="4">
-<author>test</author>
-<date/>
-<paths>
-<path
-   copyfrom-path="/b"
-   copyfrom-rev="3"
-   action="A">/c</path>
-</paths>
-<msg>copy a file</msg>
-</logentry>
-</log>
-a:
-b
-c
-d1
-newlink
-
-a-hg-wc:
-b
-c
-d1
-newlink
-% remove
-4:07b2e34a5b17
-assuming destination a-hg
-initializing svn working copy 'a-hg-wc'
-scanning source...
-sorting...
-converting...
-0 remove a file
-At revision 5.
- 5 5 test .
- 5 4 test c
- 5 1 test d1
- 5 1 test d1/d2
- 5 1 test d1/d2/b
- 5 3 test newlink
-<?xml version="1.0"?>
-<log>
-<logentry
-   revision="5">
-<author>test</author>
-<date/>
-<paths>
-<path
-   action="D">/b</path>
-</paths>
-<msg>remove a file</msg>
-</logentry>
-</log>
-a:
-c
-d1
-newlink
-
-a-hg-wc:
-c
-d1
-newlink
-% executable
-5:31093672760b
-assuming destination a-hg
-initializing svn working copy 'a-hg-wc'
-scanning source...
-sorting...
-converting...
-0 make a file executable
-At revision 6.
- 6 6 test .
- 6 6 test c
- 6 1 test d1
- 6 1 test d1/d2
- 6 1 test d1/d2/b
- 6 3 test newlink
-<?xml version="1.0"?>
-<log>
-<logentry
-   revision="6">
-<author>test</author>
-<date/>
-<paths>
-<path
-   action="M">/c</path>
-</paths>
-<msg>make a file executable</msg>
-</logentry>
-</log>
-executable
-% executable in new directory
-adding d1/a
-assuming destination a-hg
-initializing svn repository 'a-hg'
-initializing svn working copy 'a-hg-wc'
-scanning source...
-sorting...
-converting...
-0 add executable file in new directory
-At revision 1.
- 1 1 test .
- 1 1 test d1
- 1 1 test d1/a
-<?xml version="1.0"?>
-<log>
-<logentry
-   revision="1">
-<author>test</author>
-<date/>
-<paths>
-<path
-   action="A">/d1</path>
-<path
-   action="A">/d1/a</path>
-</paths>
-<msg>add executable file in new directory</msg>
-</logentry>
-</log>
-executable
-% copy to new directory
-assuming destination a-hg
-initializing svn working copy 'a-hg-wc'
-scanning source...
-sorting...
-converting...
-0 copy file to new directory
-At revision 2.
- 2 2 test .
- 2 1 test d1
- 2 1 test d1/a
- 2 2 test d2
- 2 2 test d2/a
-<?xml version="1.0"?>
-<log>
-<logentry
-   revision="2">
-<author>test</author>
-<date/>
-<paths>
-<path
-   action="A">/d2</path>
-<path
-   copyfrom-path="/d1/a"
-   copyfrom-rev="1"
-   action="A">/d2/a</path>
-</paths>
-<msg>copy file to new directory</msg>
-</logentry>
-</log>
-% branchy history
-adding b
-adding left-1
-adding left-2
-1 files updated, 0 files merged, 2 files removed, 0 files unresolved
-adding right-1
-created new head
-adding right-2
-3 files updated, 0 files merged, 2 files removed, 0 files unresolved
-merging b
-warning: conflicts during merge.
-merging b failed!
-2 files updated, 0 files merged, 0 files removed, 1 files unresolved
-use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
-assuming destination b-hg
-initializing svn repository 'b-hg'
-initializing svn working copy 'b-hg-wc'
-scanning source...
-sorting...
-converting...
-5 base
-4 left-1
-3 left-2
-2 right-1
-1 right-2
-0 merge
-% expect 4 changes
-At revision 4.
- 4 4 test .
- 4 3 test b
- 4 2 test left-1
- 4 3 test left-2
- 4 4 test right-1
- 4 4 test right-2
-<?xml version="1.0"?>
-<log>
-<logentry
-   revision="4">
-<author>test</author>
-<date/>
-<paths>
-<path
-   action="A">/right-1</path>
-<path
-   action="A">/right-2</path>
-</paths>
-<msg>merge</msg>
-</logentry>
-<logentry
-   revision="3">
-<author>test</author>
-<date/>
-<paths>
-<path
-   action="M">/b</path>
-<path
-   action="A">/left-2</path>
-</paths>
-<msg>left-2</msg>
-</logentry>
-<logentry
-   revision="2">
-<author>test</author>
-<date/>
-<paths>
-<path
-   action="M">/b</path>
-<path
-   action="A">/left-1</path>
-</paths>
-<msg>left-1</msg>
-</logentry>
-<logentry
-   revision="1">
-<author>test</author>
-<date/>
-<paths>
-<path
-   action="A">/b</path>
-</paths>
-<msg>base</msg>
-</logentry>
-</log>
-% tags are not supported, but must not break conversion
-adding a
-assuming destination a-hg
-initializing svn repository 'a-hg'
-initializing svn working copy 'a-hg-wc'
-scanning source...
-sorting...
-converting...
-1 Add file a
-0 Tagged as v1.0
-writing Subversion tags is not yet implemented
-At revision 2.
- 2 2 test .
- 2 1 test a
- 2 2 test .hgtags
-<?xml version="1.0"?>
-<log>
-<logentry
-   revision="2">
-<author>test</author>
-<date/>
-<paths>
-<path
-   action="A">/.hgtags</path>
-</paths>
-<msg>Tagged as v1.0</msg>
-</logentry>
-<logentry
-   revision="1">
-<author>test</author>
-<date/>
-<paths>
-<path
-   action="A">/a</path>
-</paths>
-<msg>Add file a</msg>
-</logentry>
-</log>
diff --git a/tests/test-convert-svn-sink b/tests/test-convert-svn-sink.t
old mode 100755
new mode 100644
rename from tests/test-convert-svn-sink
rename to tests/test-convert-svn-sink.t
--- a/tests/test-convert-svn-sink
+++ b/tests/test-convert-svn-sink.t
@@ -1,150 +1,548 @@
-#!/bin/sh
 
-"$TESTDIR/hghave" svn svn-bindings no-outer-repo || exit 80
+  $ "$TESTDIR/hghave" svn svn-bindings no-outer-repo || exit 80
 
-fixpath()
-{
-    tr '\\' /
-}
+  $ fixpath()
+  > {
+  >     tr '\\' /
+  > }
+  $ svnupanddisplay()
+  > {
+  >     (
+  >        cd $1;
+  >        svn up;
+  >        svn st -v | fixpath | sed 's/  */ /g'
+  >        limit=''
+  >        if [ $2 -gt 0 ]; then
+  >            limit="--limit=$2"
+  >        fi
+  >        svn log --xml -v $limit \
+  >            | fixpath \
+  >            | sed 's,<date>.*,<date/>,' \
+  >            | grep -v 'kind="'
+  >     )
+  > }
 
-svnupanddisplay()
-{
-    (
-       cd $1;
-       svn up;
-       svn st -v | fixpath | sed 's/  */ /g'
-       limit=''
-       if [ $2 -gt 0 ]; then
-           limit="--limit=$2"
-       fi
-       svn log --xml -v $limit | fixpath | sed 's,<date>.*,<date/>,' | grep -v 'kind="'
-    )
-}
+  $ cat > $HGRCPATH <<EOF
+  > [extensions]
+  > convert = 
+  > graphlog =
+  > EOF
 
-echo "[extensions]" >> $HGRCPATH
-echo "convert = " >> $HGRCPATH
+  $ hg init a
 
-hg init a
+Add
 
-echo a > a/a
-mkdir -p a/d1/d2
-echo b > a/d1/d2/b
-ln -s a/missing a/link
-echo % add
-hg --cwd a ci -d '0 0' -A -m 'add a file'
+  $ echo a > a/a
+  $ mkdir -p a/d1/d2
+  $ echo b > a/d1/d2/b
+  $ ln -s a/missing a/link
+  $ hg --cwd a ci -d '0 0' -A -m 'add a file'
+  adding a
+  adding d1/d2/b
+  adding link
 
-"$TESTDIR/svn-safe-append.py" a a/a
-echo % modify
-hg --cwd a ci -d '1 0' -m 'modify a file'
-hg --cwd a tip -q
+Modify
 
-hg convert -d svn a
-svnupanddisplay a-hg-wc 2
-ls a a-hg-wc
-cmp a/a a-hg-wc/a && echo same || echo different
+  $ "$TESTDIR/svn-safe-append.py" a a/a
+  $ hg --cwd a ci -d '1 0' -m 'modify a file'
+  $ hg --cwd a tip -q
+  1:8231f652da37
 
-hg --cwd a mv a b
-hg --cwd a mv link newlink
-echo % rename
-hg --cwd a ci -d '2 0' -m 'rename a file'
-hg --cwd a tip -q
+  $ hg convert -d svn a
+  assuming destination a-hg
+  initializing svn repository 'a-hg'
+  initializing svn working copy 'a-hg-wc'
+  scanning source...
+  sorting...
+  converting...
+  1 add a file
+  0 modify a file
+  $ svnupanddisplay a-hg-wc 2
+  At revision 2.
+   2 2 test .
+   2 2 test a
+   2 1 test d1
+   2 1 test d1/d2
+   2 1 test d1/d2/b
+   2 1 test link
+  <?xml version="1.0"?>
+  <log>
+  <logentry
+     revision="2">
+  <author>test</author>
+  <date/>
+  <paths>
+  <path
+     action="M">/a</path>
+  </paths>
+  <msg>modify a file</msg>
+  </logentry>
+  <logentry
+     revision="1">
+  <author>test</author>
+  <date/>
+  <paths>
+  <path
+     action="A">/a</path>
+  <path
+     action="A">/d1</path>
+  <path
+     action="A">/d1/d2</path>
+  <path
+     action="A">/d1/d2/b</path>
+  <path
+     action="A">/link</path>
+  </paths>
+  <msg>add a file</msg>
+  </logentry>
+  </log>
+  $ ls a a-hg-wc
+  a:
+  a
+  d1
+  link
+  
+  a-hg-wc:
+  a
+  d1
+  link
+  $ cmp a/a a-hg-wc/a
 
-hg convert -d svn a
-svnupanddisplay a-hg-wc 1
-ls a a-hg-wc
+Rename
 
-hg --cwd a cp b c
-echo % copy
-hg --cwd a ci -d '3 0' -m 'copy a file'
-hg --cwd a tip -q
+  $ hg --cwd a mv a b
+  $ hg --cwd a mv link newlink
 
-hg convert -d svn a
-svnupanddisplay a-hg-wc 1
-ls a a-hg-wc
+  $ hg --cwd a ci -d '2 0' -m 'rename a file'
+  $ hg --cwd a tip -q
+  2:a67e26ccec09
 
-hg --cwd a rm b
-echo % remove
-hg --cwd a ci -d '4 0' -m 'remove a file'
-hg --cwd a tip -q
+  $ hg convert -d svn a
+  assuming destination a-hg
+  initializing svn working copy 'a-hg-wc'
+  scanning source...
+  sorting...
+  converting...
+  0 rename a file
+  $ svnupanddisplay a-hg-wc 1
+  At revision 3.
+   3 3 test .
+   3 3 test b
+   3 1 test d1
+   3 1 test d1/d2
+   3 1 test d1/d2/b
+   3 3 test newlink
+  <?xml version="1.0"?>
+  <log>
+  <logentry
+     revision="3">
+  <author>test</author>
+  <date/>
+  <paths>
+  <path
+     action="D">/a</path>
+  <path
+     copyfrom-path="/a"
+     copyfrom-rev="2"
+     action="A">/b</path>
+  <path
+     copyfrom-path="/link"
+     copyfrom-rev="2"
+     action="A">/newlink</path>
+  <path
+     action="D">/link</path>
+  </paths>
+  <msg>rename a file</msg>
+  </logentry>
+  </log>
+  $ ls a a-hg-wc
+  a:
+  b
+  d1
+  newlink
+  
+  a-hg-wc:
+  b
+  d1
+  newlink
 
-hg convert -d svn a
-svnupanddisplay a-hg-wc 1
-ls a a-hg-wc
+Copy
 
-chmod +x a/c
-echo % executable
-hg --cwd a ci -d '5 0' -m 'make a file executable'
-hg --cwd a tip -q
+  $ hg --cwd a cp b c
 
-hg convert -d svn a
-svnupanddisplay a-hg-wc 1
-test -x a-hg-wc/c && echo executable || echo not executable
+  $ hg --cwd a ci -d '3 0' -m 'copy a file'
+  $ hg --cwd a tip -q
+  3:0cf087b9ab02
 
-echo % executable in new directory
+  $ hg convert -d svn a
+  assuming destination a-hg
+  initializing svn working copy 'a-hg-wc'
+  scanning source...
+  sorting...
+  converting...
+  0 copy a file
+  $ svnupanddisplay a-hg-wc 1
+  At revision 4.
+   4 4 test .
+   4 3 test b
+   4 4 test c
+   4 1 test d1
+   4 1 test d1/d2
+   4 1 test d1/d2/b
+   4 3 test newlink
+  <?xml version="1.0"?>
+  <log>
+  <logentry
+     revision="4">
+  <author>test</author>
+  <date/>
+  <paths>
+  <path
+     copyfrom-path="/b"
+     copyfrom-rev="3"
+     action="A">/c</path>
+  </paths>
+  <msg>copy a file</msg>
+  </logentry>
+  </log>
+  $ ls a a-hg-wc
+  a:
+  b
+  c
+  d1
+  newlink
+  
+  a-hg-wc:
+  b
+  c
+  d1
+  newlink
 
-rm -rf a a-hg a-hg-wc
-hg init a
+  $ hg --cwd a rm b
+  $ echo % remove
+  % remove
+  $ hg --cwd a ci -d '4 0' -m 'remove a file'
+  $ hg --cwd a tip -q
+  4:07b2e34a5b17
 
-mkdir a/d1
-echo a > a/d1/a
-chmod +x a/d1/a
-hg --cwd a ci -d '0 0' -A -m 'add executable file in new directory'
+  $ hg convert -d svn a
+  assuming destination a-hg
+  initializing svn working copy 'a-hg-wc'
+  scanning source...
+  sorting...
+  converting...
+  0 remove a file
+  $ svnupanddisplay a-hg-wc 1
+  At revision 5.
+   5 5 test .
+   5 4 test c
+   5 1 test d1
+   5 1 test d1/d2
+   5 1 test d1/d2/b
+   5 3 test newlink
+  <?xml version="1.0"?>
+  <log>
+  <logentry
+     revision="5">
+  <author>test</author>
+  <date/>
+  <paths>
+  <path
+     action="D">/b</path>
+  </paths>
+  <msg>remove a file</msg>
+  </logentry>
+  </log>
+  $ ls a a-hg-wc
+  a:
+  c
+  d1
+  newlink
+  
+  a-hg-wc:
+  c
+  d1
+  newlink
 
-hg convert -d svn a
-svnupanddisplay a-hg-wc 1
-test -x a-hg-wc/d1/a && echo executable || echo not executable
+Exectutable
 
-echo % copy to new directory
+  $ chmod +x a/c
+  $ hg --cwd a ci -d '5 0' -m 'make a file executable'
+  $ hg --cwd a tip -q
+  5:31093672760b
 
-mkdir a/d2
-hg --cwd a cp d1/a d2/a
-hg --cwd a ci -d '1 0' -A -m 'copy file to new directory'
+  $ hg convert -d svn a
+  assuming destination a-hg
+  initializing svn working copy 'a-hg-wc'
+  scanning source...
+  sorting...
+  converting...
+  0 make a file executable
+  $ svnupanddisplay a-hg-wc 1
+  At revision 6.
+   6 6 test .
+   6 6 test c
+   6 1 test d1
+   6 1 test d1/d2
+   6 1 test d1/d2/b
+   6 3 test newlink
+  <?xml version="1.0"?>
+  <log>
+  <logentry
+     revision="6">
+  <author>test</author>
+  <date/>
+  <paths>
+  <path
+     action="M">/c</path>
+  </paths>
+  <msg>make a file executable</msg>
+  </logentry>
+  </log>
+  $ test -x a-hg-wc/c
 
-hg convert -d svn a
-svnupanddisplay a-hg-wc 1
+Executable in new directory
 
-echo % branchy history
+  $ rm -rf a a-hg a-hg-wc
+  $ hg init a
 
-hg init b
-echo base > b/b
-hg --cwd b ci -d '0 0' -Ambase
+  $ mkdir a/d1
+  $ echo a > a/d1/a
+  $ chmod +x a/d1/a
+  $ hg --cwd a ci -d '0 0' -A -m 'add executable file in new directory'
+  adding d1/a
 
-"$TESTDIR/svn-safe-append.py" left-1 b/b
-echo left-1 > b/left-1
-hg --cwd b ci -d '1 0' -Amleft-1
+  $ hg convert -d svn a
+  assuming destination a-hg
+  initializing svn repository 'a-hg'
+  initializing svn working copy 'a-hg-wc'
+  scanning source...
+  sorting...
+  converting...
+  0 add executable file in new directory
+  $ svnupanddisplay a-hg-wc 1
+  At revision 1.
+   1 1 test .
+   1 1 test d1
+   1 1 test d1/a
+  <?xml version="1.0"?>
+  <log>
+  <logentry
+     revision="1">
+  <author>test</author>
+  <date/>
+  <paths>
+  <path
+     action="A">/d1</path>
+  <path
+     action="A">/d1/a</path>
+  </paths>
+  <msg>add executable file in new directory</msg>
+  </logentry>
+  </log>
+  $ test -x a-hg-wc/d1/a
 
-"$TESTDIR/svn-safe-append.py" left-2 b/b
-echo left-2 > b/left-2
-hg --cwd b ci -d '2 0' -Amleft-2
+Copy to new directory
 
-hg --cwd b up 0
+  $ mkdir a/d2
+  $ hg --cwd a cp d1/a d2/a
+  $ hg --cwd a ci -d '1 0' -A -m 'copy file to new directory'
 
-"$TESTDIR/svn-safe-append.py" right-1 b/b
-echo right-1 > b/right-1
-hg --cwd b ci -d '3 0' -Amright-1
+  $ hg convert -d svn a
+  assuming destination a-hg
+  initializing svn working copy 'a-hg-wc'
+  scanning source...
+  sorting...
+  converting...
+  0 copy file to new directory
+  $ svnupanddisplay a-hg-wc 1
+  At revision 2.
+   2 2 test .
+   2 1 test d1
+   2 1 test d1/a
+   2 2 test d2
+   2 2 test d2/a
+  <?xml version="1.0"?>
+  <log>
+  <logentry
+     revision="2">
+  <author>test</author>
+  <date/>
+  <paths>
+  <path
+     action="A">/d2</path>
+  <path
+     copyfrom-path="/d1/a"
+     copyfrom-rev="1"
+     action="A">/d2/a</path>
+  </paths>
+  <msg>copy file to new directory</msg>
+  </logentry>
+  </log>
 
-"$TESTDIR/svn-safe-append.py" right-2 b/b
-echo right-2 > b/right-2
-hg --cwd b ci -d '4 0' -Amright-2
+Branchy history
 
-hg --cwd b up -C 2
-hg --cwd b merge
-hg --cwd b revert -r 2 b
-hg resolve -m b
-hg --cwd b ci -d '5 0' -m 'merge'
+  $ hg init b
+  $ echo base > b/b
+  $ hg --cwd b ci -d '0 0' -Ambase
+  adding b
 
-hg convert -d svn b
-echo % expect 4 changes
-svnupanddisplay b-hg-wc 0
+  $ "$TESTDIR/svn-safe-append.py" left-1 b/b
+  $ echo left-1 > b/left-1
+  $ hg --cwd b ci -d '1 0' -Amleft-1
+  adding left-1
 
-echo % tags are not supported, but must not break conversion
+  $ "$TESTDIR/svn-safe-append.py" left-2 b/b
+  $ echo left-2 > b/left-2
+  $ hg --cwd b ci -d '2 0' -Amleft-2
+  adding left-2
 
-rm -rf a a-hg a-hg-wc
-hg init a
-echo a > a/a
-hg --cwd a ci -d '0 0' -A -m 'Add file a'
-hg --cwd a tag -d '1 0' -m 'Tagged as v1.0' v1.0
+  $ hg --cwd b up 0
+  1 files updated, 0 files merged, 2 files removed, 0 files unresolved
 
-hg convert -d svn a
-svnupanddisplay a-hg-wc 2
-rm -rf a a-hg a-hg-wc
+  $ "$TESTDIR/svn-safe-append.py" right-1 b/b
+  $ echo right-1 > b/right-1
+  $ hg --cwd b ci -d '3 0' -Amright-1
+  adding right-1
+  created new head
+
+  $ "$TESTDIR/svn-safe-append.py" right-2 b/b
+  $ echo right-2 > b/right-2
+  $ hg --cwd b ci -d '4 0' -Amright-2
+  adding right-2
+
+  $ hg --cwd b up -C 2
+  3 files updated, 0 files merged, 2 files removed, 0 files unresolved
+  $ hg --cwd b merge
+  merging b
+  warning: conflicts during merge.
+  merging b failed!
+  2 files updated, 0 files merged, 0 files removed, 1 files unresolved
+  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
+  [1]
+  $ hg --cwd b revert -r 2 b
+  $ hg resolve -m b
+  $ hg --cwd b ci -d '5 0' -m 'merge'
+
+Expect 4 changes
+
+  $ hg convert -d svn b
+  assuming destination b-hg
+  initializing svn repository 'b-hg'
+  initializing svn working copy 'b-hg-wc'
+  scanning source...
+  sorting...
+  converting...
+  5 base
+  4 left-1
+  3 left-2
+  2 right-1
+  1 right-2
+  0 merge
+
+  $ svnupanddisplay b-hg-wc 0
+  At revision 4.
+   4 4 test .
+   4 3 test b
+   4 2 test left-1
+   4 3 test left-2
+   4 4 test right-1
+   4 4 test right-2
+  <?xml version="1.0"?>
+  <log>
+  <logentry
+     revision="4">
+  <author>test</author>
+  <date/>
+  <paths>
+  <path
+     action="A">/right-1</path>
+  <path
+     action="A">/right-2</path>
+  </paths>
+  <msg>merge</msg>
+  </logentry>
+  <logentry
+     revision="3">
+  <author>test</author>
+  <date/>
+  <paths>
+  <path
+     action="M">/b</path>
+  <path
+     action="A">/left-2</path>
+  </paths>
+  <msg>left-2</msg>
+  </logentry>
+  <logentry
+     revision="2">
+  <author>test</author>
+  <date/>
+  <paths>
+  <path
+     action="M">/b</path>
+  <path
+     action="A">/left-1</path>
+  </paths>
+  <msg>left-1</msg>
+  </logentry>
+  <logentry
+     revision="1">
+  <author>test</author>
+  <date/>
+  <paths>
+  <path
+     action="A">/b</path>
+  </paths>
+  <msg>base</msg>
+  </logentry>
+  </log>
+
+Tags are not supported, but must not break conversion
+
+  $ rm -rf a a-hg a-hg-wc
+  $ hg init a
+  $ echo a > a/a
+  $ hg --cwd a ci -d '0 0' -A -m 'Add file a'
+  adding a
+  $ hg --cwd a tag -d '1 0' -m 'Tagged as v1.0' v1.0
+
+  $ hg convert -d svn a
+  assuming destination a-hg
+  initializing svn repository 'a-hg'
+  initializing svn working copy 'a-hg-wc'
+  scanning source...
+  sorting...
+  converting...
+  1 Add file a
+  0 Tagged as v1.0
+  writing Subversion tags is not yet implemented
+  $ svnupanddisplay a-hg-wc 2
+  At revision 2.
+   2 2 test .
+   2 1 test a
+   2 2 test .hgtags
+  <?xml version="1.0"?>
+  <log>
+  <logentry
+     revision="2">
+  <author>test</author>
+  <date/>
+  <paths>
+  <path
+     action="A">/.hgtags</path>
+  </paths>
+  <msg>Tagged as v1.0</msg>
+  </logentry>
+  <logentry
+     revision="1">
+  <author>test</author>
+  <date/>
+  <paths>
+  <path
+     action="A">/a</path>
+  </paths>
+  <msg>Add file a</msg>
+  </logentry>
+  </log>
+  $ rm -rf a a-hg a-hg-wc
diff --git a/tests/test-convert-svn-source.out b/tests/test-convert-svn-source.out
deleted file mode 100644
--- a/tests/test-convert-svn-source.out
+++ /dev/null
@@ -1,91 +0,0 @@
-# now tests that it works with trunk/tags layout, but no branches yet
-
-% initial svn import
-Adding         projB/trunk
-Adding         projB/tags
-
-Committed revision 1.
-% update svn repository
-Checked out revision 1.
-A         letter .txt
-Adding         letter .txt
-Transmitting file data .
-Committed revision 2.
-Sending        letter .txt
-Transmitting file data .
-Committed revision 3.
-
-Committed revision 4.
-Sending        letter .txt
-Transmitting file data .
-Committed revision 5.
-% convert to hg once
-initializing destination B-hg repository
-scanning source...
-sorting...
-converting...
-3 init projB
-2 hello
-1 world
-0 nice day
-updating tags
-% update svn repository again
-A         letter2.txt
-Sending        letter .txt
-Adding         letter2.txt
-Transmitting file data ..
-Committed revision 6.
-
-Committed revision 7.
-Sending        letter2.txt
-Transmitting file data .
-Committed revision 8.
-% test incremental conversion
-scanning source...
-sorting...
-converting...
-1 second letter
-0 work in progress
-updating tags
-o  7 update tags files: .hgtags
-|
-o  6 work in progress files: letter2.txt
-|
-o  5 second letter files: letter .txt letter2.txt
-|
-o  4 update tags files: .hgtags
-|
-o  3 nice day files: letter .txt
-|
-o  2 world files: letter .txt
-|
-o  1 hello files: letter .txt
-|
-o  0 init projB files:
-
-tip
-v0.2
-v0.1
-% test filemap
-initializing destination fmap repository
-scanning source...
-sorting...
-converting...
-5 init projB
-4 hello
-3 world
-2 nice day
-1 second letter
-0 work in progress
-o  1 work in progress files: letter2.txt
-|
-o  0 second letter files: letter2.txt
-
-% test stop revision
-initializing destination stoprev repository
-scanning source...
-sorting...
-converting...
-0 init projB
-extra:       branch=
-extra:       convert_revision=
diff --git a/tests/test-convert-svn-source b/tests/test-convert-svn-source.t
old mode 100755
new mode 100644
rename from tests/test-convert-svn-source
rename to tests/test-convert-svn-source.t
--- a/tests/test-convert-svn-source
+++ b/tests/test-convert-svn-source.t
@@ -1,89 +1,179 @@
-#!/bin/sh
 
-"$TESTDIR/hghave" svn svn-bindings || exit 80
+  $ "$TESTDIR/hghave" svn svn-bindings || exit 80
 
-fix_path()
-{
-    tr '\\' /
-}
+  $ fixpath()
+  > {
+  >     tr '\\' /
+  > }
+  $ cat > $HGRCPATH <<EOF
+  > [extensions]
+  > convert = 
+  > graphlog =
+  > EOF
 
-echo "[extensions]" >> $HGRCPATH
-echo "convert = " >> $HGRCPATH
-echo 'graphlog =' >> $HGRCPATH
+  $ svnadmin create svn-repo
+  $ svnadmin setuuid svn-repo 00000000-0000-0000-0000-000000000000
+  $ svnpath=`pwd | fixpath`
 
-svnadmin create svn-repo
 
-svnpath=`pwd | fix_path`
-# SVN wants all paths to start with a slash. Unfortunately,
-# Windows ones don't. Handle that.
-expr "$svnpath" : "\/" > /dev/null
-if [ $? -ne 0 ]; then
-    svnpath="/$svnpath"
-fi
+  $ expr "$svnpath" : "\/" > /dev/null
+  > if [ $? -ne 0 ]; then
+  >   svnpath="/$svnpath"
+  > fi
+  > svnurl="file://$svnpath/svn-repo"
 
-echo "# now tests that it works with trunk/tags layout, but no branches yet"
-echo
-echo % initial svn import
-mkdir projB
-cd projB
-mkdir trunk
-mkdir tags
-cd ..
+Now test that it works with trunk/tags layout, but no branches yet.
 
-svnurl="file://$svnpath/svn-repo/proj%20B"
-svn import -m "init projB" projB "$svnurl" | fix_path
+Initial svn import
 
+  $ mkdir projB
+  $ cd projB
+  $ mkdir trunk
+  $ mkdir tags
+  $ cd ..
 
-echo % update svn repository
-svn co "$svnurl"/trunk B | fix_path
-cd B
-echo hello > 'letter .txt'
-svn add 'letter .txt'
-svn ci -m hello
+  $ svnurl="file://$svnpath/svn-repo/proj%20B"
+  $ svn import -m "init projB" projB "$svnurl" | fixpath
+  Adding         projB/trunk
+  Adding         projB/tags
+  
+  Committed revision 1.
 
-"$TESTDIR/svn-safe-append.py" world 'letter .txt'
-svn ci -m world
+Update svn repository
 
-svn copy -m "tag v0.1" "$svnurl"/trunk "$svnurl"/tags/v0.1
+  $ svn co "$svnurl"/trunk B | fixpath
+  Checked out revision 1.
+  $ cd B
+  $ echo hello > 'letter .txt'
+  $ svn add 'letter .txt'
+  A         letter .txt
+  $ svn ci -m hello
+  Adding         letter .txt
+  Transmitting file data .
+  Committed revision 2.
 
-"$TESTDIR/svn-safe-append.py" 'nice day today!' 'letter .txt'
-svn ci -m "nice day"
-cd ..
+  $ "$TESTDIR/svn-safe-append.py" world 'letter .txt'
+  $ svn ci -m world
+  Sending        letter .txt
+  Transmitting file data .
+  Committed revision 3.
 
-echo % convert to hg once
-hg convert "$svnurl" B-hg
+  $ svn copy -m "tag v0.1" "$svnurl"/trunk "$svnurl"/tags/v0.1
+  
+  Committed revision 4.
 
-echo % update svn repository again
-cd B
-"$TESTDIR/svn-safe-append.py" "see second letter" 'letter .txt'
-echo "nice to meet you" > letter2.txt
-svn add letter2.txt
-svn ci -m "second letter"
+  $ "$TESTDIR/svn-safe-append.py" 'nice day today!' 'letter .txt'
+  $ svn ci -m "nice day"
+  Sending        letter .txt
+  Transmitting file data .
+  Committed revision 5.
+  $ cd ..
 
-svn copy -m "tag v0.2" "$svnurl"/trunk "$svnurl"/tags/v0.2
+Convert to hg once
 
-"$TESTDIR/svn-safe-append.py" "blah-blah-blah" letter2.txt
-svn ci -m "work in progress"
-cd ..
+  $ hg convert "$svnurl" B-hg
+  initializing destination B-hg repository
+  scanning source...
+  sorting...
+  converting...
+  3 init projB
+  2 hello
+  1 world
+  0 nice day
+  updating tags
+
+Update svn repository again
+
+  $ cd B
+  $ "$TESTDIR/svn-safe-append.py" "see second letter" 'letter .txt'
+  $ echo "nice to meet you" > letter2.txt
+  $ svn add letter2.txt
+  A         letter2.txt
+  $ svn ci -m "second letter"
+  Sending        letter .txt
+  Adding         letter2.txt
+  Transmitting file data ..
+  Committed revision 6.
+
+  $ svn copy -m "tag v0.2" "$svnurl"/trunk "$svnurl"/tags/v0.2
+  
+  Committed revision 7.
+
+  $ "$TESTDIR/svn-safe-append.py" "blah-blah-blah" letter2.txt
+  $ svn ci -m "work in progress"
+  Sending        letter2.txt
+  Transmitting file data .
+  Committed revision 8.
+  $ cd ..
 
 ########################################
 
-echo % test incremental conversion
-hg convert "$svnurl" B-hg
+Test incremental conversion
 
-cd B-hg
-hg glog --template '{rev} {desc|firstline} files: {files}\n'
-hg tags -q
-cd ..
+  $ hg convert "$svnurl" B-hg
+  scanning source...
+  sorting...
+  converting...
+  1 second letter
+  0 work in progress
+  updating tags
 
-echo % test filemap
-echo 'include letter2.txt' > filemap
-hg convert --filemap filemap "$svnurl"/trunk fmap
-hg glog -R fmap --template '{rev} {desc|firstline} files: {files}\n'
+  $ cd B-hg
+  $ hg glog --template '{rev} {desc|firstline} files: {files}\n'
+  o  7 update tags files: .hgtags
+  |
+  o  6 work in progress files: letter2.txt
+  |
+  o  5 second letter files: letter .txt letter2.txt
+  |
+  o  4 update tags files: .hgtags
+  |
+  o  3 nice day files: letter .txt
+  |
+  o  2 world files: letter .txt
+  |
+  o  1 hello files: letter .txt
+  |
+  o  0 init projB files:
+  
+  $ hg tags -q
+  tip
+  v0.2
+  v0.1
+  $ cd ..
 
-echo % test stop revision
-hg convert --rev 1 "$svnurl"/trunk stoprev
-# Check convert_revision extra-records.
-# This is also the only place testing more than one extra field
-# in a revision.
-hg --cwd stoprev tip --debug | grep extra | sed 's/=.*/=/'
+Test filemap
+  $ echo 'include letter2.txt' > filemap
+  $ hg convert --filemap filemap "$svnurl"/trunk fmap
+  initializing destination fmap repository
+  scanning source...
+  sorting...
+  converting...
+  5 init projB
+  4 hello
+  3 world
+  2 nice day
+  1 second letter
+  0 work in progress
+  $ hg glog -R fmap --template '{rev} {desc|firstline} files: {files}\n'
+  o  1 work in progress files: letter2.txt
+  |
+  o  0 second letter files: letter2.txt
+  
+
+Test stop revision
+  $ hg convert --rev 1 "$svnurl"/trunk stoprev
+  initializing destination stoprev repository
+  scanning source...
+  sorting...
+  converting...
+  0 init projB
+
+Check convert_revision extra-records.
+This is also the only place testing more than one extra field in a revision.
+
+  $ cd stoprev
+  $ hg tip --debug | grep extra
+  extra:       branch=default
+  extra:       convert_revision=svn:00000000-0000-0000-0000-000000000000/proj B/trunk at 1
+  $ cd ..
diff --git a/tests/test-convert-svn-startrev.out b/tests/test-convert-svn-startrev.out
deleted file mode 100644
--- a/tests/test-convert-svn-startrev.out
+++ /dev/null
@@ -1,54 +0,0 @@
-% convert before branching point
-initializing destination A-r3-hg repository
-scanning source...
-sorting...
-converting...
-3 removeb
-2 changeaa
-1 branch, changeaaa
-0 addc,changeaaaa
-o  3 addc,changeaaaa files: a c
-|
-o  2 branch, changeaaa files: a
-|
-o  1 changeaa files: a
-|
-o  0 removeb files: a
-
-
-% convert before branching point
-initializing destination A-r4-hg repository
-scanning source...
-sorting...
-converting...
-2 changeaa
-1 branch, changeaaa
-0 addc,changeaaaa
-o  2 addc,changeaaaa files: a c
-|
-o  1 branch, changeaaa files: a
-|
-o  0 changeaa files: a
-
-
-% convert at branching point
-initializing destination A-r5-hg repository
-scanning source...
-sorting...
-converting...
-1 branch, changeaaa
-0 addc,changeaaaa
-o  1 addc,changeaaaa files: a c
-|
-o  0 branch, changeaaa files: a
-
-
-% convert last revision only
-initializing destination A-r6-hg repository
-scanning source...
-sorting...
-converting...
-0 addc,changeaaaa
-o  0 addc,changeaaaa files: a c
-
-
diff --git a/tests/test-convert-svn-startrev b/tests/test-convert-svn-startrev.t
old mode 100755
new mode 100644
rename from tests/test-convert-svn-startrev
rename to tests/test-convert-svn-startrev.t
--- a/tests/test-convert-svn-startrev
+++ b/tests/test-convert-svn-startrev.t
@@ -1,32 +1,90 @@
-#!/bin/sh
 
-"$TESTDIR/hghave" svn svn-bindings || exit 80
+  $ "$TESTDIR/hghave" svn svn-bindings || exit 80
 
-echo "[extensions]" >> $HGRCPATH
-echo "convert = " >> $HGRCPATH
-echo "graphlog =" >> $HGRCPATH
+  $ cat > $HGRCPATH <<EOF
+  > [extensions]
+  > convert = 
+  > graphlog =
+  > EOF
+  $ convert()
+  > {
+  >     startrev=$1
+  >     repopath=A-r$startrev-hg
+  >     hg convert --config convert.svn.startrev=$startrev \
+  >         --config convert.svn.trunk=branches/branch1 \
+  >         --config convert.svn.branches="  " \
+  >         --config convert.svn.tags= \
+  >         --datesort svn-repo $repopath
+  >     hg -R $repopath glog \
+  >         --template '{rev} {desc|firstline} files: {files}\n'
+  >     echo
+  > }
 
-svnadmin create svn-repo
-cat "$TESTDIR/svn/startrev.svndump" | svnadmin load svn-repo > /dev/null
+  $ svnadmin create svn-repo
+  $ svnadmin load -q svn-repo < "$TESTDIR/svn/startrev.svndump"
 
-convert()
-{
-    startrev=$1
-    repopath=A-r$startrev-hg
-    hg convert --config convert.svn.startrev=$startrev \
-        --config convert.svn.trunk=branches/branch1 \
-        --config convert.svn.branches="  " \
-        --config convert.svn.tags= \
-        --datesort svn-repo $repopath
-    hg -R $repopath glog --template '{rev} {desc|firstline} files: {files}\n'
-    echo
-}
+Convert before branching point
 
-echo % convert before branching point
-convert 3
-echo % convert before branching point
-convert 4
-echo % convert at branching point
-convert 5
-echo % convert last revision only
-convert 6
+  $ convert 3
+  initializing destination A-r3-hg repository
+  scanning source...
+  sorting...
+  converting...
+  3 removeb
+  2 changeaa
+  1 branch, changeaaa
+  0 addc,changeaaaa
+  o  3 addc,changeaaaa files: a c
+  |
+  o  2 branch, changeaaa files: a
+  |
+  o  1 changeaa files: a
+  |
+  o  0 removeb files: a
+  
+  
+
+Convert before branching point
+
+  $ convert 4
+  initializing destination A-r4-hg repository
+  scanning source...
+  sorting...
+  converting...
+  2 changeaa
+  1 branch, changeaaa
+  0 addc,changeaaaa
+  o  2 addc,changeaaaa files: a c
+  |
+  o  1 branch, changeaaa files: a
+  |
+  o  0 changeaa files: a
+  
+  
+
+Convert at branching point
+
+  $ convert 5
+  initializing destination A-r5-hg repository
+  scanning source...
+  sorting...
+  converting...
+  1 branch, changeaaa
+  0 addc,changeaaaa
+  o  1 addc,changeaaaa files: a c
+  |
+  o  0 branch, changeaaa files: a
+  
+  
+
+Convert last revision only
+
+  $ convert 6
+  initializing destination A-r6-hg repository
+  scanning source...
+  sorting...
+  converting...
+  0 addc,changeaaaa
+  o  0 addc,changeaaaa files: a c
+  
+  
diff --git a/tests/test-convert-svn-tags.out b/tests/test-convert-svn-tags.out
deleted file mode 100644
--- a/tests/test-convert-svn-tags.out
+++ /dev/null
@@ -1,41 +0,0 @@
-% convert
-initializing destination A-hg repository
-scanning source...
-sorting...
-converting...
-5 init projA
-4 adda
-3 changea
-2 changea2
-1 changea3
-0 changea
-updating tags
-o  6 update tags tags: tip
-|
-o  5 changea tags: trunk.goodtag
-|
-o  4 changea3 tags:
-|
-o  3 changea2 tags: trunk.v1
-|
-o  2 changea tags:
-|
-o  1 adda tags:
-|
-o  0 init projA tags:
-
-tip                                6:
-trunk.goodtag                      5:
-trunk.v1                           3:
-% convert without tags
-initializing destination A-notags-hg repository
-scanning source...
-sorting...
-converting...
-5 init projA
-4 adda
-3 changea
-2 changea2
-1 changea3
-0 changea
-tip
diff --git a/tests/test-convert-svn-tags b/tests/test-convert-svn-tags.t
old mode 100755
new mode 100644
rename from tests/test-convert-svn-tags
rename to tests/test-convert-svn-tags.t
--- a/tests/test-convert-svn-tags
+++ b/tests/test-convert-svn-tags.t
@@ -1,23 +1,67 @@
-#!/bin/sh
 
-"$TESTDIR/hghave" svn svn-bindings || exit 80
+  $ "$TESTDIR/hghave" svn svn-bindings || exit 80
 
-echo "[extensions]" >> $HGRCPATH
-echo "convert = " >> $HGRCPATH
-echo "graphlog =" >> $HGRCPATH
+  $ cat > $HGRCPATH <<EOF
+  > [extensions]
+  > convert = 
+  > graphlog =
+  > EOF
 
-svnadmin create svn-repo
-cat "$TESTDIR/svn/tags.svndump" | svnadmin load svn-repo > /dev/null
+  $ svnadmin create svn-repo
+  $ svnadmin load -q svn-repo < "$TESTDIR/svn/tags.svndump"
 
-echo % convert
-hg convert --datesort svn-repo A-hg
+Convert
+  $ hg convert --datesort svn-repo A-hg
+  initializing destination A-hg repository
+  scanning source...
+  sorting...
+  converting...
+  5 init projA
+  4 adda
+  3 changea
+  2 changea2
+  1 changea3
+  0 changea
+  updating tags
 
-cd A-hg
-hg glog --template '{rev} {desc|firstline} tags: {tags}\n'
-hg tags | sed 's/:.*/:/'
-cd ..
+  $ cd A-hg
+  $ hg glog --template '{rev} {desc|firstline} tags: {tags}\n'
+  o  6 update tags tags: tip
+  |
+  o  5 changea tags: trunk.goodtag
+  |
+  o  4 changea3 tags:
+  |
+  o  3 changea2 tags: trunk.v1
+  |
+  o  2 changea tags:
+  |
+  o  1 adda tags:
+  |
+  o  0 init projA tags:
+  
 
-echo % convert without tags
-hg convert --datesort --config convert.svn.tags= svn-repo A-notags-hg
-hg -R A-notags-hg tags -q
+  $ hg tags -q
+  tip
+  trunk.goodtag
+  trunk.v1
 
+  $ cd ..
+
+Convert without tags
+
+  $ hg convert --datesort --config convert.svn.tags= svn-repo A-notags-hg
+  initializing destination A-notags-hg repository
+  scanning source...
+  sorting...
+  converting...
+  5 init projA
+  4 adda
+  3 changea
+  2 changea2
+  1 changea3
+  0 changea
+
+  $ hg -R A-notags-hg tags -q
+  tip
+


More information about the Mercurial-devel mailing list