changeset 13447:931a72e00efa stable

introduce new RequirementError (issue2649) This improves the misleading error message $ hg identify abort: there is no Mercurial repository here (.hg not found)! to the more explicit $ hg identify abort: requirement 'fake' not supported! for all commands in commands.optionalrepo, which includes the identify and serve commands in particular. This is for the case when a new entry in .hg/requires will be defined in a future Mercurial release.
author Adrian Buehlmann <adrian@cadifra.com>
date Fri, 18 Feb 2011 20:25:25 +0100
parents 1e497df514e2
children 97b69883e929
files mercurial/dispatch.py mercurial/error.py mercurial/localrepo.py mercurial/statichttprepo.py tests/test-commit.t tests/test-identify.t
diffstat 6 files changed, 32 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/dispatch.py	Thu Feb 10 09:03:06 2011 +0100
+++ b/mercurial/dispatch.py	Fri Feb 18 20:25:25 2011 +0100
@@ -576,6 +576,8 @@
             if not repo.local():
                 raise util.Abort(_("repository '%s' is not local") % path)
             ui.setconfig("bundle", "mainreporoot", repo.root)
+        except error.RequirementError:
+            raise
         except error.RepoError:
             if cmd not in commands.optionalrepo.split():
                 if args and not path: # try to infer -R from command args
--- a/mercurial/error.py	Thu Feb 10 09:03:06 2011 +0100
+++ b/mercurial/error.py	Fri Feb 18 20:25:25 2011 +0100
@@ -51,6 +51,10 @@
 class CapabilityError(RepoError):
     pass
 
+class RequirementError(RepoError):
+    """Exception raised if .hg/requires has an unknown entry."""
+    pass
+
 class LockError(IOError):
     def __init__(self, errno, strerror, filename, desc):
         IOError.__init__(self, errno, strerror, filename)
--- a/mercurial/localrepo.py	Thu Feb 10 09:03:06 2011 +0100
+++ b/mercurial/localrepo.py	Fri Feb 18 20:25:25 2011 +0100
@@ -75,7 +75,8 @@
                 if inst.errno != errno.ENOENT:
                     raise
             for r in requirements - self.supported:
-                raise error.RepoError(_("requirement '%s' not supported") % r)
+                raise error.RequirementError(
+                          _("requirement '%s' not supported") % r)
 
         self.sharedpath = self.path
         try:
--- a/mercurial/statichttprepo.py	Thu Feb 10 09:03:06 2011 +0100
+++ b/mercurial/statichttprepo.py	Fri Feb 18 20:25:25 2011 +0100
@@ -112,7 +112,8 @@
         # check them
         for r in requirements:
             if r not in self.supported:
-                raise error.RepoError(_("requirement '%s' not supported") % r)
+                raise error.RequirementError(
+                        _("requirement '%s' not supported") % r)
 
         # setup store
         self.store = store.store(requirements, self.path, opener)
--- a/tests/test-commit.t	Thu Feb 10 09:03:06 2011 +0100
+++ b/tests/test-commit.t	Fri Feb 18 20:25:25 2011 +0100
@@ -92,6 +92,15 @@
   $ hg commit -d '' -m commit-no-date
   $ hg tip --template '{date|isodate}\n' | grep '1970'
   [1]
+
+Make sure we do not obscure unknown requires file entries (issue2649)
+
+  $ echo foo >> foo
+  $ echo fake >> .hg/requires
+  $ hg commit -m bla
+  abort: requirement 'fake' not supported!
+  [255]
+
   $ cd ..
 
 
--- a/tests/test-identify.t	Thu Feb 10 09:03:06 2011 +0100
+++ b/tests/test-identify.t	Fri Feb 18 20:25:25 2011 +0100
@@ -67,3 +67,16 @@
   $ hg id -t http://localhost:$HGPORT1/
   abort: can't query remote revision number, branch, or tags
   [255]
+
+Make sure we do not obscure unknown requires file entries (issue2649)
+
+  $ echo fake >> .hg/requires
+  $ hg id
+  abort: requirement 'fake' not supported!
+  [255]
+
+  $ cd ..
+  $ hg id test
+  abort: requirement 'fake' not supported!
+  [255]
+