view tests/test-convert-svn-sink.t @ 14751:712954a67be3 stable

cmdserver: assign repo.baseui before running commands There are places in the code that use localrepository.baseui (see hg.remoteui), we need the ui descriptors (and possibly other things) to be set correctly on it, so output written to the remoteui descriptors ends up at the right place. Before this change, tests such as 'test-bookmarks-pushpull.t' didn't work.
author Idan Kamara <idankk86@gmail.com>
date Fri, 24 Jun 2011 19:44:17 +0300
parents 5f69af0d2fb3
children 1e9451476bf8
line wrap: on
line source


  $ "$TESTDIR/hghave" svn 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