Mercurial > evolve
changeset 2326:72853bade853
obscache: extract code to update from new revision
Code cleanup and prepare upstreaming. The make the code more likely to work with
the key validation returning an iterator of revs to update the cache with.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 03 May 2017 18:46:48 +0200 |
parents | 04a0eda7dea9 |
children | 6b751daad348 |
files | hgext3rd/evolve/obscache.py |
diffstat | 1 files changed, 23 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext3rd/evolve/obscache.py Wed May 03 18:33:53 2017 +0200 +++ b/hgext3rd/evolve/obscache.py Wed May 03 18:46:48 2017 +0200 @@ -253,25 +253,7 @@ # process the new changesets cl = repo.changelog if startrev is not None: - node = cl.node - # Note: - # - # Newly added changeset might be affected by obsolescence markers - # we already have locally. So we needs to have soem global - # knowledge about the markers to handle that question. Right this - # requires parsing all markers in the obsstore. However, we could - # imagine using various optimisation (eg: bloom filter, other on - # disk cache) to remove this full parsing. - # - # For now we stick to the simpler approach or paying the - # performance cost on new changesets. - succs = repo.obsstore.successors - for r in cl.revs(startrev): - if node(r) in succs: - val = 1 - else: - val = 0 - self._data.append(val) + self._updaterevs(repo, cl.revs(startrev)) assert len(self._data) == len(cl), (len(self._data), len(cl)) # process the new obsmarkers @@ -303,6 +285,28 @@ self._cachekey = getcachekey(repo) + def _updaterevs(self, repo, revs): + """update the cache with new revisions + + Newly added changeset might be affected by obsolescence markers + we already have locally. So we needs to have soem global + knowledge about the markers to handle that question. Right this + requires parsing all markers in the obsstore. However, we could + imagine using various optimisation (eg: bloom filter, other on + disk cache) to remove this full parsing. + + For now we stick to the simpler approach or paying the + performance cost on new changesets. + """ + node = repo.changelog.node + succs = repo.obsstore.successors + for r in revs: + if node(r) in succs: + val = 1 + else: + val = 0 + self._data.append(val) + def save(self, repo): """save the data to disk"""