revset: store full detail into revsetalias.error for error source distinction
Before this patch, any errors in the declaration of revset alias
aren't detected at all, and there is no information about error source
in the error message.
As a part of preparation for parsing alias declarations and
definitions more strictly, this patch stores full detail into
"revsetalias.error" for error source distinction.
This makes raising "Abort" and warning potential errors just use
"revsetalias.error" without any message composing.
--- a/mercurial/revset.py Sat Jan 10 23:18:11 2015 +0900
+++ b/mercurial/revset.py Sat Jan 10 23:18:11 2015 +0900
@@ -2154,7 +2154,8 @@
# Check for placeholder injection
_checkaliasarg(self.replacement, self.args)
except error.ParseError, inst:
- self.error = parseerrordetail(inst)
+ self.error = _('failed to parse the definition of revset alias'
+ ' "%s": %s') % (self.name, parseerrordetail(inst))
def _getalias(aliases, tree):
"""If tree looks like an unexpanded alias, return it. Return None
@@ -2197,8 +2198,7 @@
alias = _getalias(aliases, tree)
if alias is not None:
if alias.error:
- raise util.Abort(_('failed to parse revset alias "%s": %s') %
- (alias.name, alias.error))
+ raise util.Abort(alias.error)
if alias in expanding:
raise error.ParseError(_('infinite expansion of revset alias "%s" '
'detected') % alias.name)
@@ -2231,9 +2231,7 @@
# warn about problematic (but not referred) aliases
for name, alias in sorted(aliases.iteritems()):
if alias.error and not alias.warned:
- msg = _('failed to parse revset alias "%s": %s'
- ) % (name, alias.error)
- showwarning(_('warning: %s\n') % (msg))
+ showwarning(_('warning: %s\n') % (alias.error))
alias.warned = True
return tree
--- a/tests/test-revset.t Sat Jan 10 23:18:11 2015 +0900
+++ b/tests/test-revset.t Sat Jan 10 23:18:11 2015 +0900
@@ -985,12 +985,12 @@
(range
('symbol', '2')
('symbol', '5')))
- abort: failed to parse revset alias "injectparamasstring2": not a function: _aliasarg
+ abort: failed to parse the definition of revset alias "injectparamasstring2": not a function: _aliasarg
[255]
$ hg debugrevspec --debug --config revsetalias.anotherbadone='branch(' "tip"
('symbol', 'tip')
- warning: failed to parse revset alias "anotherbadone": at 7: not a prefix: end
- warning: failed to parse revset alias "injectparamasstring2": not a function: _aliasarg
+ warning: failed to parse the definition of revset alias "anotherbadone": at 7: not a prefix: end
+ warning: failed to parse the definition of revset alias "injectparamasstring2": not a function: _aliasarg
9
>>> data = file('.hg/hgrc', 'rb').read()
>>> file('.hg/hgrc', 'wb').write(data.replace('_aliasarg', ''))