tests/test-convert-svn-sink.t
changeset 12370 f98010f57a5e
parent 12343 28642f7fc2cf
child 13519 43b3b761d9d1
--- /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