tests: unify test-subrepo-svn

This commit is contained in:
Martin Geisler 2010-08-17 16:53:03 +02:00
parent f78caca1fb
commit b6dcfa5955
3 changed files with 193 additions and 202 deletions

View File

@ -1,113 +0,0 @@
#!/bin/sh
"$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 /'
filterexternal="s|Fetching external item into '.*/s/externals'|Fetching external item into 's/externals'|g"
echo % create subversion repo
SVNREPO="file://$escapedwd/svn-repo"
WCROOT="`pwd`/svn-wc"
svnadmin create svn-repo
svn co "$SVNREPO" svn-wc
cd svn-wc
mkdir src
echo alpha > src/alpha
svn add src
mkdir externals
echo other > externals/other
svn add externals
svn ci -m 'Add alpha'
svn up
cat > extdef <<EOF
externals -r1 $SVNREPO/externals
EOF
svn propset -F extdef svn:externals src
svn ci -m 'Setting externals'
cd ..
echo % create hg repo
mkdir sub
cd sub
hg init t
cd t
echo % first revision, no sub
echo a > a
hg ci -Am0
echo % 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
echo % debugsub
hg debugsub | sed "$filterpath"
echo
echo % change file in svn and hg, commit
echo a >> a
echo alpha >> s/alpha
hg commit -m 'Message!' | sed "$filterexternal" \
| sed 's:Sending.*s/alpha:Sending s/alpha:g'
hg debugsub | sed "$filterpath"
echo
echo a > s/a
echo % should be empty despite change to s/a
hg st
echo
echo % add a commit from svn
cd "$WCROOT"/src
svn up
echo xyz >> alpha
svn propset svn:mime-type 'text/xml' alpha
svn ci -m 'amend a from svn'
cd ../../sub/t
echo % this commit from hg will fail
echo zzz >> s/alpha
hg ci -m 'amend alpha from hg' 2>&1 | sed "$filteroutofdate"
svn revert -q s/alpha
echo % this commit fails because of meta changes
svn propset svn:mime-type 'text/html' s/alpha
hg ci -m 'amend alpha from hg' 2>&1 | sed "$filteroutofdate"
svn revert -q s/alpha
echo % this commit fails because of externals changes
echo zzz > s/externals/other
hg ci -m 'amend externals from hg'
svn revert -q s/externals/other
echo % this commit fails because of externals meta changes
svn propset svn:mime-type 'text/html' s/externals/other
hg ci -m 'amend externals from hg'
svn revert -q s/externals/other
echo
echo % clone
cd ..
hg clone t tc | fix_path
cd tc
echo % debugsub in clone
hg debugsub | sed "$filterpath"
echo % verify subrepo is contained within the repo directory
python -c "import os.path; print os.path.exists('s')"

View File

@ -1,89 +0,0 @@
% create subversion repo
Checked out revision 0.
A src
A src/alpha
A externals
A externals/other
Adding externals
Adding externals/other
Adding src
Adding src/alpha
Transmitting file data ..
Committed revision 1.
At revision 1.
property 'svn:externals' set on 'src'
Sending src
Committed revision 2.
% create hg repo
% first revision, no sub
adding a
% add first svn sub with leading whitespaces
committing subrepository s
% debugsub
path s
source file:///root/svn-repo/src
revision 2
% change file in svn and hg, commit
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.
path s
source file:///root/svn-repo/src
revision 3
% should be empty despite change to s/a
% add a commit from svn
U alpha
Fetching external item into 'externals'
A externals/other
Updated external to revision 1.
Updated to revision 3.
property 'svn:mime-type' set on 'alpha'
Sending src/alpha
Transmitting file data .
Committed revision 4.
% this commit from hg will fail
committing subrepository s
abort: svn: Commit failed (details follow):
svn: File '/src/alpha' is out of date
% this commit fails because of meta changes
property 'svn:mime-type' set on 's/alpha'
committing subrepository s
abort: svn: Commit failed (details follow):
svn: File '/src/alpha' is out of date
% this commit fails because of externals changes
committing subrepository s
abort: cannot commit svn externals
% this commit fails because of externals meta changes
property 'svn:mime-type' set on 's/externals/other'
committing subrepository s
abort: cannot commit svn externals
% clone
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
% debugsub in clone
path s
source file:///root/svn-repo/src
revision 3
% verify subrepo is contained within the repo directory
True

193
tests/test-subrepo-svn.t Normal file
View File

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