test-convert-svn-source.t
324 lines
| 9.2 KiB
| text/troff
|
Tads3Lexer
/ tests / test-convert-svn-source.t
|
r22046 | #require svn svn-bindings | ||
|
r12370 | |||
|
r28469 | $ filter_svn_output () { | ||
|
r28533 | > egrep -v 'Committing|Updating|(^$)' | sed -e 's/done$//' || true | ||
|
r28469 | > } | ||
|
r13519 | $ cat >> $HGRCPATH <<EOF | ||
|
r12370 | > [extensions] | ||
|
r17347 | > convert = | ||
|
r13494 | > [convert] | ||
> svn.trunk = mytrunk | ||||
|
r12370 | > EOF | ||
$ svnadmin create svn-repo | ||||
|
r17033 | $ SVNREPOPATH=`pwd`/svn-repo | ||
#if windows | ||||
|
r22947 | $ SVNREPOURL=file:///`$PYTHON -c "import urllib, sys; sys.stdout.write(urllib.quote(sys.argv[1]))" "$SVNREPOPATH"` | ||
|
r17033 | #else | ||
|
r22947 | $ SVNREPOURL=file://`$PYTHON -c "import urllib, sys; sys.stdout.write(urllib.quote(sys.argv[1]))" "$SVNREPOPATH"` | ||
|
r17033 | #endif | ||
|
r19122 | $ INVALIDREVISIONID=svn:x2147622-4a9f-4db4-a8d3-13562ff547b2/proj%20B/mytrunk@1 | ||
$ VALIDREVISIONID=svn:a2147622-4a9f-4db4-a8d3-13562ff547b2/proj%20B/mytrunk/mytrunk@1 | ||||
|
r12370 | |||
Now test that it works with trunk/tags layout, but no branches yet. | ||||
Initial svn import | ||||
$ mkdir projB | ||||
$ cd projB | ||||
|
r13494 | $ mkdir mytrunk | ||
|
r12370 | $ mkdir tags | ||
$ cd .. | ||||
|
r28469 | $ svn import -m "init projB" projB "$SVNREPOURL/proj%20B" | filter_svn_output | sort | ||
|
r35394 | Adding projB/mytrunk | ||
Adding projB/tags | ||||
|
r12370 | Committed revision 1. | ||
Update svn repository | ||||
|
r28469 | $ svn co "$SVNREPOURL/proj%20B/mytrunk" B | filter_svn_output | ||
|
r12370 | Checked out revision 1. | ||
$ cd B | ||||
$ echo hello > 'letter .txt' | ||||
|
r28469 | $ svn add 'letter .txt' | filter_svn_output | ||
|
r12370 | A letter .txt | ||
|
r28469 | $ svn ci -m hello | filter_svn_output | ||
|
r12370 | Adding letter .txt | ||
Transmitting file data . | ||||
Committed revision 2. | ||||
|
r25472 | $ svn-safe-append.py world 'letter .txt' | ||
|
r28469 | $ svn ci -m world | filter_svn_output | ||
|
r12370 | Sending letter .txt | ||
Transmitting file data . | ||||
Committed revision 3. | ||||
|
r28469 | $ svn copy -m "tag v0.1" "$SVNREPOURL/proj%20B/mytrunk" "$SVNREPOURL/proj%20B/tags/v0.1" | filter_svn_output | ||
|
r12370 | Committed revision 4. | ||
|
r25472 | $ svn-safe-append.py 'nice day today!' 'letter .txt' | ||
|
r28469 | $ svn ci -m "nice day" | filter_svn_output | ||
|
r12370 | Sending letter .txt | ||
Transmitting file data . | ||||
Committed revision 5. | ||||
$ cd .. | ||||
|
r17974 | Convert to hg once and also test localtimezone option | ||
NOTE: This doesn't check all time zones -- it merely determines that | ||||
the configuration option is taking effect. | ||||
|
r12370 | |||
|
r17974 | An arbitrary (U.S.) time zone is used here. TZ=US/Hawaii is selected | ||
since it does not use DST (unlike other U.S. time zones) and is always | ||||
a fixed difference from UTC. | ||||
$ TZ=US/Hawaii hg convert --config convert.localtimezone=True "$SVNREPOURL/proj%20B" B-hg | ||||
|
r12370 | initializing destination B-hg repository | ||
scanning source... | ||||
sorting... | ||||
converting... | ||||
3 init projB | ||||
2 hello | ||||
1 world | ||||
0 nice day | ||||
updating tags | ||||
Update svn repository again | ||||
$ cd B | ||||
|
r25472 | $ svn-safe-append.py "see second letter" 'letter .txt' | ||
|
r12370 | $ echo "nice to meet you" > letter2.txt | ||
|
r28469 | $ svn add letter2.txt | filter_svn_output | ||
|
r12370 | A letter2.txt | ||
|
r28469 | $ svn ci -m "second letter" | filter_svn_output | ||
|
r12370 | Sending letter .txt | ||
Adding letter2.txt | ||||
Transmitting file data .. | ||||
Committed revision 6. | ||||
|
r28469 | $ svn copy -m "tag v0.2" "$SVNREPOURL/proj%20B/mytrunk" "$SVNREPOURL/proj%20B/tags/v0.2" | filter_svn_output | ||
|
r12370 | Committed revision 7. | ||
|
r25472 | $ svn-safe-append.py "blah-blah-blah" letter2.txt | ||
|
r28469 | $ svn ci -m "work in progress" | filter_svn_output | ||
|
r12370 | Sending letter2.txt | ||
Transmitting file data . | ||||
Committed revision 8. | ||||
$ cd .. | ||||
|
r17033 | $ hg convert -s svn "$SVNREPOURL/proj%20B/non-existent-path" dest | ||
|
r14152 | initializing destination dest repository | ||
abort: no revision found in module /proj B/non-existent-path | ||||
[255] | ||||
|
r12370 | ######################################## | ||
Test incremental conversion | ||||
|
r17974 | $ TZ=US/Hawaii hg convert --config convert.localtimezone=True "$SVNREPOURL/proj%20B" B-hg | ||
|
r12370 | scanning source... | ||
sorting... | ||||
converting... | ||||
1 second letter | ||||
0 work in progress | ||||
updating tags | ||||
$ cd B-hg | ||||
|
r20117 | $ hg log -G --template '{rev} {desc|firstline} date: {date|date} files: {files}\n' | ||
|
r17974 | o 7 update tags date: * +0000 files: .hgtags (glob) | ||
|
r12370 | | | ||
|
r17974 | o 6 work in progress date: * -1000 files: letter2.txt (glob) | ||
|
r12370 | | | ||
|
r17974 | o 5 second letter date: * -1000 files: letter .txt letter2.txt (glob) | ||
|
r12370 | | | ||
|
r17974 | o 4 update tags date: * +0000 files: .hgtags (glob) | ||
|
r12370 | | | ||
|
r17974 | o 3 nice day date: * -1000 files: letter .txt (glob) | ||
|
r12370 | | | ||
|
r17974 | o 2 world date: * -1000 files: letter .txt (glob) | ||
|
r12370 | | | ||
|
r17974 | o 1 hello date: * -1000 files: letter .txt (glob) | ||
|
r12370 | | | ||
|
r17974 | o 0 init projB date: * -1000 files: (glob) | ||
|
r12370 | |||
$ hg tags -q | ||||
tip | ||||
v0.2 | ||||
v0.1 | ||||
$ cd .. | ||||
Test filemap | ||||
$ echo 'include letter2.txt' > filemap | ||||
|
r17033 | $ hg convert --filemap filemap "$SVNREPOURL/proj%20B/mytrunk" fmap | ||
|
r12370 | initializing destination fmap repository | ||
scanning source... | ||||
sorting... | ||||
converting... | ||||
5 init projB | ||||
4 hello | ||||
3 world | ||||
2 nice day | ||||
1 second letter | ||||
0 work in progress | ||||
|
r13494 | $ hg -R fmap branch -q | ||
default | ||||
|
r20117 | $ hg log -G -R fmap --template '{rev} {desc|firstline} files: {files}\n' | ||
|
r12370 | o 1 work in progress files: letter2.txt | ||
| | ||||
o 0 second letter files: letter2.txt | ||||
|
r22300 | Convert with --full adds and removes files that didn't change | ||
$ cd B | ||||
$ echo >> "letter .txt" | ||||
|
r28469 | $ svn ci -m 'nothing' | filter_svn_output | ||
|
r22300 | Sending letter .txt | ||
Transmitting file data . | ||||
Committed revision 9. | ||||
$ cd .. | ||||
$ echo 'rename letter2.txt letter3.txt' > filemap | ||||
$ hg convert --filemap filemap --full "$SVNREPOURL/proj%20B/mytrunk" fmap | ||||
scanning source... | ||||
sorting... | ||||
converting... | ||||
0 nothing | ||||
$ hg -R fmap st --change tip | ||||
A letter .txt | ||||
A letter3.txt | ||||
R letter2.txt | ||||
|
r19122 | test invalid splicemap1 | ||
$ cat > splicemap <<EOF | ||||
> $INVALIDREVISIONID $VALIDREVISIONID | ||||
> EOF | ||||
$ hg convert --splicemap splicemap "$SVNREPOURL/proj%20B/mytrunk" smap | ||||
initializing destination smap repository | ||||
abort: splicemap entry svn:x2147622-4a9f-4db4-a8d3-13562ff547b2/proj%20B/mytrunk@1 is not a valid revision identifier | ||||
[255] | ||||
|
r12370 | |||
Test stop revision | ||||
|
r17033 | $ hg convert --rev 1 "$SVNREPOURL/proj%20B/mytrunk" stoprev | ||
|
r12370 | initializing destination stoprev repository | ||
scanning source... | ||||
sorting... | ||||
converting... | ||||
0 init projB | ||||
|
r13494 | $ hg -R stoprev branch -q | ||
default | ||||
|
r12370 | |||
Check convert_revision extra-records. | ||||
This is also the only place testing more than one extra field in a revision. | ||||
$ cd stoprev | ||||
$ hg tip --debug | grep extra | ||||
extra: branch=default | ||||
|
r13494 | extra: convert_revision=svn:........-....-....-....-............/proj B/mytrunk@1 (re) | ||
|
r12370 | $ cd .. | ||
|
r16466 | |||
|
r20420 | Test converting empty heads (issue3347). | ||
Also tests getting logs directly without debugsvnlog. | ||||
|
r16466 | |||
$ svnadmin create svn-empty | ||||
$ svnadmin load -q svn-empty < "$TESTDIR/svn/empty.svndump" | ||||
|
r20420 | $ hg --config convert.svn.trunk= --config convert.svn.debugsvnlog=0 convert svn-empty | ||
|
r16466 | assuming destination svn-empty-hg | ||
initializing destination svn-empty-hg repository | ||||
scanning source... | ||||
sorting... | ||||
converting... | ||||
1 init projA | ||||
0 adddir | ||||
|
r17033 | $ hg --config convert.svn.trunk= convert "$SVNREPOURL/../svn-empty/trunk" | ||
|
r16466 | assuming destination trunk-hg | ||
initializing destination trunk-hg repository | ||||
scanning source... | ||||
sorting... | ||||
converting... | ||||
1 init projA | ||||
0 adddir | ||||
|
r23583 | |||
Test that a too-new repository format is properly rejected: | ||||
$ mv svn-empty/format format | ||||
$ echo 999 > svn-empty/format | ||||
It's important that this command explicitly specify svn, otherwise it | ||||
can have surprising side effects (like falling back to a perforce | ||||
depot that can be seen from the test environment and slurping from that.) | ||||
$ hg convert --source-type svn svn-empty this-will-fail | ||||
initializing destination this-will-fail repository | ||||
file:/*/$TESTTMP/svn-empty does not look like a Subversion repository to libsvn version 1.*.* (glob) | ||||
abort: svn-empty: missing or unsupported repository | ||||
[255] | ||||
$ mv format svn-empty/format | ||||
|
r35694 | |||
enable svn subrepos | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [subrepos] | ||||
> svn:allowed = true | ||||
> EOF | ||||
try converting when we have an svn subrepo and a merge in hg superrepo (issue5657) | ||||
$ cd "$TESTTMP" | ||||
$ hg init withmerge | ||||
$ cd withmerge | ||||
$ echo "subrepo = [svn]$SVNREPOURL" >.hgsub | ||||
$ hg add .hgsub | ||||
|
r35711 | $ svn checkout "$SVNREPOURL" subrepo | sort | ||
|
r35694 | A subrepo/proj B | ||
A subrepo/proj B/mytrunk | ||||
A subrepo/proj B/mytrunk/letter .txt | ||||
A subrepo/proj B/mytrunk/letter2.txt | ||||
A subrepo/proj B/tags | ||||
A subrepo/proj B/tags/v0.1 | ||||
A subrepo/proj B/tags/v0.1/letter .txt | ||||
A subrepo/proj B/tags/v0.2 | ||||
A subrepo/proj B/tags/v0.2/letter .txt | ||||
A subrepo/proj B/tags/v0.2/letter2.txt | ||||
Checked out revision 9. | ||||
$ hg ci -m "Adding svn subrepo" | ||||
$ touch file1.txt | ||||
$ hg add file1.txt | ||||
$ hg ci -m "Adding file1" | ||||
$ hg up 0 | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ touch file2.txt | ||||
$ hg add file2.txt | ||||
$ hg ci -m "Adding file2" | ||||
created new head | ||||
$ hg merge 1 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
(branch merge, don't forget to commit) | ||||
$ hg ci -m "merged" | ||||
$ cd .. | ||||
$ hg --config extensions.convert= convert withmerge withmerge-converted | ||||
initializing destination withmerge-converted repository | ||||
scanning source... | ||||
sorting... | ||||
converting... | ||||
3 Adding svn subrepo | ||||
2 Adding file1 | ||||
1 Adding file2 | ||||
0 merged | ||||
$ cd withmerge-converted | ||||
|
r35711 | $ hg up | sort | ||
4 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
|
r35694 | A subrepo/proj B | ||
A subrepo/proj B/mytrunk | ||||
A subrepo/proj B/mytrunk/letter .txt | ||||
A subrepo/proj B/mytrunk/letter2.txt | ||||
A subrepo/proj B/tags | ||||
A subrepo/proj B/tags/v0.1 | ||||
A subrepo/proj B/tags/v0.1/letter .txt | ||||
A subrepo/proj B/tags/v0.2 | ||||
A subrepo/proj B/tags/v0.2/letter .txt | ||||
A subrepo/proj B/tags/v0.2/letter2.txt | ||||
Checked out revision 9. | ||||
$ ls | ||||
file1.txt | ||||
file2.txt | ||||
subrepo | ||||