Mercurial > hg
view tests/test-remotefilelog-pull-noshallow.t @ 45999:c4c7a6b61146
match: skip walking up the directory hierarchy if the number of pats are small
Previously, we would receive a path like abc/def/ghi and "walk up" the directory
hierarchy, checking abc/def, abc, and `b''` to see if they were in the set of
prefixes that this matcher covered. We did this indiscriminately - we generated
all of these paths even if the set of prefixes the matcher covered was
completely empty, which is the case for a lot of repos at my company (the narrow
matcher we use is usually non-recursive).
This brings the time for a rebase in one of my repos from 12.20s to 10.87s. In
this particular repo, this is entirely due to the `len(prefix_set) == 0` check,
as I do not have any recursive patterns in the narrowspec.
Differential Revision: https://phab.mercurial-scm.org/D9488
author | Kyle Lippincott <spectral@google.com> |
---|---|
date | Mon, 30 Nov 2020 12:30:58 -0800 |
parents | 52fbf8a9907c |
children |
line wrap: on
line source
#require no-windows $ . "$TESTDIR/remotefilelog-library.sh" Set up an extension to make sure remotefilelog clientsetup() runs unconditionally even if we have never used a local shallow repo. This mimics behavior when using remotefilelog with chg. clientsetup() can be triggered due to a shallow repo, and then the code can later interact with non-shallow repositories. $ cat > setupremotefilelog.py << EOF > from mercurial import extensions > def extsetup(ui): > remotefilelog = extensions.find(b'remotefilelog') > remotefilelog.onetimeclientsetup(ui) > EOF Set up the master repository to pull from. $ hg init master $ cd master $ cat >> .hg/hgrc <<EOF > [remotefilelog] > server=True > EOF $ echo x > x $ hg commit -qAm x $ cd .. $ hg clone ssh://user@dummy/master child -q We should see the remotefilelog capability here, which advertises that the server supports our custom getfiles method. $ cd master $ echo 'hello' | hg -R . serve --stdio | grep capa | identifyrflcaps exp-remotefilelog-ssh-getfiles-1 x_rfl_getfile x_rfl_getflogheads $ echo 'capabilities' | hg -R . serve --stdio | identifyrflcaps ; echo exp-remotefilelog-ssh-getfiles-1 x_rfl_getfile x_rfl_getflogheads Pull to the child repository. Use our custom setupremotefilelog extension to ensure that remotefilelog.onetimeclientsetup() gets triggered. (Without using chg it normally would not be run in this case since the local repository is not shallow.) $ echo y > y $ hg commit -qAm y $ cd ../child $ hg pull --config extensions.setuprfl=$TESTTMP/setupremotefilelog.py pulling from ssh://user@dummy/master searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files new changesets d34c38483be9 (run 'hg update' to get a working copy) $ hg up 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cat y y Test that bundle works in a non-remotefilelog repo w/ remotefilelog loaded $ echo y >> y $ hg commit -qAm "modify y" $ hg bundle --base ".^" --rev . mybundle.hg --config extensions.setuprfl=$TESTTMP/setupremotefilelog.py 1 changesets found $ cd ..