Skip to content
Snippets Groups Projects
Commit 1476ec96965f authored by Manuel Jacob's avatar Manuel Jacob
Browse files

context: re-add `overlayworkingctx._compact()` removed in 6a5dcd754842

This partially backs out 6a5dcd754842. The method was and is unused, but a call
to it is introduced in the next patch.

Differential Revision: https://phab.mercurial-scm.org/D8842
parent 559ebfb5a58e
No related branches found
No related tags found
No related merge requests found
......@@ -2530,6 +2530,43 @@
def clean(self):
self._cache = {}
def _compact(self):
"""Removes keys from the cache that are actually clean, by comparing
them with the underlying context.
This can occur during the merge process, e.g. by passing --tool :local
to resolve a conflict.
"""
keys = []
# This won't be perfect, but can help performance significantly when
# using things like remotefilelog.
scmutil.prefetchfiles(
self.repo(),
[
(
self.p1().rev(),
scmutil.matchfiles(self.repo(), self._cache.keys()),
)
],
)
for path in self._cache.keys():
cache = self._cache[path]
try:
underlying = self._wrappedctx[path]
if (
underlying.data() == cache[b'data']
and underlying.flags() == cache[b'flags']
):
keys.append(path)
except error.ManifestLookupError:
# Path not in the underlying manifest (created).
continue
for path in keys:
del self._cache[path]
return keys
def _markdirty(
self, path, exists, data=None, date=None, flags=b'', copied=None
):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment