--- /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