Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/revsetlang.py @ 35560:3a8810c1b9bc
revsetlang: use iterator to track current argument in formatspec()
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 01 Apr 2017 17:04:49 +0900 |
parents | a480551bd1b4 |
children | 4c3a4bb31c0e |
comparison
equal
deleted
inserted
replaced
35559:a480551bd1b4 | 35560:3a8810c1b9bc |
---|---|
618 | 618 |
619 m = l // 2 | 619 m = l // 2 |
620 return '(%s or %s)' % (listexp(s[:m], t), listexp(s[m:], t)) | 620 return '(%s or %s)' % (listexp(s[:m], t), listexp(s[m:], t)) |
621 | 621 |
622 expr = pycompat.bytestr(expr) | 622 expr = pycompat.bytestr(expr) |
623 argiter = iter(args) | |
623 ret = [] | 624 ret = [] |
624 pos = 0 | 625 pos = 0 |
625 arg = 0 | |
626 while pos < len(expr): | 626 while pos < len(expr): |
627 q = expr.find('%', pos) | 627 q = expr.find('%', pos) |
628 if q < 0: | 628 if q < 0: |
629 ret.append(expr[pos:]) | 629 ret.append(expr[pos:]) |
630 break | 630 break |
632 pos = q + 1 | 632 pos = q + 1 |
633 d = expr[pos] | 633 d = expr[pos] |
634 if d == '%': | 634 if d == '%': |
635 ret.append(d) | 635 ret.append(d) |
636 elif d in 'dsnbr': | 636 elif d in 'dsnbr': |
637 ret.append(argtype(d, args[arg])) | 637 ret.append(argtype(d, next(argiter))) |
638 arg += 1 | |
639 elif d == 'l': | 638 elif d == 'l': |
640 # a list of some type | 639 # a list of some type |
641 pos += 1 | 640 pos += 1 |
642 d = expr[pos] | 641 d = expr[pos] |
643 ret.append(listexp(list(args[arg]), d)) | 642 ret.append(listexp(list(next(argiter)), d)) |
644 arg += 1 | |
645 else: | 643 else: |
646 raise error.Abort(_('unexpected revspec format character %s') % d) | 644 raise error.Abort(_('unexpected revspec format character %s') % d) |
647 pos += 1 | 645 pos += 1 |
648 | 646 |
649 return ''.join(ret) | 647 return ''.join(ret) |