Mercurial > hg
diff tests/test-narrow-exchange.t @ 36079:a2a6e724d61a
narrow: import experimental extension from narrowhg revision cb51d673e9c5
Adjustments:
* renamed src to hgext/narrow
* marked extension experimental
* added correct copyright header where it was missing
* updated hgrc extension enable line in library.sh
* renamed library.sh to narrow-library.sh
* dropped all files from repo root as they're not interesting
* dropped test-pyflakes.t, test-check-code.t and test-check-py3-compat.t
* renamed remaining tests to all be test-narrow-* when they didn't already
* fixed test-narrow-expanddirstate.t to refer to narrow and not narrowhg
* fixed tests that wanted `update -C .` instead of `merge --abort`
* corrected a two-space indent in narrowspec.py
* added a missing _() in narrowcommands.py
* fixed imports to pass the import checker
* narrow only adds its --include and --exclude to clone if sparse isn't
enabled to avoid breaking test-duplicateoptions.py. This is a kludge,
and we'll need to come up with a better solution in the future.
These were more or less the minimum to import something that would
pass tests and not create a bunch of files we'll never use.
Changes I intend to make as followups:
* rework the test-narrow-*-tree.t tests to use the new testcases
functionality in run-tests.py
* remove lots of monkeypatches of core things
Differential Revision: https://phab.mercurial-scm.org/D1974
author | Augie Fackler <augie@google.com> |
---|---|
date | Mon, 29 Jan 2018 16:19:33 -0500 |
parents | |
children | 2d82a24d0c78 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-narrow-exchange.t Mon Jan 29 16:19:33 2018 -0500 @@ -0,0 +1,210 @@ + + $ . "$TESTDIR/narrow-library.sh" + +create full repo + + $ hg init master + $ cd master + $ cat >> .hg/hgrc <<EOF + > [narrow] + > serveellipses=True + > EOF + + $ mkdir inside + $ echo 1 > inside/f + $ mkdir inside2 + $ echo 1 > inside2/f + $ mkdir outside + $ echo 1 > outside/f + $ hg ci -Aqm 'initial' + + $ echo 2 > inside/f + $ hg ci -qm 'inside 2' + + $ echo 2 > inside2/f + $ hg ci -qm 'inside2 2' + + $ echo 2 > outside/f + $ hg ci -qm 'outside 2' + + $ cd .. + + $ hg clone --narrow ssh://user@dummy/master narrow --include inside + requesting all changes + adding changesets + adding manifests + adding file changes + added 3 changesets with 2 changes to 1 files + new changesets *:* (glob) + updating to branch default + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + + $ hg clone --narrow ssh://user@dummy/master narrow2 --include inside --include inside2 + requesting all changes + adding changesets + adding manifests + adding file changes + added 4 changesets with 4 changes to 2 files + new changesets *:* (glob) + updating to branch default + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + +Can push to wider repo if change does not affect paths in wider repo that are +not also in narrower repo + + $ cd narrow + $ echo 3 > inside/f + $ hg ci -m 'inside 3' + $ hg push ssh://user@dummy/narrow2 + pushing to ssh://user@dummy/narrow2 + searching for changes + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 1 changesets with 1 changes to 1 files + +Can push to narrower repo if change affects only paths within remote's +narrow spec + + $ cd ../narrow2 + $ cat >> .hg/hgrc <<EOF + > [narrow] + > serveellipses=True + > EOF + $ hg co -r 'desc("inside 3")' + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo 4 > inside/f + $ hg ci -m 'inside 4' + $ hg push ssh://user@dummy/narrow + pushing to ssh://user@dummy/narrow + searching for changes + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 1 changesets with 1 changes to 1 files + +Can push to narrow repo if change affects only paths outside remote's +narrow spec + + $ echo 3 > inside2/f + $ hg ci -m 'inside2 3' +TODO: this should be successful + $ hg push ssh://user@dummy/narrow + pushing to ssh://user@dummy/narrow + searching for changes + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: transaction abort! + remote: rollback completed + remote: abort: data/inside2/f.i@4a1aa07735e6: unknown parent! + abort: stream ended unexpectedly (got 0 bytes, expected 4) + [255] + +Can pull from wider repo if change affects only paths outside remote's +narrow spec + $ echo 4 > inside2/f + $ hg ci -m 'inside2 4' + $ hg log -G -T '{rev} {node|short} {files}\n' + @ 7 d78a96df731d inside2/f + | + o 6 8c26f5218962 inside2/f + | + o 5 ba3480e2f9de inside/f + | + o 4 4e5edd526618 inside/f + | + o 3 81e7e07b7ab0 outside/f + | + o 2 f3993b8c0c2b inside2/f + | + o 1 8cd66ca966b4 inside/f + | + o 0 c8057d6f53ab inside/f inside2/f outside/f + + $ cd ../narrow + $ hg log -G -T '{rev} {node|short} {files}\n' + o 4 ba3480e2f9de inside/f + | + @ 3 4e5edd526618 inside/f + | + o 2 81e7e07b7ab0 outside/f + | + o 1 8cd66ca966b4 inside/f + | + o 0 c8057d6f53ab inside/f inside2/f outside/f + + $ hg pull ssh://user@dummy/narrow2 + pulling from ssh://user@dummy/narrow2 + searching for changes + remote: abort: unable to resolve parent while packing 'data/inside2/f.i' 3 for changeset 5 (?) + adding changesets + remote: abort: unexpected error: unable to resolve parent while packing 'data/inside2/f.i' 3 for changeset 5 + transaction abort! + rollback completed + abort: pull failed on remote + [255] + +Check that the resulting history is valid in the full repo + + $ cd ../narrow2 + $ hg push ssh://user@dummy/master + pushing to ssh://user@dummy/master + searching for changes + remote: adding changesets + remote: adding manifests + remote: adding file changes + remote: added 4 changesets with 4 changes to 2 files + $ cd ../master + $ hg verify + checking changesets + checking manifests + crosschecking files in changesets and manifests + checking files + 3 files, 8 changesets, 10 total revisions + +Can not push to wider repo if change affects paths in wider repo that are +not also in narrower repo + $ cd ../master + $ hg co -r 'desc("inside2 4")' + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ echo 5 > inside2/f + $ hg ci -m 'inside2 5' + $ hg log -G -T '{rev} {node|short} {files}\n' + @ 8 5970befb64ba inside2/f + | + o 7 d78a96df731d inside2/f + | + o 6 8c26f5218962 inside2/f + | + o 5 ba3480e2f9de inside/f + | + o 4 4e5edd526618 inside/f + | + o 3 81e7e07b7ab0 outside/f + | + o 2 f3993b8c0c2b inside2/f + | + o 1 8cd66ca966b4 inside/f + | + o 0 c8057d6f53ab inside/f inside2/f outside/f + + $ cd ../narrow + $ hg pull + pulling from ssh://user@dummy/master + searching for changes + adding changesets + adding manifests + adding file changes + added 1 changesets with 0 changes to 0 files + new changesets * (glob) + (run 'hg update' to get a working copy) +TODO: this should tell the user that their narrow clone does not have the +necessary content to be able to push to the target + $ hg push ssh://user@dummy/narrow2 + pushing to ssh://user@dummy/narrow2 + searching for changes + remote has heads on branch 'default' that are not known locally: d78a96df731d + abort: push creates new remote head 5970befb64ba! + (pull and merge or see 'hg help push' for details about pushing new heads) + [255]