tests/test-subrepo-svn.t
changeset 11916 d1ea16ca6520
parent 11142 0bf79efeaa20
child 12209 affec9fb56ef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-subrepo-svn.t	Tue Aug 17 16:53:03 2010 +0200
@@ -0,0 +1,193 @@
+  $ "$TESTDIR/hghave" svn || exit 80
+
+  $ fix_path()
+  > {
+  >     tr '\\' /
+  > }
+
+  $ escapedwd=`pwd | fix_path`
+
+SVN wants all paths to start with a slash. Unfortunately, Windows ones
+don't. Handle that.
+
+  $ expr "$escapedwd" : "\/" > /dev/null
+  $ if [ $? -ne 0 ]; then
+  >     escapedwd="/$escapedwd"
+  > fi
+  $ escapedwd=`python -c "import urllib, sys; sys.stdout.write(urllib.quote(sys.argv[1]))" "$escapedwd"`
+  $ filterpath="s|$escapedwd|/root|"
+  $ filteroutofdate='s/ in transaction.*/ is out of date/;s/Out of date: /File /'
+
+create subversion repo
+
+  $ SVNREPO="file://$escapedwd/svn-repo"
+  $ WCROOT="`pwd`/svn-wc"
+  $ svnadmin create svn-repo
+  $ svn co "$SVNREPO" svn-wc
+  Checked out revision 0.
+  $ cd svn-wc
+  $ mkdir src
+  $ echo alpha > src/alpha
+  $ svn add src
+  A         src
+  A         src/alpha
+  $ mkdir externals
+  $ echo other > externals/other
+  $ svn add externals
+  A         externals
+  A         externals/other
+  $ svn ci -m 'Add alpha'
+  Adding         externals
+  Adding         externals/other
+  Adding         src
+  Adding         src/alpha
+  Transmitting file data ..
+  Committed revision 1.
+  $ svn up
+  At revision 1.
+  $ echo "externals -r1 $SVNREPO/externals" > extdef
+  $ svn propset -F extdef svn:externals src
+  property 'svn:externals' set on 'src'
+  $ svn ci -m 'Setting externals'
+  Sending        src
+  
+  Committed revision 2.
+  $ cd ..
+
+create hg repo
+
+  $ mkdir sub
+  $ cd sub
+  $ hg init t
+  $ cd t
+
+first revision, no sub
+
+  $ echo a > a
+  $ hg ci -Am0
+  adding a
+
+add first svn sub with leading whitespaces
+
+  $ echo "s = [svn]       $SVNREPO/src" >> .hgsub
+  $ svn co --quiet "$SVNREPO"/src s
+  $ hg add .hgsub
+  $ hg ci -m1
+  committing subrepository s
+
+debugsub
+
+  $ hg debugsub | sed "$filterpath"
+  path s
+   source   file:///root/svn-repo/src
+   revision 2
+
+change file in svn and hg, commit
+
+  $ echo a >> a
+  $ echo alpha >> s/alpha
+  $ hg commit -m 'Message!' \
+  >     | sed 's:Sending.*s/alpha:Sending        s/alpha:g'
+  committing subrepository s
+  Sending        s/alpha
+  Transmitting file data .
+  Committed revision 3.
+  
+  Fetching external item into '.*/s/externals'
+  External at revision 1.
+  
+  At revision 3.
+  $ hg debugsub | sed "$filterpath"
+  path s
+   source   file:///root/svn-repo/src
+   revision 3
+
+  $ echo a > s/a
+
+should be empty despite change to s/a
+
+  $ hg st
+
+add a commit from svn
+
+  $ cd "$WCROOT"/src
+  $ svn up
+  U    alpha
+  
+  Fetching external item into 'externals'
+  A    externals/other
+  Updated external to revision 1.
+  
+  Updated to revision 3.
+  $ echo xyz >> alpha
+  $ svn propset svn:mime-type 'text/xml' alpha
+  property 'svn:mime-type' set on 'alpha'
+  $ svn ci -m 'amend a from svn'
+  Sending        src/alpha
+  Transmitting file data .
+  Committed revision 4.
+  $ cd ../../sub/t
+
+this commit from hg will fail
+
+  $ echo zzz >> s/alpha
+  $ hg ci -m 'amend alpha from hg' 2>&1 | sed "$filteroutofdate"
+  committing subrepository s
+  abort: svn: Commit failed (details follow):
+  svn: File '/src/alpha' is out of date
+  $ svn revert -q s/alpha
+
+this commit fails because of meta changes
+
+  $ svn propset svn:mime-type 'text/html' s/alpha
+  property 'svn:mime-type' set on 's/alpha'
+  $ hg ci -m 'amend alpha from hg' 2>&1 | sed "$filteroutofdate"
+  committing subrepository s
+  abort: svn: Commit failed (details follow):
+  svn: File '/src/alpha' is out of date
+  $ svn revert -q s/alpha
+
+this commit fails because of externals changes
+
+  $ echo zzz > s/externals/other
+  $ hg ci -m 'amend externals from hg'
+  committing subrepository s
+  abort: cannot commit svn externals
+  $ svn revert -q s/externals/other
+
+this commit fails because of externals meta changes
+
+  $ svn propset svn:mime-type 'text/html' s/externals/other
+  property 'svn:mime-type' set on 's/externals/other'
+  $ hg ci -m 'amend externals from hg'
+  committing subrepository s
+  abort: cannot commit svn externals
+  $ svn revert -q s/externals/other
+
+clone
+
+  $ cd ..
+  $ hg clone t tc | fix_path
+  updating to branch default
+  A    tc/s/alpha
+   U   tc/s
+  
+  Fetching external item into 'tc/s/externals'
+  A    tc/s/externals/other
+  Checked out external at revision 1.
+  
+  Checked out revision 3.
+  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ cd tc
+
+debugsub in clone
+
+  $ hg debugsub | sed "$filterpath"
+  path s
+   source   file:///root/svn-repo/src
+   revision 3
+
+verify subrepo is contained within the repo directory
+
+  $ python -c "import os.path; print os.path.exists('s')"
+  True