context: translate FilteredIndex/LookupError at repo[changeid] (API) stable
authorYuya Nishihara <yuya@tcha.org>
Thu, 19 Apr 2018 19:55:51 +0900
branchstable
changeset 37797 43221a57e22f
parent 37796 968ac00c4017
child 37798 8fa3396a832d
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. try: repo[rev_or_node] except (error.RepoLookupError, error.FilteredIndexError, error.FilteredLookupError): pass This would also fix filectx._changectx(), which catches FilteredRepoLookupError to fall back to the unfiltered path.
mercurial/context.py
mercurial/localrepo.py
--- a/mercurial/context.py	Thu Apr 19 20:22:33 2018 +0900
+++ b/mercurial/context.py	Thu Apr 19 19:55:51 2018 +0900
@@ -497,8 +497,10 @@
                     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
--- a/mercurial/localrepo.py	Thu Apr 19 20:22:33 2018 +0900
+++ b/mercurial/localrepo.py	Thu Apr 19 19:55:51 2018 +0900
@@ -850,8 +850,7 @@
         try:
             self[changeid]
             return True
-        except (error.RepoLookupError, error.FilteredIndexError,
-                error.FilteredLookupError):
+        except error.RepoLookupError:
             return False
 
     def __nonzero__(self):