Mercurial > public > mercurial-scm > hg-stable
diff tests/test-subrepo.t @ 11912:69678985bdba
tests: unify test-subrepo
author | Martin Geisler <mg@lazybytes.net> |
---|---|
date | Tue, 17 Aug 2010 16:52:05 +0200 |
parents | tests/test-subrepo@b602a95c21ec |
children | 36a65283c3af |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-subrepo.t Tue Aug 17 16:52:05 2010 +0200 @@ -0,0 +1,584 @@ + $ rm -rf sub + $ mkdir sub + $ cd sub + $ hg init t + $ cd t + +first revision, no sub + + $ echo a > a + $ hg ci -Am0 + adding a + +add first sub + + $ echo s = s > .hgsub + $ hg add .hgsub + $ hg init s + $ echo a > s/a + +issue2232 - committing a subrepo without .hgsub + + $ hg ci -mbad s + abort: can't commit subrepos without .hgsub + + $ hg -R s ci -Ams0 + adding a + $ hg sum + parent: 0:f7b1eb17ad24 tip + 0 + branch: default + commit: 1 added, 1 subrepos + update: (current) + $ hg ci -m1 + committing subrepository s + +issue 2022 - update -C + + $ echo b > s/a + $ hg sum + parent: 1:7cf8cfea66e4 tip + 1 + branch: default + commit: 1 subrepos + update: (current) + $ hg co -C 1 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg sum + parent: 1:7cf8cfea66e4 tip + 1 + branch: default + commit: (clean) + update: (current) + +add sub sub + + $ echo ss = ss > s/.hgsub + $ hg init s/ss + $ echo a > s/ss/a + $ hg -R s add s/.hgsub + $ hg -R s/ss add s/ss/a + $ hg sum + parent: 1:7cf8cfea66e4 tip + 1 + branch: default + commit: 1 subrepos + update: (current) + $ hg ci -m2 + committing subrepository s + committing subrepository s/ss + $ hg sum + parent: 2:df30734270ae tip + 2 + branch: default + commit: (clean) + update: (current) + +bump sub rev + + $ echo b > s/a + $ hg -R s ci -ms1 + $ hg ci -m3 + committing subrepository s + +leave sub dirty + + $ echo c > s/a + $ hg ci -m4 + committing subrepository s + $ hg tip -R s + changeset: 3:1c833a7a9e3a + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: 4 + + +check caching + + $ hg co 0 + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ hg debugsub + +restore + + $ hg co + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg debugsub + path s + source s + revision 1c833a7a9e3a4445c711aaf0f012379cd0d4034e + +new branch for merge tests + + $ hg co 1 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo t = t >> .hgsub + $ hg init t + $ echo t > t/t + $ hg -R t add t + adding t/t + +5 + + $ hg ci -m5 # add sub + committing subrepository t + created new head + $ echo t2 > t/t + +6 + + $ hg st -R s + $ hg ci -m6 # change sub + committing subrepository t + $ hg debugsub + path s + source s + revision e4ece1bf43360ddc8f6a96432201a37b7cd27ae4 + path t + source t + revision 6747d179aa9a688023c4b0cad32e4c92bb7f34ad + $ echo t3 > t/t + +7 + + $ hg ci -m7 # change sub again for conflict test + committing subrepository t + $ hg rm .hgsub + +8 + + $ hg ci -m8 # remove sub + +merge tests + + $ hg co -C 3 + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg merge 5 # test adding + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg debugsub + path s + source s + revision fc627a69481fcbe5f1135069e8a3881c023e4cf5 + path t + source t + revision 60ca1237c19474e7a3978b0dc1ca4e6f36d51382 + $ hg ci -m9 + created new head + $ hg merge 6 --debug # test change + searching for copies back to rev 2 + resolving manifests + overwrite None partial False + ancestor 1f14a2e2d3ec local f0d2028bf86d+ remote 1831e14459c4 + .hgsubstate: versions differ -> m + updating: .hgsubstate 1/1 files (100.00%) + subrepo merge f0d2028bf86d+ 1831e14459c4 1f14a2e2d3ec + subrepo t: other changed, get t:6747d179aa9a688023c4b0cad32e4c92bb7f34ad:hg + getting subrepo t + resolving manifests + overwrite True partial False + ancestor 60ca1237c194+ local 60ca1237c194+ remote 6747d179aa9a + t: remote is newer -> g + updating: t 1/1 files (100.00%) + getting t + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg debugsub + path s + source s + revision fc627a69481fcbe5f1135069e8a3881c023e4cf5 + path t + source t + revision 6747d179aa9a688023c4b0cad32e4c92bb7f34ad + $ echo conflict > t/t + $ hg ci -m10 + committing subrepository t + $ HGMERGE=internal:merge hg merge --debug 7 # test conflict + searching for copies back to rev 2 + resolving manifests + overwrite None partial False + ancestor 1831e14459c4 local e45c8b14af55+ remote f94576341bcf + .hgsubstate: versions differ -> m + updating: .hgsubstate 1/1 files (100.00%) + subrepo merge e45c8b14af55+ f94576341bcf 1831e14459c4 + subrepo t: both sides changed, merge with t:7af322bc1198a32402fe903e0b7ebcfc5c9bf8f4:hg + merging subrepo t + searching for copies back to rev 2 + resolving manifests + overwrite None partial False + ancestor 6747d179aa9a local 20a0db6fbf6c+ remote 7af322bc1198 + t: versions differ -> m + preserving t for resolve of t + updating: t 1/1 files (100.00%) + picked tool 'internal:merge' for t (binary False symlink False) + merging t + my t@20a0db6fbf6c+ other t@7af322bc1198 ancestor t@6747d179aa9a + warning: conflicts during merge. + merging t failed! + 0 files updated, 0 files merged, 0 files removed, 1 files unresolved + use 'hg resolve' to retry unresolved file merges or 'hg update -C' to abandon + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + +should conflict + + $ cat t/t + <<<<<<< local + conflict + ======= + t3 + >>>>>>> other + +clone + + $ cd .. + $ hg clone t tc + updating to branch default + pulling subrepo s from .*/sub/t/s + requesting all changes + adding changesets + adding manifests + adding file changes + added 4 changesets with 5 changes to 3 files + pulling subrepo s/ss from .*/sub/t/s/ss + requesting all changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + pulling subrepo t from .*/sub/t/t + requesting all changes + adding changesets + adding manifests + adding file changes + added 4 changesets with 4 changes to 1 files (+1 heads) + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ cd tc + $ hg debugsub + path s + source s + revision fc627a69481fcbe5f1135069e8a3881c023e4cf5 + path t + source t + revision 20a0db6fbf6c3d2836e6519a642ae929bfc67c0e + +push + + $ echo bah > t/t + $ hg ci -m11 + committing subrepository t + $ hg push + pushing .*sub/t + pushing .*sub/t/s/ss + searching for changes + no changes found + pushing .*sub/t/s + searching for changes + no changes found + pushing .*sub/t/t + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + +push -f + + $ echo bah > s/a + $ hg ci -m12 + committing subrepository s + $ hg push + pushing .*sub/t + pushing .*sub/t/s/ss + searching for changes + no changes found + pushing .*sub/t/s + searching for changes + abort: push creates new remote heads on branch 'default'! + (did you forget to merge? use push -f to force) + $ hg push -f + pushing .*sub/t + pushing .*sub/t/s/ss + searching for changes + no changes found + pushing .*sub/t/s + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files (+1 heads) + pushing .*sub/t/t + searching for changes + no changes found + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + +update + + $ cd ../t + $ hg up -C # discard our earlier merge + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo blah > t/t + $ hg ci -m13 + committing subrepository t + +pull + + $ cd ../tc + $ hg pull + pulling .*sub/t + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + (run 'hg update' to get a working copy) + +should pull t + + $ hg up + pulling subrepo t from .*/sub/t/t + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ cat t/t + blah + +bogus subrepo path aborts + + $ echo 'bogus=[boguspath' >> .hgsub + $ hg ci -m 'bogus subrepo path' + abort: missing ] in subrepo source + +issue 1986 + +# subrepo layout +# +# o 5 br +# /| +# o | 4 default +# | | +# | o 3 br +# |/| +# o | 2 default +# | | +# | o 1 br +# |/ +# o 0 default + + $ cd .. + $ rm -rf sub + $ hg init main + $ cd main + $ hg init s + $ cd s + $ echo a > a + $ hg ci -Am1 + adding a + $ hg branch br + marked working directory as branch br + $ echo a >> a + $ hg ci -m1 + $ hg up default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo b > b + $ hg ci -Am1 + adding b + $ hg up br + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg merge tip + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg ci -m1 + $ hg up 2 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo c > c + $ hg ci -Am1 + adding c + $ hg up 3 + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg merge 4 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg ci -m1 + +# main repo layout: +# +# * <-- try to merge default into br again +# .`| +# . o 5 br --> substate = 5 +# . | +# o | 4 default --> substate = 4 +# | | +# | o 3 br --> substate = 2 +# |/| +# o | 2 default --> substate = 2 +# | | +# | o 1 br --> substate = 3 +# |/ +# o 0 default --> substate = 2 + + $ cd .. + $ echo 's = s' > .hgsub + $ hg -R s up 2 + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg ci -Am1 + adding .hgsub + committing subrepository s + $ hg branch br + marked working directory as branch br + $ echo b > b + $ hg -R s up 3 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg ci -Am1 + adding b + committing subrepository s + $ hg up default + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo c > c + $ hg ci -Am1 + adding c + $ hg up 1 + 2 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg merge 2 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ hg ci -m1 + $ hg up 2 + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg -R s up 4 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo d > d + $ hg ci -Am1 + adding d + committing subrepository s + $ hg up 3 + 2 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg -R s up 5 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo e > e + $ hg ci -Am1 + adding e + committing subrepository s + + $ hg up 5 + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg merge 4 # try to merge default into br again + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + $ cd .. + +test subrepo delete from .hgsubstate + + $ hg init testdelete + $ mkdir testdelete/nested testdelete/nested2 + $ hg init testdelete/nested + $ hg init testdelete/nested2 + $ echo test > testdelete/nested/foo + $ echo test > testdelete/nested2/foo + $ hg -R testdelete/nested add + adding testdelete/nested/foo + $ hg -R testdelete/nested2 add + adding testdelete/nested2/foo + $ hg -R testdelete/nested ci -m test + $ hg -R testdelete/nested2 ci -m test + $ echo nested = nested > testdelete/.hgsub + $ echo nested2 = nested2 >> testdelete/.hgsub + $ hg -R testdelete add + adding testdelete/.hgsub + $ hg -R testdelete ci -m "nested 1 & 2 added" + committing subrepository nested2 + committing subrepository nested + $ echo nested = nested > testdelete/.hgsub + $ hg -R testdelete ci -m "nested 2 deleted" + $ cat testdelete/.hgsubstate + bdf5c9a3103743d900b12ae0db3ffdcfd7b0d878 nested + $ hg -R testdelete remove testdelete/.hgsub + $ hg -R testdelete ci -m ".hgsub deleted" + $ cat testdelete/.hgsubstate + +test repository cloning + + $ mkdir mercurial mercurial2 + $ hg init nested_absolute + $ echo test > nested_absolute/foo + $ hg -R nested_absolute add + adding nested_absolute/foo + $ hg -R nested_absolute ci -mtest + $ cd mercurial + $ hg init nested_relative + $ echo test2 > nested_relative/foo2 + $ hg -R nested_relative add + adding nested_relative/foo2 + $ hg -R nested_relative ci -mtest2 + $ hg init main + $ echo "nested_relative = ../nested_relative" > main/.hgsub + $ echo "nested_absolute = `pwd`/nested_absolute" >> main/.hgsub + $ hg -R main add + adding main/.hgsub + $ hg -R main ci -m "add subrepos" + committing subrepository nested_relative + committing subrepository nested_absolute + $ cd .. + $ hg clone mercurial/main mercurial2/main + updating to branch default + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ cat mercurial2/main/nested_absolute/.hg/hgrc \ + > mercurial2/main/nested_relative/.hg/hgrc + [paths] + default = .*/test-subrepo.t/sub/mercurial/nested_absolute + [paths] + default = .*/test-subrepo.t/sub/mercurial/nested_relative + $ rm -rf mercurial mercurial2 + +issue 1977 + + $ hg init repo + $ hg init repo/s + $ echo a > repo/s/a + $ hg -R repo/s ci -Am0 + adding a + $ echo s = s > repo/.hgsub + $ hg -R repo ci -Am1 + adding .hgsub + committing subrepository s + $ hg clone repo repo2 + updating to branch default + pulling subrepo s from .*/sub/repo/s + requesting all changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 1 changes to 1 files + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg -q -R repo2 pull -u + $ echo 1 > repo2/s/a + $ hg -R repo2/s ci -m2 + $ hg -q -R repo2/s push + $ hg -R repo2/s up -C 0 + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo 2 > repo2/s/a + $ hg -R repo2/s ci -m3 + created new head + $ hg -R repo2 ci -m3 + committing subrepository s + $ hg -q -R repo2 push + abort: push creates new remote heads on branch 'default'! + (did you forget to merge? use push -f to force) + $ hg -R repo update + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ rm -rf repo2 repo + + $ exit 0