[PATCH 6 of 6] changectx: issue a FilteredRepoLookupError when applicable

Pierre-Yves David pierre-yves.david at ens-lyon.org
Thu Oct 16 04:30:11 CDT 2014


# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at fb.com>
# Date 1413430664 25200
#      Wed Oct 15 20:37:44 2014 -0700
# Node ID 1f218b91a064f01a26d2839b5dfaf4873c036a09
# Parent  56cca5ebc3c92d9affecd349fd0b01c4dca9128e
changectx: issue a FilteredRepoLookupError when applicable

We capture FilteredxxxError and issue a FilteredRepoLookupError instead with a
sightly different messsge. The message will likely get more improvement in the
future.

    error: filtered revision '4'

diff --git a/mercurial/context.py b/mercurial/context.py
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -398,10 +398,12 @@ class changectx(basectx):
             if len(changeid) == 20:
                 try:
                     self._node = changeid
                     self._rev = repo.changelog.rev(changeid)
                     return
+                except error.FilteredRepoLookupError:
+                    raise
                 except LookupError:
                     pass
 
             try:
                 r = int(changeid)
@@ -413,18 +415,22 @@ class changectx(basectx):
                 if r < 0 or r >= l:
                     raise ValueError
                 self._rev = r
                 self._node = repo.changelog.node(r)
                 return
+            except error.FilteredIndexError:
+                raise
             except (ValueError, OverflowError, IndexError):
                 pass
 
             if len(changeid) == 40:
                 try:
                     self._node = bin(changeid)
                     self._rev = repo.changelog.rev(self._node)
                     return
+                except error.FilteredLookupError:
+                    raise
                 except (TypeError, LookupError):
                     pass
 
             if changeid in repo._bookmarks:
                 self._node = repo._bookmarks[changeid]
@@ -436,14 +442,16 @@ class changectx(basectx):
                 return
             try:
                 self._node = repo.branchtip(changeid)
                 self._rev = repo.changelog.rev(self._node)
                 return
+            except error.FilteredRepoLookupError:
+                raise
             except error.RepoLookupError:
                 pass
 
-            self._node = repo.changelog._partialmatch(changeid)
+            self._node = repo.unfiltered().changelog._partialmatch(changeid)
             if self._node is not None:
                 self._rev = repo.changelog.rev(self._node)
                 return
 
             # lookup failed
@@ -457,10 +465,14 @@ class changectx(basectx):
             try:
                 if len(changeid) == 20:
                     changeid = hex(changeid)
             except TypeError:
                 pass
+        except (error.FilteredIndexError, error.FilteredLookupError,
+                error.FilteredRepoLookupError):
+            raise error.FilteredRepoLookupError(_("filtered revision '%s'")
+                                                % changeid)
         except IndexError:
             pass
         raise error.RepoLookupError(
             _("unknown revision '%s'") % changeid)
 
diff --git a/tests/test-hgweb-commands.t b/tests/test-hgweb-commands.t
--- a/tests/test-hgweb-commands.t
+++ b/tests/test-hgweb-commands.t
@@ -2173,11 +2173,11 @@ proper status for filtered revision
   Status: 404 Not Found\r (esc)
   ETag: *\r (glob) (esc)
   Content-Type: text/plain; charset=ascii\r (esc)
   \r (esc)
   
-  error: unknown revision '5'
+  error: filtered revision '5'
 
 
 
 (filtered rev)
 
@@ -2187,11 +2187,11 @@ proper status for filtered revision
   Status: 404 Not Found\r (esc)
   ETag: *\r (glob) (esc)
   Content-Type: text/plain; charset=ascii\r (esc)
   \r (esc)
   
-  error: unknown revision '4'
+  error: filtered revision '4'
 
 filtered '0' changeset
 
 (create new root)
   $ hg up null
diff --git a/tests/test-log.t b/tests/test-log.t
--- a/tests/test-log.t
+++ b/tests/test-log.t
@@ -1393,11 +1393,11 @@ enable obsolete to test hidden feature
   0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
   $ hg log --template='{rev}:{node}\n' --hidden
   1:a765632148dc55d38c35c4f247c618701886cb2f
   0:9f758d63dcde62d547ebfb08e1e7ee96535f2b05
   $ hg log -r a
-  abort: unknown revision 'a'!
+  abort: filtered revision 'a'!
   [255]
 
 test that parent prevent a changeset to be hidden
 
   $ hg up 1 -q --hidden
diff --git a/tests/test-obsolete.t b/tests/test-obsolete.t
--- a/tests/test-obsolete.t
+++ b/tests/test-obsolete.t
@@ -182,11 +182,11 @@ check that various commands work well wi
   5:5601fb93a350 (draft) [tip ] add new_3_c
   $ hg log -r 6
   abort: unknown revision '6'!
   [255]
   $ hg log -r 4
-  abort: unknown revision '4'!
+  abort: filtered revision '4'!
   [255]
 
 Check that public changeset are not accounted as obsolete:
 
   $ hg --hidden phase --public 2


More information about the Mercurial-devel mailing list