Show More
@@ -555,6 +555,44 b' def _quote(s):' | |||||
555 | """ |
|
555 | """ | |
556 | return "'%s'" % util.escapestr(pycompat.bytestr(s)) |
|
556 | return "'%s'" % util.escapestr(pycompat.bytestr(s)) | |
557 |
|
557 | |||
|
558 | def _formatargtype(c, arg): | |||
|
559 | if c == 'd': | |||
|
560 | return '%d' % int(arg) | |||
|
561 | elif c == 's': | |||
|
562 | return _quote(arg) | |||
|
563 | elif c == 'r': | |||
|
564 | parse(arg) # make sure syntax errors are confined | |||
|
565 | return '(%s)' % arg | |||
|
566 | elif c == 'n': | |||
|
567 | return _quote(node.hex(arg)) | |||
|
568 | elif c == 'b': | |||
|
569 | try: | |||
|
570 | return _quote(arg.branch()) | |||
|
571 | except AttributeError: | |||
|
572 | raise TypeError | |||
|
573 | raise error.ParseError(_('unexpected revspec format character %s') % c) | |||
|
574 | ||||
|
575 | def _formatlistexp(s, t): | |||
|
576 | l = len(s) | |||
|
577 | if l == 0: | |||
|
578 | return "_list('')" | |||
|
579 | elif l == 1: | |||
|
580 | return _formatargtype(t, s[0]) | |||
|
581 | elif t == 'd': | |||
|
582 | return "_intlist('%s')" % "\0".join('%d' % int(a) for a in s) | |||
|
583 | elif t == 's': | |||
|
584 | return "_list(%s)" % _quote("\0".join(s)) | |||
|
585 | elif t == 'n': | |||
|
586 | return "_hexlist('%s')" % "\0".join(node.hex(a) for a in s) | |||
|
587 | elif t == 'b': | |||
|
588 | try: | |||
|
589 | return "_list('%s')" % "\0".join(a.branch() for a in s) | |||
|
590 | except AttributeError: | |||
|
591 | raise TypeError | |||
|
592 | ||||
|
593 | m = l // 2 | |||
|
594 | return '(%s or %s)' % (_formatlistexp(s[:m], t), _formatlistexp(s[m:], t)) | |||
|
595 | ||||
558 | def formatspec(expr, *args): |
|
596 | def formatspec(expr, *args): | |
559 | ''' |
|
597 | ''' | |
560 | This is a convenience function for using revsets internally, and |
|
598 | This is a convenience function for using revsets internally, and | |
@@ -589,45 +627,6 b' def formatspec(expr, *args):' | |||||
589 | >>> formatspec('%ls', ['a', "'"]) |
|
627 | >>> formatspec('%ls', ['a', "'"]) | |
590 | "_list('a\\\\x00\\\\'')" |
|
628 | "_list('a\\\\x00\\\\'')" | |
591 | ''' |
|
629 | ''' | |
592 |
|
||||
593 | def argtype(c, arg): |
|
|||
594 | if c == 'd': |
|
|||
595 | return '%d' % int(arg) |
|
|||
596 | elif c == 's': |
|
|||
597 | return _quote(arg) |
|
|||
598 | elif c == 'r': |
|
|||
599 | parse(arg) # make sure syntax errors are confined |
|
|||
600 | return '(%s)' % arg |
|
|||
601 | elif c == 'n': |
|
|||
602 | return _quote(node.hex(arg)) |
|
|||
603 | elif c == 'b': |
|
|||
604 | try: |
|
|||
605 | return _quote(arg.branch()) |
|
|||
606 | except AttributeError: |
|
|||
607 | raise TypeError |
|
|||
608 | raise error.ParseError(_('unexpected revspec format character %s') % c) |
|
|||
609 |
|
||||
610 | def listexp(s, t): |
|
|||
611 | l = len(s) |
|
|||
612 | if l == 0: |
|
|||
613 | return "_list('')" |
|
|||
614 | elif l == 1: |
|
|||
615 | return argtype(t, s[0]) |
|
|||
616 | elif t == 'd': |
|
|||
617 | return "_intlist('%s')" % "\0".join('%d' % int(a) for a in s) |
|
|||
618 | elif t == 's': |
|
|||
619 | return "_list(%s)" % _quote("\0".join(s)) |
|
|||
620 | elif t == 'n': |
|
|||
621 | return "_hexlist('%s')" % "\0".join(node.hex(a) for a in s) |
|
|||
622 | elif t == 'b': |
|
|||
623 | try: |
|
|||
624 | return "_list('%s')" % "\0".join(a.branch() for a in s) |
|
|||
625 | except AttributeError: |
|
|||
626 | raise TypeError |
|
|||
627 |
|
||||
628 | m = l // 2 |
|
|||
629 | return '(%s or %s)' % (listexp(s[:m], t), listexp(s[m:], t)) |
|
|||
630 |
|
||||
631 | expr = pycompat.bytestr(expr) |
|
630 | expr = pycompat.bytestr(expr) | |
632 | argiter = iter(args) |
|
631 | argiter = iter(args) | |
633 | ret = [] |
|
632 | ret = [] | |
@@ -660,12 +659,12 b' def formatspec(expr, *args):' | |||||
660 | except IndexError: |
|
659 | except IndexError: | |
661 | raise error.ParseError(_('incomplete revspec format character')) |
|
660 | raise error.ParseError(_('incomplete revspec format character')) | |
662 | try: |
|
661 | try: | |
663 | ret.append(listexp(list(arg), d)) |
|
662 | ret.append(_formatlistexp(list(arg), d)) | |
664 | except (TypeError, ValueError): |
|
663 | except (TypeError, ValueError): | |
665 | raise error.ParseError(_('invalid argument for revspec')) |
|
664 | raise error.ParseError(_('invalid argument for revspec')) | |
666 | else: |
|
665 | else: | |
667 | try: |
|
666 | try: | |
668 | ret.append(argtype(d, arg)) |
|
667 | ret.append(_formatargtype(d, arg)) | |
669 | except (TypeError, ValueError): |
|
668 | except (TypeError, ValueError): | |
670 | raise error.ParseError(_('invalid argument for revspec')) |
|
669 | raise error.ParseError(_('invalid argument for revspec')) | |
671 | pos += 1 |
|
670 | pos += 1 |
General Comments 0
You need to be logged in to leave comments.
Login now