tests/test-narrow-share.t
changeset 41042 7db1619af061
child 41043 ce0bc2952e2a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-narrow-share.t	Fri Jul 13 11:26:46 2018 -0700
@@ -0,0 +1,132 @@
+#testcases flat tree
+
+  $ . "$TESTDIR/narrow-library.sh"
+
+#if tree
+  $ cat << EOF >> $HGRCPATH
+  > [experimental]
+  > treemanifest = 1
+  > EOF
+#endif
+
+  $ cat << EOF >> $HGRCPATH
+  > [extensions]
+  > share =
+  > EOF
+
+  $ hg init remote
+  $ cd remote
+  $ for x in `$TESTDIR/seq.py 0 10`
+  > do
+  >   mkdir d$x
+  >   echo $x > d$x/f
+  >   hg add d$x/f
+  >   hg commit -m "add d$x/f"
+  > done
+  $ cd ..
+
+  $ hg clone --narrow ssh://user@dummy/remote main -q \
+  > --include d1 --include d3 --include d5 --include d7
+
+  $ hg share main share
+  updating working directory
+  4 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg -R share tracked
+  I path:d1
+  I path:d3
+  I path:d5
+  I path:d7
+  $ hg -R share files
+  share/d1/f
+  share/d3/f
+  share/d5/f
+  share/d7/f
+
+Narrow the share and check that the main repo's working copy gets updated
+
+# Make d3/f dirty
+  $ echo x >> main/d3/f
+  $ echo y >> main/d3/g
+  $ hg add main/d3/g
+  $ hg -R main st
+  M d3/f
+  A d3/g
+# Make d5/f not match the dirstate timestamp even though it's clean
+  $ sleep 2
+  $ hg -R main st
+  M d3/f
+  A d3/g
+  $ hg -R main debugdirstate --no-dates
+  n 644          2 set                 d1/f
+  n 644          2 unset               d3/f
+  a   0         -1 unset               d3/g
+  n 644          2 set                 d5/f
+  n 644          2 set                 d7/f
+  $ touch main/d5/f
+  $ hg -R share tracked --removeinclude d1 --removeinclude d3 --removeinclude d5
+  comparing with ssh://user@dummy/remote
+  searching for changes
+  looking for local changes to affected paths
+  deleting data/d1/f.i
+  deleting data/d3/f.i
+  deleting data/d5/f.i
+  deleting meta/d1/00manifest.i (tree !)
+  deleting meta/d3/00manifest.i (tree !)
+  deleting meta/d5/00manifest.i (tree !)
+  $ hg -R main tracked
+  I path:d7
+# d1/f, d3/f, d3/g and d5/f should no longer be reported
+  $ hg -R main files
+  main/d7/f
+# d1/f should no longer be there, d3/f should be since it was dirty, d3/g should be there since
+# it was added, and d5/f should be since we couldn't be sure it was clean
+  $ find main/d* -type f | sort
+  main/d1/f
+  main/d3/f
+  main/d3/g
+  main/d5/f
+  main/d7/f
+
+Widen the share and check that the main repo's working copy gets updated
+
+  $ hg -R share tracked --addinclude d1 --addinclude d3 -q
+  $ hg -R share tracked
+  I path:d1
+  I path:d3
+  I path:d7
+  $ hg -R share files
+  share/d1/f
+  share/d3/f
+  share/d7/f
+  $ hg -R main tracked
+  I path:d1
+  I path:d3
+  I path:d7
+# d1/f, d3/f should be back
+  $ hg -R main files
+  main/d1/f
+  main/d3/f
+  main/d3/g
+  main/d7/f
+# d3/f should be modified (not clobbered by the widening), and d3/g should be untracked
+  $ hg -R main st --all
+  M d3/f
+  A d3/g
+  C d1/f
+  C d7/f
+
+We should also be able to unshare without breaking everything:
+
+  $ hg share main share-unshare
+  updating working directory
+  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ cd share-unshare
+  $ hg unshare
+  $ hg verify
+  checking changesets
+  checking manifests
+  checking directory manifests (tree !)
+  crosschecking files in changesets and manifests
+  checking files
+  checked 11 changesets with 3 changes to 3 files
+  $ cd ..