Mercurial > hg
view tests/test-remotefilelog-clone.t @ 41304:76873548b051 stable
partialdiscovery: avoid `undecided` related computation sooner than necessary
Changeset 1d30be90c move the update of the `undecided` set within the
`partialdiscovery` object in order to clarify the API.
The update to the `undecided` set was unconditional in 1d30be90c and the first
access to the `self.undecided` property triggered the initial computation of
the set of undecided revisions. As a result, the set was computed much
earlier, at a time where less information is available, immediately followed
by an update of this set to remove common revisions.
To fix this regression, we ignore the `undecided` related logic in
`addcommons` when that `undecided` set has not been computed yet. Code that
actually needs to know the `undecided` set will trigger its computation later.
The change has no effects on semantic because the initial computation
`undecided` set takes all knowns `common` into account.
Example performance running `hg debugdiscovery` from a pypy repo missing 10
changesets:
870a89c6909d: 52.3ms (regression parent)
1d30be90c9dc: 72.0ms (regression)
5a5f504a7175: 64.8ms (this fix parent)
this fix: 52.6ms
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Wed, 23 Jan 2019 18:07:42 -0500 |
parents | a0886a4d6dce |
children | db9e33beb0fb |
line wrap: on
line source
#require no-windows $ . "$TESTDIR/remotefilelog-library.sh" $ hg init master $ cd master $ cat >> .hg/hgrc <<EOF > [remotefilelog] > server=True > EOF $ echo x > x $ hg commit -qAm x $ cd .. # shallow clone from full $ hgcloneshallow ssh://user@dummy/master shallow --noupdate streaming all changes 2 files to transfer, 227 bytes of data transferred 227 bytes in * seconds (*/sec) (glob) searching for changes no changes found $ cd shallow $ cat .hg/requires dotencode exp-remotefilelog-repo-req-1 fncache generaldelta revlogv1 sparserevlog store $ hg update 1 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) $ cat x x $ ls .hg/store/data $ echo foo > f $ hg add f $ hg ci -m 'local content' $ ls .hg/store/data 4a0a19218e082a343a1b17e5333409af9d98f0f5 $ cd .. # shallow clone from shallow $ hgcloneshallow ssh://user@dummy/shallow shallow2 --noupdate streaming all changes 3 files to transfer, 564 bytes of data transferred 564 bytes in * seconds (*/sec) (glob) searching for changes no changes found $ cd shallow2 $ cat .hg/requires dotencode exp-remotefilelog-repo-req-1 fncache generaldelta revlogv1 sparserevlog store $ ls .hg/store/data 4a0a19218e082a343a1b17e5333409af9d98f0f5 $ hg update 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cat x x $ cd .. # full clone from shallow Note: the output to STDERR comes from a different process to the output on STDOUT and their relative ordering is not deterministic. As a result, the test was failing sporadically. To avoid this, we capture STDERR to a file and check its contents separately. $ TEMP_STDERR=full-clone-from-shallow.stderr.tmp $ hg clone --noupdate ssh://user@dummy/shallow full 2>$TEMP_STDERR streaming all changes remote: abort: Cannot clone from a shallow repo to a full repo. [255] $ cat $TEMP_STDERR abort: pull failed on remote $ rm $TEMP_STDERR # getbundle full clone $ printf '[server]\npreferuncompressed=False\n' >> master/.hg/hgrc $ hgcloneshallow ssh://user@dummy/master shallow3 requesting all changes adding changesets adding manifests adding file changes added 1 changesets with 0 changes to 0 files new changesets b292c1e3311f updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ ls shallow3/.hg/store/data $ cat shallow3/.hg/requires dotencode exp-remotefilelog-repo-req-1 fncache generaldelta revlogv1 sparserevlog store