##// END OF EJS Templates
revset: fix infinite alias expansion detection...
Patrick Mezard -
r16772:30e46d71 stable
parent child Browse files
Show More
@@ -1377,16 +1377,15 b' def _expandaliases(aliases, tree, expand'
1377 1377 raise error.ParseError(_('infinite expansion of revset alias "%s" '
1378 1378 'detected') % alias.name)
1379 1379 expanding.append(alias)
1380 result = alias.replacement
1380 result = _expandaliases(aliases, alias.replacement, expanding)
1381 expanding.pop()
1381 1382 if alias.args is not None:
1382 1383 l = getlist(tree[2])
1383 1384 if len(l) != len(alias.args):
1384 1385 raise error.ParseError(
1385 1386 _('invalid number of arguments: %s') % len(l))
1387 l = [_expandaliases(aliases, a, []) for a in l]
1386 1388 result = _expandargs(result, dict(zip(alias.args, l)))
1387 # Recurse in place, the base expression may have been rewritten
1388 result = _expandaliases(aliases, result, expanding)
1389 expanding.pop()
1390 1389 else:
1391 1390 result = tuple(_expandaliases(aliases, t, expanding)
1392 1391 for t in tree)
@@ -520,6 +520,27 b' test infinite recursion'
520 520 hg: parse error: infinite expansion of revset alias "recurse1" detected
521 521 [255]
522 522
523 $ echo 'level1($1, $2) = $1 or $2' >> .hg/hgrc
524 $ echo 'level2($1, $2) = level1($2, $1)' >> .hg/hgrc
525 $ try "level2(level1(1, 2), 3)"
526 (func
527 ('symbol', 'level2')
528 (list
529 (func
530 ('symbol', 'level1')
531 (list
532 ('symbol', '1')
533 ('symbol', '2')))
534 ('symbol', '3')))
535 (or
536 ('symbol', '3')
537 (or
538 ('symbol', '1')
539 ('symbol', '2')))
540 3
541 1
542 2
543
523 544 test nesting and variable passing
524 545
525 546 $ echo 'nested($1) = nested2($1)' >> .hg/hgrc
General Comments 0
You need to be logged in to leave comments. Login now