Mercurial > hg
diff tests/test-remotefilelog-sparse.t @ 40495:3a333a582d7b
remotefilelog: import pruned-down remotefilelog extension from hg-experimental
This is remotefilelog as of my recent patches for compatibility with
current tip of hg, minus support for old versions of Mercurial and
some FB-specific features like their treemanifest extension and
fetching linkrev data from a patched phabricator. The file extutil.py
moved from hgext3rd to remotefilelog.
This is not yet ready to be landed, consider it a preview for
now. Planned changes include:
* replace lz4 with zstd
* rename some capabilities, requirements and wireproto commands to mark
them as experimental
* consolidate bits of shallowutil with related functions (eg readfile)
I'm certainly open to other (small) changes, but my rough mission is
to land this largely as-is so we can use it as a model of the
functionality we need going forward for lazy-fetching of file contents
from a server.
# no-check-commit because of a few foo_bar functions
Differential Revision: https://phab.mercurial-scm.org/D4782
author | Augie Fackler <augie@google.com> |
---|---|
date | Thu, 27 Sep 2018 13:03:19 -0400 |
parents | |
children | 95a079ea1e19 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-remotefilelog-sparse.t Thu Sep 27 13:03:19 2018 -0400 @@ -0,0 +1,110 @@ + $ PYTHONPATH=$TESTDIR/..:$PYTHONPATH + $ export PYTHONPATH + + $ . "$TESTDIR/remotefilelog-library.sh" + + $ hginit master + $ cd master + $ cat >> .hg/hgrc <<EOF + > [remotefilelog] + > server=True + > EOF + $ echo x > x + $ echo z > z + $ hg commit -qAm x1 + $ echo x2 > x + $ echo z2 > z + $ hg commit -qAm x2 + $ hg bookmark foo + + $ cd .. + +# prefetch a revision w/ a sparse checkout + + $ hgcloneshallow ssh://user@dummy/master shallow --noupdate + streaming all changes + 2 files to transfer, 527 bytes of data + transferred 527 bytes in 0.* seconds (*/sec) (glob) + searching for changes + no changes found + $ cd shallow + $ printf "[extensions]\nsparse=\n" >> .hg/hgrc + + $ hg debugsparse -I x + $ hg prefetch -r 0 + 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) + + $ hg cat -r 0 x + x + + $ hg debugsparse -I z + $ hg prefetch -r 0 + 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) + + $ hg cat -r 0 z + z + +# prefetch sparse only on pull when configured + + $ printf "[remotefilelog]\npullprefetch=bookmark()\n" >> .hg/hgrc + $ hg strip tip + saved backup bundle to $TESTTMP/shallow/.hg/strip-backup/876b1317060d-b2e91d8d-backup.hg (glob) + + $ hg debugsparse --delete z + + $ clearcache + $ 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 + updating bookmark foo + new changesets 876b1317060d + (run 'hg update' to get a working copy) + prefetching file contents + 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) + +# Dont consider filtered files when doing copy tracing + +## Push an unrelated commit + $ cd ../ + + $ hgcloneshallow ssh://user@dummy/master shallow2 + streaming all changes + 2 files to transfer, 527 bytes of data + transferred 527 bytes in 0.* seconds (*) (glob) + searching for changes + no changes found + updating to branch default + 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + 1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob) + $ cd shallow2 + $ printf "[extensions]\nsparse=\n" >> .hg/hgrc + + $ hg up -q 0 + 2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over *s (glob) + $ touch a + $ hg ci -Aqm a + $ hg push -q -f + +## Pull the unrelated commit and rebase onto it - verify unrelated file was not +pulled + + $ cd ../shallow + $ hg up -q 1 + $ hg pull -q + $ hg debugsparse -I z + $ clearcache + $ hg prefetch -r '. + .^' -I x -I z + 4 files fetched over 1 fetches - (4 misses, 0.00% hit ratio) over * (glob) +Originally this was testing that the rebase doesn't fetch pointless +blobs. Right now it fails because core's sparse can't load a spec from +the working directory. Presumably there's a fix, but I'm not sure what it is. + $ hg rebase -d 2 --keep + rebasing 1:876b1317060d "x2" (foo) + transaction abort! + rollback completed + abort: cannot parse sparse patterns from working directory + [255]