--- a/mercurial/revlogutils/deltas.py Mon Sep 25 16:47:55 2023 +0200
+++ b/mercurial/revlogutils/deltas.py Mon Sep 25 22:51:57 2023 +0200
@@ -516,7 +516,7 @@
return end - revlog.start(revs[0])
-def _textfromdelta(fh, revlog, baserev, delta, p1, p2, flags, expectednode):
+def _textfromdelta(revlog, baserev, delta, p1, p2, flags, expectednode):
"""build full text from a (base, delta) pair and other metadata"""
# special case deltas which replace entire base; no need to decode
# base revision. this neatly avoids censored bases, which throw when
@@ -529,7 +529,7 @@
else:
# deltabase is rawtext before changed by flag processors, which is
# equivalent to non-raw text
- basetext = revlog.revision(baserev, _df=fh)
+ basetext = revlog.revision(baserev)
fulltext = mdiff.patch(basetext, delta)
try:
@@ -1090,12 +1090,10 @@
def _gather_debug(self):
return self._write_debug is not None or self._debug_info is not None
- def buildtext(self, revinfo, fh):
+ def buildtext(self, revinfo):
"""Builds a fulltext version of a revision
revinfo: revisioninfo instance that contains all needed info
- fh: file handle to either the .i or the .d revlog file,
- depending on whether it is inlined or not
"""
btext = revinfo.btext
if btext[0] is not None:
@@ -1107,7 +1105,6 @@
delta = cachedelta[1]
fulltext = btext[0] = _textfromdelta(
- fh,
revlog,
baserev,
delta,
@@ -1118,21 +1115,21 @@
)
return fulltext
- def _builddeltadiff(self, base, revinfo, fh):
+ def _builddeltadiff(self, base, revinfo):
revlog = self.revlog
- t = self.buildtext(revinfo, fh)
+ t = self.buildtext(revinfo)
if revlog.iscensored(base):
# deltas based on a censored revision must replace the
# full content in one patch, so delta works everywhere
header = mdiff.replacediffheader(revlog.rawsize(base), len(t))
delta = header + t
else:
- ptext = revlog.rawdata(base, _df=fh)
+ ptext = revlog.rawdata(base)
delta = mdiff.textdiff(ptext, t)
return delta
- def _builddeltainfo(self, revinfo, base, fh, target_rev=None):
+ def _builddeltainfo(self, revinfo, base, target_rev=None):
# can we use the cached delta?
revlog = self.revlog
chainbase = revlog.chainbase(base)
@@ -1170,7 +1167,7 @@
if self.revlog._lazydelta and currentbase == base:
delta = revinfo.cachedelta[1]
if delta is None:
- delta = self._builddeltadiff(base, revinfo, fh)
+ delta = self._builddeltadiff(base, revinfo)
if self._debug_search:
msg = b"DBG-DELTAS-SEARCH: uncompressed-delta-size=%d\n"
msg %= len(delta)
@@ -1212,8 +1209,8 @@
snapshotdepth,
)
- def _fullsnapshotinfo(self, fh, revinfo, curr):
- rawtext = self.buildtext(revinfo, fh)
+ def _fullsnapshotinfo(self, revinfo, curr):
+ rawtext = self.buildtext(revinfo)
data = self.revlog.compress(rawtext)
compresseddeltalen = deltalen = dist = len(data[1]) + len(data[0])
deltabase = chainbase = curr
@@ -1231,12 +1228,10 @@
snapshotdepth,
)
- def finddeltainfo(self, revinfo, fh, excluded_bases=None, target_rev=None):
+ def finddeltainfo(self, revinfo, excluded_bases=None, target_rev=None):
"""Find an acceptable delta against a candidate revision
revinfo: information about the revision (instance of _revisioninfo)
- fh: file handle to either the .i or the .d revlog file,
- depending on whether it is inlined or not
Returns the first acceptable candidate revision, as ordered by
_candidategroups
@@ -1296,7 +1291,7 @@
# not calling candelta since only one revision needs test, also to
# avoid overhead fetching flags again.
if not revinfo.textlen or revinfo.flags & REVIDX_RAWTEXT_CHANGING_FLAGS:
- deltainfo = self._fullsnapshotinfo(fh, revinfo, target_rev)
+ deltainfo = self._fullsnapshotinfo(revinfo, target_rev)
if gather_debug:
end = util.timer()
dbg['duration'] = end - start
@@ -1322,7 +1317,7 @@
base = revinfo.cachedelta[0]
if base == nullrev:
dbg_type = b"full"
- deltainfo = self._fullsnapshotinfo(fh, revinfo, target_rev)
+ deltainfo = self._fullsnapshotinfo(revinfo, target_rev)
if gather_debug:
snapshotdepth = 0
elif base not in excluded_bases:
@@ -1474,7 +1469,6 @@
candidatedelta = self._builddeltainfo(
revinfo,
candidaterev,
- fh,
target_rev=target_rev,
)
if self._debug_search:
@@ -1505,7 +1499,7 @@
if deltainfo is None:
dbg_type = b"full"
- deltainfo = self._fullsnapshotinfo(fh, revinfo, target_rev)
+ deltainfo = self._fullsnapshotinfo(revinfo, target_rev)
elif deltainfo.snapshotdepth: # pytype: disable=attribute-error
dbg_type = b"snapshot"
else:
--- a/mercurial/revlogutils/rewrite.py Mon Sep 25 16:47:55 2023 +0200
+++ b/mercurial/revlogutils/rewrite.py Mon Sep 25 22:51:57 2023 +0200
@@ -234,7 +234,7 @@
dc = deltas.deltacomputer(revlog)
rewritten_entries = {}
first_excl_rev = min(excluded_revs)
- with revlog.reading(), revlog._segmentfile._open_read() as dfh:
+ with revlog.reading():
for rev in range(first_excl_rev, len(old_index)):
if rev in excluded_revs:
# this revision will be preserved as is, so we don't need to
@@ -261,7 +261,7 @@
flags=entry[ENTRY_DATA_OFFSET] & 0xFFFF,
)
d = dc.finddeltainfo(
- info, dfh, excluded_bases=excluded_revs, target_rev=rev
+ info, excluded_bases=excluded_revs, target_rev=rev
)
default_comp = revlog._docket.default_compression_header
comp_mode, d = deltas.delta_compression(default_comp, d)
@@ -774,13 +774,7 @@
(base_rev, delta),
flags,
)
- # cached by the global "writing" context
- assert revlog._writinghandles is not None
- if revlog._inline:
- fh = revlog._writinghandles[0]
- else:
- fh = revlog._writinghandles[1]
- return deltacomputer.buildtext(revinfo, fh)
+ return deltacomputer.buildtext(revinfo)
is_affected = _is_revision_affected_fast_inner(
is_censored,