test-subrepo-svn.t
550 lines
| 13.0 KiB
| text/troff
|
Tads3Lexer
/ tests / test-subrepo-svn.t
Thomas Arendsen Hein
|
r15346 | $ "$TESTDIR/hghave" svn15 || exit 80 | ||
Martin Geisler
|
r11916 | |||
$ fix_path() | ||||
> { | ||||
> tr '\\' / | ||||
> } | ||||
SVN wants all paths to start with a slash. Unfortunately, Windows ones | ||||
don't. Handle that. | ||||
Matt Mackall
|
r12366 | $ escapedwd=`pwd | fix_path` | ||
Mads Kiilerich
|
r12404 | $ expr "$escapedwd" : '\/' > /dev/null || escapedwd="/$escapedwd" | ||
Martin Geisler
|
r11916 | $ escapedwd=`python -c "import urllib, sys; sys.stdout.write(urllib.quote(sys.argv[1]))" "$escapedwd"` | ||
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. | ||||
Patrick Mezard
|
r15607 | $ svn up -q | ||
Martin Geisler
|
r11916 | $ 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 | ||||
Patrick Mezard
|
r13015 | $ echo "s = [svn] $SVNREPO/src" >> .hgsub | ||
$ echo "subdir/s = [svn] $SVNREPO/src" >> .hgsub | ||||
Martin Geisler
|
r11916 | $ svn co --quiet "$SVNREPO"/src s | ||
Patrick Mezard
|
r13015 | $ mkdir subdir | ||
$ svn co --quiet "$SVNREPO"/src subdir/s | ||||
Martin Geisler
|
r11916 | $ hg add .hgsub | ||
$ hg ci -m1 | ||||
Matt Mackall
|
r12798 | make sure we avoid empty commits (issue2445) | ||
$ hg sum | ||||
parent: 1:* tip (glob) | ||||
1 | ||||
branch: default | ||||
commit: (clean) | ||||
update: (current) | ||||
$ hg ci -moops | ||||
nothing changed | ||||
[1] | ||||
Martin Geisler
|
r11916 | debugsub | ||
Matt Mackall
|
r12366 | $ hg debugsub | ||
Martin Geisler
|
r11916 | path s | ||
Mads Kiilerich
|
r12668 | source file://*/svn-repo/src (glob) | ||
Martin Geisler
|
r11916 | revision 2 | ||
Patrick Mezard
|
r13015 | path subdir/s | ||
source file://*/svn-repo/src (glob) | ||||
revision 2 | ||||
Martin Geisler
|
r11916 | |||
change file in svn and hg, commit | ||||
$ echo a >> a | ||||
$ echo alpha >> s/alpha | ||||
Matt Mackall
|
r12798 | $ hg sum | ||
parent: 1:* tip (glob) | ||||
1 | ||||
branch: default | ||||
commit: 1 modified, 1 subrepos | ||||
update: (current) | ||||
Patrick Mezard
|
r15607 | $ hg commit --subrepos -m 'Message!' | grep -v Updating | ||
Martin Geisler
|
r11916 | committing subrepository s | ||
Matt Mackall
|
r12377 | Sending*s/alpha (glob) | ||
Martin Geisler
|
r11916 | Transmitting file data . | ||
Committed revision 3. | ||||
Patrick Mezard
|
r15607 | Fetching external item into '*s/externals'* (glob) | ||
Martin Geisler
|
r11916 | External at revision 1. | ||
At revision 3. | ||||
Matt Mackall
|
r12366 | $ hg debugsub | ||
Martin Geisler
|
r11916 | path s | ||
Mads Kiilerich
|
r12668 | source file://*/svn-repo/src (glob) | ||
Martin Geisler
|
r11916 | revision 3 | ||
Patrick Mezard
|
r13015 | path subdir/s | ||
source file://*/svn-repo/src (glob) | ||||
revision 2 | ||||
Martin Geisler
|
r11916 | |||
Patrick Mezard
|
r13287 | add an unrelated revision in svn and update the subrepo to without | ||
bringing any changes. | ||||
Matt Mackall
|
r13410 | $ svn mkdir "$SVNREPO/unrelated" -m 'create unrelated' | ||
Patrick Mezard
|
r13287 | |||
Committed revision 4. | ||||
Patrick Mezard
|
r15607 | $ svn up -q s | ||
Patrick Mezard
|
r13287 | $ hg sum | ||
parent: 2:* tip (glob) | ||||
Message! | ||||
branch: default | ||||
commit: (clean) | ||||
update: (current) | ||||
Martin Geisler
|
r11916 | $ echo a > s/a | ||
should be empty despite change to s/a | ||||
$ hg st | ||||
add a commit from svn | ||||
$ cd "$WCROOT"/src | ||||
Patrick Mezard
|
r15607 | $ svn up -q | ||
Martin Geisler
|
r11916 | $ 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' | ||||
Patrick Mezard
|
r15607 | Sending *alpha (glob) | ||
Martin Geisler
|
r11916 | Transmitting file data . | ||
Patrick Mezard
|
r13287 | Committed revision 5. | ||
Martin Geisler
|
r11916 | $ cd ../../sub/t | ||
this commit from hg will fail | ||||
$ echo zzz >> s/alpha | ||||
Patrick Mezard
|
r15607 | $ (hg ci --subrepos -m 'amend alpha from hg' 2>&1; echo "[$?]") | grep -vi 'out of date' | ||
Martin Geisler
|
r11916 | committing subrepository s | ||
Patrick Mezard
|
r15607 | abort: svn:*Commit failed (details follow): (glob) | ||
Matt Mackall
|
r12366 | [255] | ||
Martin Geisler
|
r11916 | $ 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' | ||||
Patrick Mezard
|
r15607 | $ (hg ci --subrepos -m 'amend alpha from hg' 2>&1; echo "[$?]") | grep -vi 'out of date' | ||
Martin Geisler
|
r11916 | committing subrepository s | ||
Patrick Mezard
|
r15607 | abort: svn:*Commit failed (details follow): (glob) | ||
Matt Mackall
|
r12366 | [255] | ||
Martin Geisler
|
r11916 | $ svn revert -q s/alpha | ||
this commit fails because of externals changes | ||||
$ echo zzz > s/externals/other | ||||
Martin Geisler
|
r15321 | $ hg ci --subrepos -m 'amend externals from hg' | ||
Martin Geisler
|
r11916 | committing subrepository s | ||
abort: cannot commit svn externals | ||||
Matt Mackall
|
r12316 | [255] | ||
Patrick Mezard
|
r12209 | $ hg diff --subrepos -r 1:2 | grep -v diff | ||
--- a/.hgsubstate Thu Jan 01 00:00:00 1970 +0000 | ||||
+++ b/.hgsubstate Thu Jan 01 00:00:00 1970 +0000 | ||||
Patrick Mezard
|
r13015 | @@ -1,2 +1,2 @@ | ||
Patrick Mezard
|
r12209 | -2 s | ||
+3 s | ||||
Patrick Mezard
|
r13015 | 2 subdir/s | ||
Patrick Mezard
|
r12209 | --- a/a Thu Jan 01 00:00:00 1970 +0000 | ||
+++ b/a Thu Jan 01 00:00:00 1970 +0000 | ||||
@@ -1,1 +1,2 @@ | ||||
a | ||||
+a | ||||
Martin Geisler
|
r11916 | $ 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' | ||||
Martin Geisler
|
r15321 | $ hg ci --subrepos -m 'amend externals from hg' | ||
Martin Geisler
|
r11916 | committing subrepository s | ||
abort: cannot commit svn externals | ||||
Matt Mackall
|
r12316 | [255] | ||
Martin Geisler
|
r11916 | $ svn revert -q s/externals/other | ||
clone | ||||
$ cd .. | ||||
$ hg clone t tc | fix_path | ||||
updating to branch default | ||||
Matt Mackall
|
r13907 | A tc/s/alpha | ||
U tc/s | ||||
Patrick Mezard
|
r15607 | Fetching external item into 'tc/s/externals'* (glob) | ||
Matt Mackall
|
r13907 | A tc/s/externals/other | ||
Checked out external at revision 1. | ||||
Checked out revision 3. | ||||
Patrick Mezard
|
r13015 | A tc/subdir/s/alpha | ||
U tc/subdir/s | ||||
Patrick Mezard
|
r15607 | Fetching external item into 'tc/subdir/s/externals'* (glob) | ||
Patrick Mezard
|
r13015 | A tc/subdir/s/externals/other | ||
Checked out external at revision 1. | ||||
Checked out revision 2. | ||||
Martin Geisler
|
r11916 | 3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||
$ cd tc | ||||
debugsub in clone | ||||
Matt Mackall
|
r12366 | $ hg debugsub | ||
Martin Geisler
|
r11916 | path s | ||
Mads Kiilerich
|
r12668 | source file://*/svn-repo/src (glob) | ||
Martin Geisler
|
r11916 | revision 3 | ||
Patrick Mezard
|
r13015 | path subdir/s | ||
source file://*/svn-repo/src (glob) | ||||
revision 2 | ||||
Martin Geisler
|
r11916 | |||
verify subrepo is contained within the repo directory | ||||
$ python -c "import os.path; print os.path.exists('s')" | ||||
True | ||||
Ronny Pfannschmidt
|
r12930 | |||
update to nullrev (must delete the subrepo) | ||||
$ hg up null | ||||
0 files updated, 0 files merged, 3 files removed, 0 files unresolved | ||||
Patrick Mezard
|
r13015 | $ ls | ||
Erik Zielke
|
r13322 | |||
Check hg update --clean | ||||
$ cd $TESTTMP/sub/t | ||||
$ cd s | ||||
$ echo c0 > alpha | ||||
$ echo c1 > f1 | ||||
$ echo c1 > f2 | ||||
$ svn add f1 -q | ||||
Patrick Mezard
|
r15607 | $ svn status | sort | ||
Matt Mackall
|
r13410 | ? * a (glob) | ||
? * f2 (glob) | ||||
Patrick Mezard
|
r15607 | A * f1 (glob) | ||
Matt Mackall
|
r13410 | M * alpha (glob) | ||
Patrick Mezard
|
r15607 | Performing status on external item at 'externals'* (glob) | ||
X * externals (glob) | ||||
Patrick Mezard
|
r13332 | $ cd ../.. | ||
$ hg -R t update -C | ||||
Erik Zielke
|
r13322 | |||
Patrick Mezard
|
r15607 | Fetching external item into 't/s/externals'* (glob) | ||
Erik Zielke
|
r13322 | Checked out external at revision 1. | ||
Checked out revision 3. | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
Patrick Mezard
|
r13332 | $ cd t/s | ||
Erik Zielke
|
r13322 | $ svn status | ||
Matt Mackall
|
r13410 | ? * a (glob) | ||
X * externals (glob) | ||||
? * f1 (glob) | ||||
? * f2 (glob) | ||||
Erik Zielke
|
r13322 | |||
Patrick Mezard
|
r15607 | Performing status on external item at 'externals'* (glob) | ||
Erik Zielke
|
r13417 | |||
Sticky subrepositories, no changes | ||||
$ cd $TESTTMP/sub/t | ||||
$ hg id -n | ||||
2 | ||||
$ cd s | ||||
$ svnversion | ||||
3 | ||||
$ cd .. | ||||
$ hg update 1 | ||||
Patrick Mezard
|
r15607 | U *s/alpha (glob) | ||
Erik Zielke
|
r13417 | |||
Patrick Mezard
|
r15607 | Fetching external item into '*s/externals'* (glob) | ||
Erik Zielke
|
r13417 | Checked out external at revision 1. | ||
Checked out revision 2. | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg id -n | ||||
1 | ||||
$ cd s | ||||
$ svnversion | ||||
2 | ||||
$ cd .. | ||||
Sticky subrepositorys, file changes | ||||
$ touch s/f1 | ||||
$ cd s | ||||
$ svn add f1 | ||||
A f1 | ||||
$ cd .. | ||||
$ hg id -n | ||||
1 | ||||
$ cd s | ||||
$ svnversion | ||||
2M | ||||
$ cd .. | ||||
$ hg update tip | ||||
subrepository sources for s differ | ||||
use (l)ocal source (2) or (r)emote source (3)? | ||||
l | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg id -n | ||||
2+ | ||||
$ cd s | ||||
$ svnversion | ||||
2M | ||||
$ cd .. | ||||
$ hg update --clean tip | ||||
Patrick Mezard
|
r15607 | U *s/alpha (glob) | ||
Erik Zielke
|
r13417 | |||
Patrick Mezard
|
r15607 | Fetching external item into '*s/externals'* (glob) | ||
Erik Zielke
|
r13417 | Checked out external at revision 1. | ||
Checked out revision 3. | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
Sticky subrepository, revision updates | ||||
$ hg id -n | ||||
2 | ||||
$ cd s | ||||
$ svnversion | ||||
3 | ||||
$ cd .. | ||||
$ cd s | ||||
Patrick Mezard
|
r15607 | $ svn update -qr 1 | ||
Erik Zielke
|
r13417 | $ cd .. | ||
$ hg update 1 | ||||
subrepository sources for s differ (in checked out version) | ||||
use (l)ocal source (1) or (r)emote source (2)? | ||||
l | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg id -n | ||||
1+ | ||||
$ cd s | ||||
$ svnversion | ||||
1 | ||||
$ cd .. | ||||
Sticky subrepository, file changes and revision updates | ||||
$ touch s/f1 | ||||
$ cd s | ||||
$ svn add f1 | ||||
A f1 | ||||
$ svnversion | ||||
1M | ||||
$ cd .. | ||||
$ hg id -n | ||||
1+ | ||||
$ hg update tip | ||||
subrepository sources for s differ | ||||
use (l)ocal source (1) or (r)emote source (3)? | ||||
l | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg id -n | ||||
2 | ||||
$ cd s | ||||
$ svnversion | ||||
1M | ||||
$ cd .. | ||||
Sticky repository, update --clean | ||||
Patrick Mezard
|
r15607 | $ hg update --clean tip | grep -v s/externals/other | ||
U *s/alpha (glob) | ||||
U *s (glob) | ||||
Erik Zielke
|
r13417 | |||
Patrick Mezard
|
r15607 | Fetching external item into '*s/externals'* (glob) | ||
Erik Zielke
|
r13417 | Checked out external at revision 1. | ||
Checked out revision 3. | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg id -n | ||||
2 | ||||
$ cd s | ||||
$ svnversion | ||||
3 | ||||
$ cd .. | ||||
Test subrepo already at intended revision: | ||||
$ cd s | ||||
Patrick Mezard
|
r15607 | $ svn update -qr 2 | ||
Erik Zielke
|
r13417 | $ cd .. | ||
$ hg update 1 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg id -n | ||||
1+ | ||||
$ cd s | ||||
$ svnversion | ||||
2 | ||||
$ cd .. | ||||
Patrick Mezard
|
r14050 | |||
Test case where subversion would fail to update the subrepo because there | ||||
are unknown directories being replaced by tracked ones (happens with rebase). | ||||
$ cd $WCROOT/src | ||||
$ mkdir dir | ||||
$ echo epsilon.py > dir/epsilon.py | ||||
$ svn add dir | ||||
A dir | ||||
A dir/epsilon.py | ||||
$ svn ci -m 'Add dir/epsilon.py' | ||||
Patrick Mezard
|
r15607 | Adding *dir (glob) | ||
Adding *dir/epsilon.py (glob) | ||||
Patrick Mezard
|
r14050 | Transmitting file data . | ||
Committed revision 6. | ||||
$ cd ../.. | ||||
$ hg init rebaserepo | ||||
$ cd rebaserepo | ||||
$ svn co -r5 --quiet "$SVNREPO"/src s | ||||
$ echo "s = [svn] $SVNREPO/src" >> .hgsub | ||||
$ hg add .hgsub | ||||
$ hg ci -m addsub | ||||
$ echo a > a | ||||
$ hg ci -Am adda | ||||
adding a | ||||
$ hg up 0 | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
Patrick Mezard
|
r15607 | $ svn up -qr6 s | ||
Patrick Mezard
|
r14050 | $ hg ci -m updatesub | ||
created new head | ||||
$ echo pyc > s/dir/epsilon.pyc | ||||
$ hg up 1 | ||||
Patrick Mezard
|
r15607 | D *s/dir (glob) | ||
Patrick Mezard
|
r14050 | |||
Patrick Mezard
|
r15607 | Fetching external item into '*s/externals'* (glob) | ||
Patrick Mezard
|
r14050 | Checked out external at revision 1. | ||
Checked out revision 5. | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ if "$TESTDIR/hghave" -q svn15; then | ||||
> hg up 2 >/dev/null 2>&1 || echo update failed | ||||
> fi | ||||
Augie Fackler
|
r14664 | |||
Modify one of the externals to point to a different path so we can | ||||
test having obstructions when switching branches on checkout: | ||||
$ hg checkout tip | ||||
0 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ echo "obstruct = [svn] $SVNREPO/externals" >> .hgsub | ||||
$ svn co -r5 --quiet "$SVNREPO"/externals obstruct | ||||
Matt Mackall
|
r15372 | $ hg commit -m 'Start making obstructed working copy' | ||
Augie Fackler
|
r14664 | $ hg book other | ||
$ hg co -r 'p1(tip)' | ||||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ echo "obstruct = [svn] $SVNREPO/src" >> .hgsub | ||||
$ svn co -r5 --quiet "$SVNREPO"/src obstruct | ||||
$ hg commit -m 'Other branch which will be obstructed' | ||||
created new head | ||||
Switching back to the head where we have another path mapped to the | ||||
same subrepo should work if the subrepo is clean. | ||||
$ hg co other | ||||
Patrick Mezard
|
r15607 | A *obstruct/other (glob) | ||
Augie Fackler
|
r14664 | Checked out revision 1. | ||
2 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
This is surprising, but is also correct based on the current code: | ||||
$ echo "updating should (maybe) fail" > obstruct/other | ||||
$ hg co tip | ||||
abort: crosses branches (merge branches or use --clean to discard changes) | ||||
[255] | ||||
Eli Carter
|
r14820 | |||
Point to a Subversion branch which has since been deleted and recreated | ||||
First, create that condition in the repository. | ||||
Patrick Mezard
|
r15607 | $ hg ci --subrepos -m cleanup | grep -v Updating | ||
Eli Carter
|
r14820 | committing subrepository obstruct | ||
Sending obstruct/other | ||||
Transmitting file data . | ||||
Committed revision 7. | ||||
At revision 7. | ||||
$ svn mkdir -m "baseline" $SVNREPO/trunk | ||||
Committed revision 8. | ||||
$ svn copy -m "initial branch" $SVNREPO/trunk $SVNREPO/branch | ||||
Committed revision 9. | ||||
$ svn co --quiet "$SVNREPO"/branch tempwc | ||||
$ cd tempwc | ||||
$ echo "something old" > somethingold | ||||
$ svn add somethingold | ||||
A somethingold | ||||
$ svn ci -m 'Something old' | ||||
Adding somethingold | ||||
Transmitting file data . | ||||
Committed revision 10. | ||||
$ svn rm -m "remove branch" $SVNREPO/branch | ||||
Committed revision 11. | ||||
$ svn copy -m "recreate branch" $SVNREPO/trunk $SVNREPO/branch | ||||
Committed revision 12. | ||||
Patrick Mezard
|
r15607 | $ svn up -q | ||
Eli Carter
|
r14820 | $ echo "something new" > somethingnew | ||
$ svn add somethingnew | ||||
A somethingnew | ||||
$ svn ci -m 'Something new' | ||||
Adding somethingnew | ||||
Transmitting file data . | ||||
Committed revision 13. | ||||
$ cd .. | ||||
$ rm -rf tempwc | ||||
$ svn co "$SVNREPO/branch"@10 recreated | ||||
A recreated/somethingold | ||||
Checked out revision 10. | ||||
$ echo "recreated = [svn] $SVNREPO/branch" >> .hgsub | ||||
$ hg ci -m addsub | ||||
$ cd recreated | ||||
Patrick Mezard
|
r15607 | $ svn up -q | ||
Eli Carter
|
r14820 | $ cd .. | ||
$ hg ci -m updatesub | ||||
$ hg up -r-2 | ||||
Patrick Mezard
|
r15607 | D *recreated/somethingnew (glob) | ||
A *recreated/somethingold (glob) | ||||
Eli Carter
|
r14820 | Checked out revision 10. | ||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
Mads Kiilerich
|
r15282 | $ test -f recreated/somethingold | ||
Eli Carter
|
r14820 | |||
Patrick Mezard
|
r16450 | Test archive | ||
$ hg archive -S ../archive-all --debug | ||||
archiving: 0/2 files (0.00%) | ||||
archiving: .hgsub 1/2 files (50.00%) | ||||
archiving: .hgsubstate 2/2 files (100.00%) | ||||
archiving (obstruct): 0/1 files (0.00%) | ||||
archiving (obstruct): 1/1 files (100.00%) | ||||
archiving (s): 0/2 files (0.00%) | ||||
archiving (s): 1/2 files (50.00%) | ||||
archiving (s): 2/2 files (100.00%) | ||||
archiving (recreated): 0/1 files (0.00%) | ||||
archiving (recreated): 1/1 files (100.00%) | ||||