test-subrepo-deep-nested-change.t
547 lines
| 15.3 KiB
| text/troff
|
Tads3Lexer
/ tests / test-subrepo-deep-nested-change.t
|
r11913 | Preparing the subrepository 'sub2' | ||
$ hg init sub2 | ||||
$ echo sub2 > sub2/sub2 | ||||
$ hg add -R sub2 | ||||
|
r15447 | adding sub2/sub2 (glob) | ||
|
r11913 | $ hg commit -R sub2 -m "sub2 import" | ||
Preparing the 'sub1' repo which depends on the subrepo 'sub2' | ||||
$ hg init sub1 | ||||
$ echo sub1 > sub1/sub1 | ||||
$ echo "sub2 = ../sub2" > sub1/.hgsub | ||||
|
r12107 | $ hg clone sub2 sub1/sub2 | ||
|
r11913 | updating to branch default | ||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ hg add -R sub1 | ||||
|
r15447 | adding sub1/.hgsub (glob) | ||
adding sub1/sub1 (glob) | ||||
|
r11913 | $ hg commit -R sub1 -m "sub1 import" | ||
Preparing the 'main' repo which depends on the subrepo 'sub1' | ||||
$ hg init main | ||||
$ echo main > main/main | ||||
$ echo "sub1 = ../sub1" > main/.hgsub | ||||
|
r12107 | $ hg clone sub1 main/sub1 | ||
|
r11913 | updating to branch default | ||
|
r14281 | cloning subrepo sub2 from $TESTTMP/sub2 | ||
|
r11913 | 3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||
$ hg add -R main | ||||
|
r15447 | adding main/.hgsub (glob) | ||
adding main/main (glob) | ||||
|
r11913 | $ hg commit -R main -m "main import" | ||
Cleaning both repositories, just as a clone -U | ||||
$ hg up -C -R sub2 null | ||||
0 files updated, 0 files merged, 1 files removed, 0 files unresolved | ||||
$ hg up -C -R sub1 null | ||||
0 files updated, 0 files merged, 3 files removed, 0 files unresolved | ||||
$ hg up -C -R main null | ||||
0 files updated, 0 files merged, 3 files removed, 0 files unresolved | ||||
$ rm -rf main/sub1 | ||||
$ rm -rf sub1/sub2 | ||||
Clone main | ||||
|
r24029 | $ hg --config extensions.largefiles= clone main cloned | ||
|
r11913 | updating to branch default | ||
|
r14281 | cloning subrepo sub1 from $TESTTMP/sub1 | ||
|
r15447 | cloning subrepo sub1/sub2 from $TESTTMP/sub2 (glob) | ||
|
r11913 | 3 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||
|
r24029 | Largefiles is NOT enabled in the clone if the source repo doesn't require it | ||
$ cat cloned/.hg/hgrc | ||||
# example repository config (see "hg help config" for more info) | ||||
[paths] | ||||
default = $TESTTMP/main (glob) | ||||
# path aliases to other clones of this repo in URLs or filesystem paths | ||||
# (see "hg help config.paths" for more info) | ||||
# | ||||
# default-push = ssh://jdoe@example.net/hg/jdoes-fork | ||||
# my-fork = ssh://jdoe@example.net/hg/jdoes-fork | ||||
# my-clone = /home/jdoe/jdoes-clone | ||||
[ui] | ||||
# name and email (local to this repository, optional), e.g. | ||||
# username = Jane Doe <jdoe@example.com> | ||||
|
r11913 | Checking cloned repo ids | ||
$ printf "cloned " ; hg id -R cloned | ||||
cloned 7f491f53a367 tip | ||||
$ printf "cloned/sub1 " ; hg id -R cloned/sub1 | ||||
cloned/sub1 fc3b4ce2696f tip | ||||
$ printf "cloned/sub1/sub2 " ; hg id -R cloned/sub1/sub2 | ||||
cloned/sub1/sub2 c57a0840e3ba tip | ||||
debugsub output for main and sub1 | ||||
$ hg debugsub -R cloned | ||||
path sub1 | ||||
source ../sub1 | ||||
revision fc3b4ce2696f7741438c79207583768f2ce6b0dd | ||||
$ hg debugsub -R cloned/sub1 | ||||
path sub2 | ||||
source ../sub2 | ||||
revision c57a0840e3badd667ef3c3ef65471609acb2ba3c | ||||
Modifying deeply nested 'sub2' | ||||
$ echo modified > cloned/sub1/sub2/sub2 | ||||
|
r15321 | $ hg commit --subrepos -m "deep nested modif should trigger a commit" -R cloned | ||
|
r11913 | committing subrepository sub1 | ||
|
r15447 | committing subrepository sub1/sub2 (glob) | ||
|
r11913 | |||
Checking modified node ids | ||||
$ printf "cloned " ; hg id -R cloned | ||||
cloned ffe6649062fe tip | ||||
$ printf "cloned/sub1 " ; hg id -R cloned/sub1 | ||||
cloned/sub1 2ecb03bf44a9 tip | ||||
$ printf "cloned/sub1/sub2 " ; hg id -R cloned/sub1/sub2 | ||||
cloned/sub1/sub2 53dd3430bcaf tip | ||||
debugsub output for main and sub1 | ||||
$ hg debugsub -R cloned | ||||
path sub1 | ||||
source ../sub1 | ||||
revision 2ecb03bf44a94e749e8669481dd9069526ce7cb9 | ||||
$ hg debugsub -R cloned/sub1 | ||||
path sub2 | ||||
source ../sub2 | ||||
revision 53dd3430bcaf5ab4a7c48262bcad6d441f510487 | ||||
|
r17105 | |||
|
r17108 | Check that deep archiving works | ||
|
r17346 | |||
|
r17108 | $ cd cloned | ||
$ echo 'test' > sub1/sub2/test.txt | ||||
$ hg --config extensions.largefiles=! add sub1/sub2/test.txt | ||||
$ mkdir sub1/sub2/folder | ||||
$ echo 'subfolder' > sub1/sub2/folder/test.txt | ||||
|
r23537 | $ hg ci -ASm "add test.txt" | ||
|
r23686 | adding sub1/sub2/folder/test.txt | ||
|
r17108 | committing subrepository sub1 | ||
|
r17112 | committing subrepository sub1/sub2 (glob) | ||
|
r23325 | |||
.. but first take a detour through some deep removal testing | ||||
|
r23327 | $ hg remove -S -I 're:.*.txt' . | ||
|
r23325 | removing sub1/sub2/folder/test.txt (glob) | ||
removing sub1/sub2/test.txt (glob) | ||||
$ hg status -S | ||||
R sub1/sub2/folder/test.txt | ||||
R sub1/sub2/test.txt | ||||
$ hg update -Cq | ||||
|
r23326 | $ hg remove -I 're:.*.txt' sub1 | ||
$ hg status -S | ||||
$ hg remove sub1/sub2/folder/test.txt | ||||
$ hg remove sub1/.hgsubstate | ||||
|
r24645 | $ mv sub1/.hgsub sub1/x.hgsub | ||
|
r23326 | $ hg status -S | ||
|
r24645 | warning: subrepo spec file 'sub1/.hgsub' not found (glob) | ||
|
r23326 | R sub1/.hgsubstate | ||
R sub1/sub2/folder/test.txt | ||||
|
r24645 | ! sub1/.hgsub | ||
? sub1/x.hgsub | ||||
$ mv sub1/x.hgsub sub1/.hgsub | ||||
|
r23326 | $ hg update -Cq | ||
|
r23538 | $ touch sub1/foo | ||
$ hg forget sub1/sub2/folder/test.txt | ||||
$ rm sub1/sub2/test.txt | ||||
Test relative path printing + subrepos | ||||
$ mkdir -p foo/bar | ||||
$ cd foo | ||||
$ touch bar/abc | ||||
$ hg addremove -S .. | ||||
adding ../sub1/sub2/folder/test.txt (glob) | ||||
removing ../sub1/sub2/test.txt (glob) | ||||
adding ../sub1/foo (glob) | ||||
adding bar/abc (glob) | ||||
$ cd .. | ||||
$ hg status -S | ||||
A foo/bar/abc | ||||
A sub1/foo | ||||
R sub1/sub2/test.txt | ||||
$ hg update -Cq | ||||
|
r23539 | $ touch sub1/sub2/folder/bar | ||
$ hg addremove sub1/sub2 | ||||
adding sub1/sub2/folder/bar (glob) | ||||
$ hg status -S | ||||
A sub1/sub2/folder/bar | ||||
? foo/bar/abc | ||||
? sub1/foo | ||||
$ hg update -Cq | ||||
|
r23540 | $ hg addremove sub1 | ||
adding sub1/sub2/folder/bar (glob) | ||||
adding sub1/foo (glob) | ||||
$ hg update -Cq | ||||
|
r23537 | $ rm sub1/sub2/folder/test.txt | ||
$ rm sub1/sub2/test.txt | ||||
$ hg ci -ASm "remove test.txt" | ||||
|
r23686 | adding sub1/sub2/folder/bar | ||
removing sub1/sub2/folder/test.txt | ||||
removing sub1/sub2/test.txt | ||||
adding sub1/foo | ||||
|
r23538 | adding foo/bar/abc | ||
|
r23537 | committing subrepository sub1 | ||
committing subrepository sub1/sub2 (glob) | ||||
|
r24413 | |||
$ hg forget sub1/sub2/sub2 | ||||
$ echo x > sub1/sub2/x.txt | ||||
$ hg add sub1/sub2/x.txt | ||||
Files sees uncommitted adds and removes in subrepos | ||||
$ hg files -S | ||||
.hgsub | ||||
.hgsubstate | ||||
foo/bar/abc (glob) | ||||
main | ||||
sub1/.hgsub (glob) | ||||
sub1/.hgsubstate (glob) | ||||
sub1/foo (glob) | ||||
sub1/sub1 (glob) | ||||
sub1/sub2/folder/bar (glob) | ||||
sub1/sub2/x.txt (glob) | ||||
|
r23537 | $ hg rollback -q | ||
$ hg up -Cq | ||||
|
r23325 | |||
|
r17108 | $ hg --config extensions.largefiles=! archive -S ../archive_all | ||
$ find ../archive_all | sort | ||||
../archive_all | ||||
../archive_all/.hg_archival.txt | ||||
../archive_all/.hgsub | ||||
../archive_all/.hgsubstate | ||||
../archive_all/main | ||||
../archive_all/sub1 | ||||
../archive_all/sub1/.hgsub | ||||
../archive_all/sub1/.hgsubstate | ||||
../archive_all/sub1/sub1 | ||||
../archive_all/sub1/sub2 | ||||
../archive_all/sub1/sub2/folder | ||||
../archive_all/sub1/sub2/folder/test.txt | ||||
../archive_all/sub1/sub2/sub2 | ||||
../archive_all/sub1/sub2/test.txt | ||||
Check that archive -X works in deep subrepos | ||||
$ hg --config extensions.largefiles=! archive -S -X '**test*' ../archive_exclude | ||||
$ find ../archive_exclude | sort | ||||
../archive_exclude | ||||
../archive_exclude/.hg_archival.txt | ||||
../archive_exclude/.hgsub | ||||
../archive_exclude/.hgsubstate | ||||
../archive_exclude/main | ||||
../archive_exclude/sub1 | ||||
../archive_exclude/sub1/.hgsub | ||||
../archive_exclude/sub1/.hgsubstate | ||||
../archive_exclude/sub1/sub1 | ||||
../archive_exclude/sub1/sub2 | ||||
../archive_exclude/sub1/sub2/sub2 | ||||
$ hg --config extensions.largefiles=! archive -S -I '**test*' ../archive_include | ||||
$ find ../archive_include | sort | ||||
../archive_include | ||||
../archive_include/sub1 | ||||
../archive_include/sub1/sub2 | ||||
../archive_include/sub1/sub2/folder | ||||
../archive_include/sub1/sub2/folder/test.txt | ||||
../archive_include/sub1/sub2/test.txt | ||||
|
r17105 | Check that deep archive works with largefiles (which overrides hgsubrepo impl) | ||
This also tests the repo.ui regression in 43fb170a23bd, and that lf subrepo | ||||
subrepos are archived properly. | ||||
Note that add --large through a subrepo currently adds the file as a normal file | ||||
$ echo "large" > sub1/sub2/large.bin | ||||
$ hg --config extensions.largefiles= add --large -R sub1/sub2 sub1/sub2/large.bin | ||||
$ echo "large" > large.bin | ||||
$ hg --config extensions.largefiles= add --large large.bin | ||||
$ hg --config extensions.largefiles= ci -S -m "add large files" | ||||
committing subrepository sub1 | ||||
|
r17112 | committing subrepository sub1/sub2 (glob) | ||
|
r17105 | |||
$ hg --config extensions.largefiles= archive -S ../archive_lf | ||||
$ find ../archive_lf | sort | ||||
../archive_lf | ||||
../archive_lf/.hg_archival.txt | ||||
../archive_lf/.hgsub | ||||
../archive_lf/.hgsubstate | ||||
../archive_lf/large.bin | ||||
../archive_lf/main | ||||
../archive_lf/sub1 | ||||
../archive_lf/sub1/.hgsub | ||||
../archive_lf/sub1/.hgsubstate | ||||
../archive_lf/sub1/sub1 | ||||
|
r17106 | ../archive_lf/sub1/sub2 | ||
|
r17108 | ../archive_lf/sub1/sub2/folder | ||
../archive_lf/sub1/sub2/folder/test.txt | ||||
../archive_lf/sub1/sub2/large.bin | ||||
../archive_lf/sub1/sub2/sub2 | ||||
../archive_lf/sub1/sub2/test.txt | ||||
$ rm -rf ../archive_lf | ||||
Exclude large files from main and sub-sub repo | ||||
$ hg --config extensions.largefiles= archive -S -X '**.bin' ../archive_lf | ||||
$ find ../archive_lf | sort | ||||
../archive_lf | ||||
../archive_lf/.hg_archival.txt | ||||
../archive_lf/.hgsub | ||||
../archive_lf/.hgsubstate | ||||
../archive_lf/main | ||||
../archive_lf/sub1 | ||||
../archive_lf/sub1/.hgsub | ||||
../archive_lf/sub1/.hgsubstate | ||||
../archive_lf/sub1/sub1 | ||||
../archive_lf/sub1/sub2 | ||||
../archive_lf/sub1/sub2/folder | ||||
../archive_lf/sub1/sub2/folder/test.txt | ||||
../archive_lf/sub1/sub2/sub2 | ||||
../archive_lf/sub1/sub2/test.txt | ||||
$ rm -rf ../archive_lf | ||||
Exclude normal files from main and sub-sub repo | ||||
$ hg --config extensions.largefiles= archive -S -X '**.txt' ../archive_lf | ||||
$ find ../archive_lf | sort | ||||
../archive_lf | ||||
../archive_lf/.hgsub | ||||
../archive_lf/.hgsubstate | ||||
../archive_lf/large.bin | ||||
../archive_lf/main | ||||
../archive_lf/sub1 | ||||
../archive_lf/sub1/.hgsub | ||||
../archive_lf/sub1/.hgsubstate | ||||
../archive_lf/sub1/sub1 | ||||
../archive_lf/sub1/sub2 | ||||
|
r17106 | ../archive_lf/sub1/sub2/large.bin | ||
../archive_lf/sub1/sub2/sub2 | ||||
|
r17108 | $ rm -rf ../archive_lf | ||
Include normal files from within a largefiles subrepo | ||||
$ hg --config extensions.largefiles= archive -S -I '**.txt' ../archive_lf | ||||
$ find ../archive_lf | sort | ||||
../archive_lf | ||||
../archive_lf/.hg_archival.txt | ||||
../archive_lf/sub1 | ||||
../archive_lf/sub1/sub2 | ||||
../archive_lf/sub1/sub2/folder | ||||
../archive_lf/sub1/sub2/folder/test.txt | ||||
../archive_lf/sub1/sub2/test.txt | ||||
$ rm -rf ../archive_lf | ||||
Include large files from within a largefiles subrepo | ||||
$ hg --config extensions.largefiles= archive -S -I '**.bin' ../archive_lf | ||||
$ find ../archive_lf | sort | ||||
../archive_lf | ||||
../archive_lf/large.bin | ||||
../archive_lf/sub1 | ||||
../archive_lf/sub1/sub2 | ||||
../archive_lf/sub1/sub2/large.bin | ||||
$ rm -rf ../archive_lf | ||||
Find an exact largefile match in a largefiles subrepo | ||||
$ hg --config extensions.largefiles= archive -S -I 'sub1/sub2/large.bin' ../archive_lf | ||||
$ find ../archive_lf | sort | ||||
../archive_lf | ||||
../archive_lf/sub1 | ||||
../archive_lf/sub1/sub2 | ||||
../archive_lf/sub1/sub2/large.bin | ||||
$ rm -rf ../archive_lf | ||||
|
r24029 | The local repo enables largefiles if a largefiles repo is cloned | ||
$ hg showconfig extensions | ||||
abort: repository requires features unknown to this Mercurial: largefiles! | ||||
(see http://mercurial.selenic.com/wiki/MissingRequirement for more information) | ||||
[255] | ||||
$ hg --config extensions.largefiles= clone -qU . ../lfclone | ||||
$ cat ../lfclone/.hg/hgrc | ||||
# example repository config (see "hg help config" for more info) | ||||
[paths] | ||||
default = $TESTTMP/cloned (glob) | ||||
# path aliases to other clones of this repo in URLs or filesystem paths | ||||
# (see "hg help config.paths" for more info) | ||||
# | ||||
# default-push = ssh://jdoe@example.net/hg/jdoes-fork | ||||
# my-fork = ssh://jdoe@example.net/hg/jdoes-fork | ||||
# my-clone = /home/jdoe/jdoes-clone | ||||
[ui] | ||||
# name and email (local to this repository, optional), e.g. | ||||
# username = Jane Doe <jdoe@example.com> | ||||
[extensions] | ||||
largefiles= | ||||
|
r17108 | Find an exact match to a standin (should archive nothing) | ||
$ hg --config extensions.largefiles= archive -S -I 'sub/sub2/.hglf/large.bin' ../archive_lf | ||||
|
r17113 | $ find ../archive_lf 2> /dev/null | sort | ||
|
r17105 | |||
|
r23837 | $ cat >> $HGRCPATH <<EOF | ||
> [extensions] | ||||
> largefiles= | ||||
|
r23886 | > [largefiles] | ||
> patterns=glob:**.dat | ||||
|
r23837 | > EOF | ||
Test forget through a deep subrepo with the largefiles extension, both a | ||||
largefile and a normal file. Then a largefile that hasn't been committed yet. | ||||
$ touch sub1/sub2/untracked.txt | ||||
|
r23886 | $ touch sub1/sub2/large.dat | ||
|
r23837 | $ hg forget sub1/sub2/large.bin sub1/sub2/test.txt sub1/sub2/untracked.txt | ||
not removing sub1/sub2/untracked.txt: file is already untracked (glob) | ||||
[1] | ||||
|
r23886 | $ hg add --large --dry-run -v sub1/sub2/untracked.txt | ||
|
r23837 | adding sub1/sub2/untracked.txt as a largefile (glob) | ||
|
r23886 | $ hg add --large -v sub1/sub2/untracked.txt | ||
adding sub1/sub2/untracked.txt as a largefile (glob) | ||||
$ hg add --normal -v sub1/sub2/large.dat | ||||
adding sub1/sub2/large.dat (glob) | ||||
|
r23837 | $ hg forget -v sub1/sub2/untracked.txt | ||
removing sub1/sub2/untracked.txt (glob) | ||||
$ hg status -S | ||||
|
r23886 | A sub1/sub2/large.dat | ||
|
r23837 | R sub1/sub2/large.bin | ||
R sub1/sub2/test.txt | ||||
? foo/bar/abc | ||||
? sub1/sub2/untracked.txt | ||||
|
r24413 | ? sub1/sub2/x.txt | ||
|
r23923 | $ hg add sub1/sub2 | ||
$ hg ci -Sqm 'forget testing' | ||||
Test issue4330: commit a directory where only normal files have changed | ||||
$ touch foo/bar/large.dat | ||||
$ hg add --large foo/bar/large.dat | ||||
$ hg ci -m 'add foo/bar/large.dat' | ||||
$ touch a.txt | ||||
$ touch a.dat | ||||
$ hg add -v foo/bar/abc a.txt a.dat | ||||
adding a.dat as a largefile | ||||
adding a.txt | ||||
adding foo/bar/abc (glob) | ||||
$ hg ci -m 'dir commit with only normal file deltas' foo/bar | ||||
$ hg status | ||||
A a.dat | ||||
A a.txt | ||||
Test a directory commit with a changed largefile and a changed normal file | ||||
$ echo changed > foo/bar/large.dat | ||||
$ echo changed > foo/bar/abc | ||||
$ hg ci -m 'dir commit with normal and lf file deltas' foo | ||||
$ hg status | ||||
A a.dat | ||||
A a.txt | ||||
|
r23837 | |||
|
r24230 | $ hg ci -m "add a.*" | ||
$ hg mv a.dat b.dat | ||||
$ hg mv foo/bar/abc foo/bar/def | ||||
$ hg status -C | ||||
A b.dat | ||||
a.dat | ||||
A foo/bar/def | ||||
foo/bar/abc | ||||
R a.dat | ||||
R foo/bar/abc | ||||
$ hg ci -m "move large and normal" | ||||
$ hg status -C --rev '.^' --rev . | ||||
A b.dat | ||||
a.dat | ||||
A foo/bar/def | ||||
foo/bar/abc | ||||
R a.dat | ||||
R foo/bar/abc | ||||
|
r24446 | |||
$ echo foo > main | ||||
$ hg ci -m "mod parent only" | ||||
$ hg init sub3 | ||||
$ echo "sub3 = sub3" >> .hgsub | ||||
$ echo xyz > sub3/a.txt | ||||
$ hg add sub3/a.txt | ||||
$ hg ci -Sm "add sub3" | ||||
committing subrepository sub3 | ||||
$ cat .hgsub | grep -v sub3 > .hgsub1 | ||||
$ mv .hgsub1 .hgsub | ||||
$ hg ci -m "remove sub3" | ||||
$ hg log -r "subrepo()" --style compact | ||||
0 7f491f53a367 1970-01-01 00:00 +0000 test | ||||
main import | ||||
1 ffe6649062fe 1970-01-01 00:00 +0000 test | ||||
deep nested modif should trigger a commit | ||||
2 9bb10eebee29 1970-01-01 00:00 +0000 test | ||||
add test.txt | ||||
3 7c64f035294f 1970-01-01 00:00 +0000 test | ||||
add large files | ||||
4 f734a59e2e35 1970-01-01 00:00 +0000 test | ||||
forget testing | ||||
11 9685a22af5db 1970-01-01 00:00 +0000 test | ||||
add sub3 | ||||
12[tip] 2e0485b475b9 1970-01-01 00:00 +0000 test | ||||
remove sub3 | ||||
$ hg log -r "subrepo('sub3')" --style compact | ||||
11 9685a22af5db 1970-01-01 00:00 +0000 test | ||||
add sub3 | ||||
12[tip] 2e0485b475b9 1970-01-01 00:00 +0000 test | ||||
remove sub3 | ||||
$ hg log -r "subrepo('bogus')" --style compact | ||||
Test .hgsubstate in the R state | ||||
$ hg rm .hgsub .hgsubstate | ||||
$ hg ci -m 'trash subrepo tracking' | ||||
$ hg log -r "subrepo('re:sub\d+')" --style compact | ||||
0 7f491f53a367 1970-01-01 00:00 +0000 test | ||||
main import | ||||
1 ffe6649062fe 1970-01-01 00:00 +0000 test | ||||
deep nested modif should trigger a commit | ||||
2 9bb10eebee29 1970-01-01 00:00 +0000 test | ||||
add test.txt | ||||
3 7c64f035294f 1970-01-01 00:00 +0000 test | ||||
add large files | ||||
4 f734a59e2e35 1970-01-01 00:00 +0000 test | ||||
forget testing | ||||
11 9685a22af5db 1970-01-01 00:00 +0000 test | ||||
add sub3 | ||||
12 2e0485b475b9 1970-01-01 00:00 +0000 test | ||||
remove sub3 | ||||
13[tip] a68b2c361653 1970-01-01 00:00 +0000 test | ||||
trash subrepo tracking | ||||
Restore the trashed subrepo tracking | ||||
$ hg rollback -q | ||||
$ hg update -Cq . | ||||
|
r17105 | $ cd .. | ||