Mercurial > hg-stable
changeset 35335:dc9da4f4f363
overlayworkingctx: add `_compact()`
Alas, presence of a key in the cache isn't sufficient evidence that the file
is actually dirty.
Differential Revision: https://phab.mercurial-scm.org/D1243
author | Phil Cohen <phillco@fb.com> |
---|---|
date | Thu, 07 Dec 2017 16:07:06 -0800 |
parents | 71edd38c4bb4 |
children | 777cb4497d8d |
files | mercurial/context.py |
diffstat | 1 files changed, 23 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/context.py Thu Dec 07 22:26:07 2017 -0800 +++ b/mercurial/context.py Thu Dec 07 16:07:06 2017 -0800 @@ -2225,6 +2225,29 @@ 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 = [] + for path in self._cache.keys(): + cache = self._cache[path] + try: + underlying = self._wrappedctx[path] + if (underlying.data() == cache['data'] and + underlying.flags() == cache['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=''): self._cache[path] = { 'exists': exists,