Show More
@@ -2037,6 +2037,12 b' class revsetalias(object):' | |||
|
2037 | 2037 | funcre = re.compile('^([^(]+)\(([^)]+)\)$') |
|
2038 | 2038 | args = None |
|
2039 | 2039 | |
|
2040 | # error message at parsing, or None | |
|
2041 | error = None | |
|
2042 | # whether own `error` information is already shown or not. | |
|
2043 | # this avoids showing same warning multiple times at each `findaliases`. | |
|
2044 | warned = False | |
|
2045 | ||
|
2040 | 2046 | def __init__(self, name, value): |
|
2041 | 2047 | '''Aliases like: |
|
2042 | 2048 | |
@@ -2056,11 +2062,17 b' class revsetalias(object):' | |||
|
2056 | 2062 | self.name = name |
|
2057 | 2063 | self.tree = ('symbol', name) |
|
2058 | 2064 | |
|
2059 | self.replacement, pos = parse(value) | |
|
2060 |
|
|
|
2061 | raise error.ParseError(_('invalid token'), pos) | |
|
2062 | # Check for placeholder injection | |
|
2063 | _checkaliasarg(self.replacement, self.args) | |
|
2065 | try: | |
|
2066 | self.replacement, pos = parse(value) | |
|
2067 | if pos != len(value): | |
|
2068 | raise error.ParseError(_('invalid token'), pos) | |
|
2069 | # Check for placeholder injection | |
|
2070 | _checkaliasarg(self.replacement, self.args) | |
|
2071 | except error.ParseError, inst: | |
|
2072 | if len(inst.args) > 1: | |
|
2073 | self.error = _('at %s: %s') % (inst.args[1], inst.args[0]) | |
|
2074 | else: | |
|
2075 | self.error = inst.args[0] | |
|
2064 | 2076 | |
|
2065 | 2077 | def _getalias(aliases, tree): |
|
2066 | 2078 | """If tree looks like an unexpanded alias, return it. Return None |
@@ -2102,6 +2114,9 b' def _expandaliases(aliases, tree, expand' | |||
|
2102 | 2114 | return tree |
|
2103 | 2115 | alias = _getalias(aliases, tree) |
|
2104 | 2116 | if alias is not None: |
|
2117 | if alias.error: | |
|
2118 | raise util.Abort(_('failed to parse revset alias "%s": %s') % | |
|
2119 | (alias.name, alias.error)) | |
|
2105 | 2120 | if alias in expanding: |
|
2106 | 2121 | raise error.ParseError(_('infinite expansion of revset alias "%s" ' |
|
2107 | 2122 | 'detected') % alias.name) |
@@ -2123,13 +2138,22 b' def _expandaliases(aliases, tree, expand' | |||
|
2123 | 2138 | for t in tree) |
|
2124 | 2139 | return result |
|
2125 | 2140 | |
|
2126 | def findaliases(ui, tree): | |
|
2141 | def findaliases(ui, tree, showwarning=None): | |
|
2127 | 2142 | _checkaliasarg(tree) |
|
2128 | 2143 | aliases = {} |
|
2129 | 2144 | for k, v in ui.configitems('revsetalias'): |
|
2130 | 2145 | alias = revsetalias(k, v) |
|
2131 | 2146 | aliases[alias.name] = alias |
|
2132 |
|
|
|
2147 | tree = _expandaliases(aliases, tree, [], {}) | |
|
2148 | if showwarning: | |
|
2149 | # warn about problematic (but not referred) aliases | |
|
2150 | for name, alias in sorted(aliases.iteritems()): | |
|
2151 | if alias.error and not alias.warned: | |
|
2152 | msg = _('failed to parse revset alias "%s": %s' | |
|
2153 | ) % (name, alias.error) | |
|
2154 | showwarning(_('warning: %s\n') % (msg)) | |
|
2155 | alias.warned = True | |
|
2156 | return tree | |
|
2133 | 2157 | |
|
2134 | 2158 | def parse(spec, lookup=None): |
|
2135 | 2159 | p = parser.parser(tokenize, elements) |
@@ -2145,7 +2169,7 b' def match(ui, spec, repo=None):' | |||
|
2145 | 2169 | if (pos != len(spec)): |
|
2146 | 2170 | raise error.ParseError(_("invalid token"), pos) |
|
2147 | 2171 | if ui: |
|
2148 | tree = findaliases(ui, tree) | |
|
2172 | tree = findaliases(ui, tree, showwarning=ui.warn) | |
|
2149 | 2173 | weight, tree = optimize(tree, True) |
|
2150 | 2174 | def mfunc(repo, subset): |
|
2151 | 2175 | if util.safehasattr(subset, 'isascending'): |
@@ -956,11 +956,19 b' far away.' | |||
|
956 | 956 | (range |
|
957 | 957 | ('symbol', '2') |
|
958 | 958 | ('symbol', '5'))) |
|
959 |
|
|
|
959 | abort: failed to parse revset alias "injectparamasstring2": not a function: _aliasarg | |
|
960 | 960 | [255] |
|
961 | $ hg debugrevspec --debug --config revsetalias.anotherbadone='branch(' "tip" | |
|
962 | ('symbol', 'tip') | |
|
963 | warning: failed to parse revset alias "anotherbadone": at 7: not a prefix: end | |
|
964 | warning: failed to parse revset alias "injectparamasstring2": not a function: _aliasarg | |
|
965 | 9 | |
|
961 | 966 | >>> data = file('.hg/hgrc', 'rb').read() |
|
962 | 967 | >>> file('.hg/hgrc', 'wb').write(data.replace('_aliasarg', '')) |
|
963 | 968 | |
|
969 | $ try 'tip' | |
|
970 | ('symbol', 'tip') | |
|
971 | 9 | |
|
964 | 972 | $ try 'd(2:5)' |
|
965 | 973 | (func |
|
966 | 974 | ('symbol', 'd') |
General Comments 0
You need to be logged in to leave comments.
Login now