Mercurial > hg
view tests/test-narrow-share.t @ 51619:b08c5fbe0e70 stable
rust: blanket implementation of Graph for Graph references
The need comes from the fact that `AncestorsIterator` and many
Graph-related algorithms take ownership of the `Graph` they work with.
This, in turn is due to them needing to accept the `Index` instances
that are provided by the Python layers (that neither rhg nor `RHGitaly`
use, of course): the fact that nowadays the Python layer holds an object
that is itself implemented in Rust does not change the core problem that
they cannot be tracked by the borrow checker.
Even though it looks like cloning `Changelog` would be cheap, it seems
hard to guarantee that on the long run. The object is already too rich
for us to be comfortable with it, when using references is the most
natural and guaranteed way of proceeding.
The added test seems a bit superfleous, but it will act as a reminder
that this feature is really useful until something in the Mercurial code
base actually uses it.
author | Georges Racinet <georges.racinet@octobus.net> |
---|---|
date | Mon, 22 Apr 2024 19:47:08 +0200 |
parents | 2f2682f40ea0 |
children |
line wrap: on
line source
#testcases flat tree #testcases safe normal #if safe $ echo "[format]" >> $HGRCPATH $ echo "exp-share-safe = True" >> $HGRCPATH #endif $ . "$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 Ignore file called "ignored" $ echo ignored > main/.hgignore $ 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 sure the files that are supposed to be known-clean get their timestamps set in the dirstate $ sleep 2 $ hg -R main st $ hg -R main debugdirstate --no-dates n 644 2 set d1/f n 644 2 set d3/f n 644 2 set d5/f n 644 2 set d7/f # Make d3/f dirty $ echo x >> main/d3/f $ echo y >> main/d3/g $ touch main/d3/ignored $ touch main/d3/untracked $ hg add main/d3/g $ hg -R main st M d3/f A d3/g ? d3/untracked # 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 ? d3/untracked $ hg -R main debugdirstate --no-dates n 644 2 set d1/f n 644 2 set 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 !) deleting unwanted files from working copy $ hg -R main tracked I path:d7 $ hg -R main files abort: working copy's narrowspec is stale (run 'hg tracked --update-working-copy') [20] $ hg -R main tracked --update-working-copy not deleting possibly dirty file d3/f not deleting possibly dirty file d3/g not deleting possibly dirty file d5/f not deleting unknown file d3/untracked not deleting ignored file d3/ignored # 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/d3/f main/d3/g main/d3/ignored main/d3/untracked 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 $ hg -R main files abort: working copy's narrowspec is stale (run 'hg tracked --update-working-copy') [20] $ hg -R main tracked --update-working-copy # d1/f, d3/f should be back $ hg -R main files main/d1/f main/d3/f 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 ? d3/g ? d3/untracked I d3/ignored 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 -q $ cd .. Dirstate should be left alone when upgrading from version of hg that didn't support narrow+share $ hg share main share-upgrade updating working directory 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd share-upgrade $ echo x >> d1/f $ echo y >> d3/g $ hg add d3/g $ hg rm d7/f $ hg st M d1/f A d3/g R d7/f Make it look like a repo from before narrow+share was supported $ rm .hg/narrowspec.dirstate $ hg ci -Am test abort: working copy's narrowspec is stale (run 'hg tracked --update-working-copy') [20] $ hg tracked --update-working-copy $ hg st M d1/f A d3/g R d7/f $ cd ..