[PATCH STABLE] context: translate FilteredIndex/LookupError at repo[changeid] (API)

Martin von Zweigbergk martinvonz at google.com
Thu Apr 19 12:36:21 EDT 2018


On Thu, Apr 19, 2018 at 4:25 AM Yuya Nishihara <yuya at tcha.org> wrote:

> # HG changeset patch
> # User Yuya Nishihara <yuya at tcha.org>
> # Date 1524135351 -32400
> #      Thu Apr 19 19:55:51 2018 +0900
> # Branch stable
> # Node ID 8ba1c6dab49f5665dc687000f149eb530a1079cf
> # Parent  8cde3d58cdc88707dd61a24fdccf229e2ac83610
> context: translate FilteredIndex/LookupError at repo[changeid] (API)
>
> This partially backs out ecd3f6909184. It seems layering violation for
> repo[changeid] to raise storage-level exceptions transparently. Otherwise,
> we would have to rewrite callers to catch all of them.
>

Seems reasonable and it fixes that bug in _changectx() (thanks for noticing
that), so I'll queue this.

Btw, we should also fix the "abort: 00changelog.i at abc: ambiguous
identifier!" message. That's clearly not meant for the user.


>
>   try:
>       repo[rev_or_node]
>   except (error.RepoLookupError, error.FilteredIndexError,
>           error.FilteredLookupError):
>       pass
>

Perhaps we should introduce a FilteredAccessError that
FilteredIndexError, FilteredLookupError,
and FilteredRepoLookupError can extend from. It's freeze now, so I guess
I'll send patches for that in a few weeks.


> This would also fix filectx._changectx(), which catches
> FilteredRepoLookupError
> to fall back to the unfiltered path.
>
> diff --git a/mercurial/context.py b/mercurial/context.py
> --- a/mercurial/context.py
> +++ b/mercurial/context.py
> @@ -497,8 +497,10 @@ class changectx(basectx):
>                      changeid = hex(changeid)
>              except TypeError:
>                  pass
> -        except (error.FilteredIndexError, error.FilteredLookupError,
> -                error.FilteredRepoLookupError):
> +        except (error.FilteredIndexError, error.FilteredLookupError):
> +            raise error.FilteredRepoLookupError(_("filtered revision
> '%s'")
> +                                                % changeid)
> +        except error.FilteredRepoLookupError:
>              raise
>          except IndexError:
>              pass
> diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
> --- a/mercurial/localrepo.py
> +++ b/mercurial/localrepo.py
> @@ -850,8 +850,7 @@ class localrepository(object):
>          try:
>              self[changeid]
>              return True
> -        except (error.RepoLookupError, error.FilteredIndexError,
> -                error.FilteredLookupError):
> +        except error.RepoLookupError:
>              return False
>
>      def __nonzero__(self):
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20180419/3ebc5d67/attachment.html>


More information about the Mercurial-devel mailing list