Mercurial > hg
changeset 42464:66c27df1be84
deltas: skip if projected delta size is bigger than previous snapshot
Before computing any delta, we get a basic estimation of the delta size we can
expect and the resulted compressed value. We then checks this projected size
against the `size(snapshotⁿ) > size(snapshotⁿ⁺¹)` constraint. This allows to
exclude potential base candidates before doing any expensive computation.
This only apply to the intermediate-snapshot case since this constraint only
apply to them.
For some pathological cases of a private repository this step provide a
significant performance boost (timing from `hg perfrevlogwrite`):
before: 14.115908 seconds
after: 3.145906 seconds
author | Valentin Gatien-Baron <vgatien-baron@janestreet.com> |
---|---|
date | Thu, 25 Apr 2019 22:50:33 +0200 |
parents | a0b26fc8fbba |
children | 6e9ba867a946 |
files | mercurial/revlogutils/deltas.py |
diffstat | 1 files changed, 6 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revlogutils/deltas.py Thu Apr 25 22:30:14 2019 +0200 +++ b/mercurial/revlogutils/deltas.py Thu Apr 25 22:50:33 2019 +0200 @@ -698,6 +698,12 @@ # delta lower bound is larger than accepted upper bound continue + # check the relative constraint on the delta size + revlength = revlog.length(rev) + if revlength < lowestrealisticdeltalen: + # delta probable lower bound is larger than target base + continue + group.append(rev) if group: # XXX: in the sparse revlog case, group can become large,