D4798: storageutil: consistently raise LookupError (API)

indygreg (Gregory Szorc) phabricator at mercurial-scm.org
Fri Sep 28 20:19:20 EDT 2018


indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  The interface docs say this is supposed to raise LookupError on
  failure. But for invalid revision number input, it could raise
  IndexError because ifileindex.node() is documented to raise
  IndexError.
  
  lookup() for files isn't used that much (pretty much just in
  basefilectx in core AFAICT). And callers should already be catching
  LookupError. So I don't anticipate that much fallout from this
  change.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D4798

AFFECTED FILES
  mercurial/testing/storage.py
  mercurial/utils/storageutil.py

CHANGE DETAILS

diff --git a/mercurial/utils/storageutil.py b/mercurial/utils/storageutil.py
--- a/mercurial/utils/storageutil.py
+++ b/mercurial/utils/storageutil.py
@@ -121,7 +121,10 @@
     Raises ``error.LookupError`` on failure.
     """
     if isinstance(fileid, int):
-        return store.node(fileid)
+        try:
+            return store.node(fileid)
+        except IndexError:
+            raise error.LookupError(fileid, identifier, _('no match found'))
 
     if len(fileid) == 20:
         try:
diff --git a/mercurial/testing/storage.py b/mercurial/testing/storage.py
--- a/mercurial/testing/storage.py
+++ b/mercurial/testing/storage.py
@@ -199,13 +199,13 @@
         with self.assertRaises(error.LookupError):
             f.lookup(hex(node)[0:12])
 
-        with self.assertRaises(IndexError):
+        with self.assertRaises(error.LookupError):
             f.lookup(-2)
 
         with self.assertRaises(error.LookupError):
             f.lookup(b'-2')
 
-        with self.assertRaises(IndexError):
+        with self.assertRaises(error.LookupError):
             f.lookup(1)
 
         with self.assertRaises(error.LookupError):



To: indygreg, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list