--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-svn-sink.t Tue Sep 21 18:40:33 2010 +0200
@@ -0,0 +1,548 @@
+
+ $ "$TESTDIR/hghave" svn svn-bindings no-outer-repo || exit 80
+
+ $ 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="'
+ > )
+ > }
+
+ $ cat > $HGRCPATH <<EOF
+ > [extensions]
+ > convert =
+ > graphlog =
+ > EOF
+
+ $ 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
+ $ hg --cwd a ci -d '0 0' -A -m 'add a file'
+ adding a
+ adding d1/d2/b
+ adding link
+
+Modify
+
+ $ "$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 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
+
+Rename
+
+ $ hg --cwd a mv a b
+ $ hg --cwd a mv link newlink
+
+ $ hg --cwd a ci -d '2 0' -m 'rename a file'
+ $ hg --cwd a tip -q
+ 2:a67e26ccec09
+
+ $ 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
+
+Copy
+
+ $ hg --cwd a cp b c
+
+ $ hg --cwd a ci -d '3 0' -m 'copy a file'
+ $ hg --cwd a tip -q
+ 3:0cf087b9ab02
+
+ $ 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
+
+ $ 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
+
+ $ 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
+
+Exectutable
+
+ $ chmod +x a/c
+ $ hg --cwd a ci -d '5 0' -m 'make a file executable'
+ $ hg --cwd a tip -q
+ 5:31093672760b
+
+ $ 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
+
+Executable in new directory
+
+ $ rm -rf a a-hg a-hg-wc
+ $ hg init a
+
+ $ 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
+
+ $ 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
+
+Copy to new directory
+
+ $ 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 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>
+
+Branchy history
+
+ $ hg init b
+ $ echo base > b/b
+ $ hg --cwd b ci -d '0 0' -Ambase
+ adding b
+
+ $ "$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
+
+ $ "$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
+
+ $ hg --cwd b up 0
+ 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
+
+ $ "$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