Mercurial > hg
changeset 43760:1e87851dba63
changectx: add a "maybe filtered" filtered attribute
There are changeset that we know not to be filtered (eg: `null`). In this case,
we could access some information without triggering changelog filtering. We add
an attribute to changectx that track this property.
Differential Revision: https://phab.mercurial-scm.org/D7483
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sun, 17 Nov 2019 06:06:38 +0100 |
parents | 1a415548794a |
children | b38cd2e6e12d |
files | mercurial/context.py |
diffstat | 1 files changed, 13 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/context.py Sun Nov 17 07:25:25 2019 +0100 +++ b/mercurial/context.py Sun Nov 17 06:06:38 2019 +0100 @@ -477,10 +477,17 @@ changeset convenient. It represents a read-only context already present in the repo.""" - def __init__(self, repo, rev, node): + def __init__(self, repo, rev, node, maybe_filtered=True): super(changectx, self).__init__(repo) self._rev = rev self._node = node + # When maybe_filtered is True, the revision might be affected by + # changelog filtering and operation through the filtered changelog must be used. + # + # When maybe_filtered is False, the revision has already been checked + # against filtering and is not filtered. Operation through the + # unfiltered changelog might be used in some case. + self._maybe_filtered = maybe_filtered def __hash__(self): try: @@ -495,7 +502,11 @@ @propertycache def _changeset(self): - return self._repo.changelog.changelogrevision(self.rev()) + if self._maybe_filtered: + repo = self._repo + else: + repo = self._repo.unfiltered() + return repo.changelog.changelogrevision(self.rev()) @propertycache def _manifest(self):