Skip to content
Snippets Groups Projects
Commit ba09db26 authored by Boris Feld's avatar Boris Feld
Browse files

delta: ignore base whose chains already don't match expectations

If we know the existing chain does not match our criteria, there is no point
to build a delta to append. This is especially useful when dealing with a full
text much smaller than its parent. In that case, the parent chain is probably
already too large.

example affected manifest write
before: 1.421005s
after:  0.815520s (-42%)
parent 42f59d3f
No related branches found
No related tags found
No related merge requests found
......@@ -655,6 +655,17 @@
# no delta for rawtext-changing revs (see "candelta" for why)
if revlog.flags(rev) & REVIDX_RAWTEXT_CHANGING_FLAGS:
continue
# If we reach here, we are about to build and test a delta.
# The delta building process will compute the chaininfo in all
# case, since that computation is cached, it is fine to access it
# here too.
chainlen, chainsize = revlog._chaininfo(rev)
# if chain will be too long, skip base
if revlog._maxchainlen and chainlen >= revlog._maxchainlen:
continue
# if chain already have too much data, skip base
if deltas_limit < chainsize:
continue
group.append(rev)
if group:
# XXX: in the sparse revlog case, group can become large,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment