Mercurial > hg
view tests/test-merge-subrepos.t @ 33302:36a415b5a4b2
localrepo: add sparse caches
The sparse extension maintains caches for the sparse files
to a signature and a signature to a matcher. This allows the
sparse matchers to be resolved quickly, which is apparently
something that can occur in loops.
This patch ports the sparse caches to the localrepo class
pretty much as-is. There is potentially room to improve the
caching mechanism. But that can be done as a follow-up.
The default invalidatecaches() now clears the relevant sparse
cache. invalidatesignaturecache() has been moved to sparse.py.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Thu, 06 Jul 2017 12:20:53 -0700 |
parents | 439b4d005b4a |
children | 583aa1e3658b |
line wrap: on
line source
$ hg init $ echo a > a $ hg ci -qAm 'add a' $ hg init subrepo $ echo 'subrepo = http://example.net/libfoo' > .hgsub $ hg ci -qAm 'added subrepo' $ hg up -qC 0 $ echo ax > a $ hg ci -m 'changed a' created new head $ hg up -qC 1 $ cd subrepo $ echo b > b $ hg add b $ cd .. Should fail, since there are added files to subrepo: $ hg merge abort: uncommitted changes in subrepository 'subrepo' [255] Deleted files trigger a '+' marker in top level repos. Deleted files are also noticed by `update --check` in the top level repo. $ hg ci -Sqm 'add b' $ rm a $ hg id cb66ec850af7+ tip $ hg sum parent: 3:cb66ec850af7 tip add b branch: default commit: 1 deleted (clean) update: 1 new changesets, 2 branch heads (merge) phases: 4 draft $ hg up --check -r '.^' abort: uncommitted changes [255] $ hg st -S ! a $ hg up -Cq . Test that dirty is consistent through subrepos $ rm subrepo/b TODO: a deleted subrepo file should be flagged as dirty, like the top level repo $ hg id cb66ec850af7 tip TODO: a deleted file should be listed as such, like the top level repo $ hg sum parent: 3:cb66ec850af7 tip add b branch: default commit: (clean) update: 1 new changesets, 2 branch heads (merge) phases: 4 draft Modified subrepo files are noticed by `update --check` and `summary` $ echo mod > subrepo/b $ hg st -S M subrepo/b $ hg up -r '.^' --check abort: uncommitted changes in subrepository 'subrepo' [255] $ hg sum parent: 3:cb66ec850af7 tip add b branch: default commit: 1 subrepos update: 1 new changesets, 2 branch heads (merge) phases: 4 draft TODO: why is -R needed here? If it's because the subrepo is treated as a discrete unit, then this should probably warn or something. $ hg revert -R subrepo --no-backup subrepo/b -r . $ rm subrepo/b $ hg st -S ! subrepo/b TODO: --check should notice a subrepo with a missing file. It already notices a modified file. $ hg up -r '.^' --check 1 files updated, 0 files merged, 0 files removed, 0 files unresolved TODO: update without --clean shouldn't restore a deleted subrepo file, since it doesn't restore a deleted top level repo file. $ hg st -S $ hg bookmark -r tip @other $ echo xyz > subrepo/c $ hg ci -SAm 'add c' adding subrepo/c committing subrepository subrepo created new head $ rm subrepo/c Merge sees deleted subrepo files as an uncommitted change $ hg merge @other subrepository subrepo diverged (local revision: 2b4750dcc93f, remote revision: cde40f86152f) (M)erge, keep (l)ocal [working copy] or keep (r)emote [merge rev]? m abort: uncommitted changes (in subrepo subrepo) (use 'hg status' to list changes) [255]