--- /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]