hgweb: show correct error message for i18n environment
If exception is error.LookupError and running in i18n environment,
below condition is always true.
Because msg is translated and dosen't contain 'manifest'.
if util.safehasattr(err, 'name') and 'manifest' not in msg:
This patch creates a new exception class and uses it instead of
string match.
--- a/mercurial/context.py Mon Apr 01 18:48:12 2013 -0300
+++ b/mercurial/context.py Fri Feb 15 18:07:14 2013 +0900
@@ -291,16 +291,16 @@
try:
return self._manifest[path], self._manifest.flags(path)
except KeyError:
- raise error.LookupError(self._node, path,
- _('not found in manifest'))
+ raise error.ManifestLookupError(self._node, path,
+ _('not found in manifest'))
if '_manifestdelta' in self.__dict__ or path in self.files():
if path in self._manifestdelta:
return (self._manifestdelta[path],
self._manifestdelta.flags(path))
node, flag = self._repo.manifest.find(self._changeset[0], path)
if not node:
- raise error.LookupError(self._node, path,
- _('not found in manifest'))
+ raise error.ManifestLookupError(self._node, path,
+ _('not found in manifest'))
return node, flag
--- a/mercurial/error.py Mon Apr 01 18:48:12 2013 -0300
+++ b/mercurial/error.py Fri Feb 15 18:07:14 2013 +0900
@@ -27,6 +27,9 @@
def __str__(self):
return RevlogError.__str__(self)
+class ManifestLookupError(LookupError):
+ pass
+
class CommandError(Exception):
"""Exception raised on errors in parsing the command line."""
--- a/mercurial/hgweb/hgweb_mod.py Mon Apr 01 18:48:12 2013 -0300
+++ b/mercurial/hgweb/hgweb_mod.py Fri Feb 15 18:07:14 2013 +0900
@@ -245,7 +245,8 @@
except (error.LookupError, error.RepoLookupError), err:
req.respond(HTTP_NOT_FOUND, ctype)
msg = str(err)
- if util.safehasattr(err, 'name') and 'manifest' not in msg:
+ if (util.safehasattr(err, 'name') and
+ not isinstance(err, error.ManifestLookupError)):
msg = 'revision not found: %s' % err.name
return tmpl('error', error=msg)
except (error.RepoError, error.RevlogError), inst: