# HG changeset patch # User Martin von Zweigbergk # Date 1522911849 25200 # Node ID ecd3f6909184d1fa73c0dc2adaa56a3716bd8dcf # Parent 5c9d0af7b02e28d3e2e58eeaba09797b0e21447a context: move handling of filtering error to revsymbol() (API) When changectx's constructor runs into various Filtered*Error, it creates an exception with a hint about using --hidden. This only makes sense when the revision was provided by the user (if we get e.g. a FilteredLookupError from repo[p1], then it's instead a programming error). Thus, I'm moving the handling into revsymbol(). Also changed "unfilteredrepo[changeid]" to "revsymbol(unfilteredrepo, changeid)" as part of the move. Differential Revision: https://phab.mercurial-scm.org/D3143 diff -r 5c9d0af7b02e -r ecd3f6909184 mercurial/context.py --- a/mercurial/context.py Thu Apr 05 17:56:24 2018 +0530 +++ b/mercurial/context.py Thu Apr 05 00:04:09 2018 -0700 @@ -33,7 +33,6 @@ fileset, match as matchmod, obsolete as obsmod, - obsutil, patch, pathutil, phases, @@ -378,31 +377,6 @@ return r -def _filterederror(repo, changeid): - """build an exception to be raised about a filtered changeid - - This is extracted in a function to help extensions (eg: evolve) to - experiment with various message variants.""" - if repo.filtername.startswith('visible'): - - # Check if the changeset is obsolete - unfilteredrepo = repo.unfiltered() - ctx = unfilteredrepo[changeid] - - # If the changeset is obsolete, enrich the message with the reason - # that made this changeset not visible - if ctx.obsolete(): - msg = obsutil._getfilteredreason(repo, changeid, ctx) - else: - msg = _("hidden revision '%s'") % changeid - - hint = _('use --hidden to access hidden revisions') - - return error.FilteredRepoLookupError(msg, hint=hint) - msg = _("filtered revision '%s' (not in '%s' subset)") - msg %= (changeid, repo.filtername) - return error.FilteredRepoLookupError(msg) - class changectx(basectx): """A changecontext object makes access to data related to a particular changeset convenient. It represents a read-only context already present in @@ -501,7 +475,7 @@ pass except (error.FilteredIndexError, error.FilteredLookupError, error.FilteredRepoLookupError): - raise _filterederror(repo, changeid) + raise except IndexError: pass raise error.RepoLookupError( diff -r 5c9d0af7b02e -r ecd3f6909184 mercurial/localrepo.py --- a/mercurial/localrepo.py Thu Apr 05 17:56:24 2018 +0530 +++ b/mercurial/localrepo.py Thu Apr 05 00:04:09 2018 -0700 @@ -802,7 +802,8 @@ try: self[changeid] return True - except error.RepoLookupError: + except (error.RepoLookupError, error.FilteredIndexError, + error.FilteredLookupError): return False def __nonzero__(self): diff -r 5c9d0af7b02e -r ecd3f6909184 mercurial/scmutil.py --- a/mercurial/scmutil.py Thu Apr 05 17:56:24 2018 +0530 +++ b/mercurial/scmutil.py Thu Apr 05 00:04:09 2018 -0700 @@ -451,7 +451,36 @@ msg = ("symbol (%s of type %s) was not a string, did you mean " "repo[symbol]?" % (symbol, type(symbol))) raise error.ProgrammingError(msg) - return repo[symbol] + try: + return repo[symbol] + except (error.FilteredIndexError, error.FilteredLookupError, + error.FilteredRepoLookupError): + raise _filterederror(repo, symbol) + +def _filterederror(repo, changeid): + """build an exception to be raised about a filtered changeid + + This is extracted in a function to help extensions (eg: evolve) to + experiment with various message variants.""" + if repo.filtername.startswith('visible'): + + # Check if the changeset is obsolete + unfilteredrepo = repo.unfiltered() + ctx = revsymbol(unfilteredrepo, changeid) + + # If the changeset is obsolete, enrich the message with the reason + # that made this changeset not visible + if ctx.obsolete(): + msg = obsutil._getfilteredreason(repo, changeid, ctx) + else: + msg = _("hidden revision '%s'") % changeid + + hint = _('use --hidden to access hidden revisions') + + return error.FilteredRepoLookupError(msg, hint=hint) + msg = _("filtered revision '%s' (not in '%s' subset)") + msg %= (changeid, repo.filtername) + return error.FilteredRepoLookupError(msg) def revsingle(repo, revspec, default='.', localalias=None): if not revspec and revspec != 0: