Mercurial > public > mercurial-scm > hg
comparison mercurial/revsetlang.py @ 41297:b1ea90613af3 stable
revset: introduce an internal `_rev` predicate for '%d' usage
In 24a1f67bb75a, we aligned "%d" behavior on "%ld" one, invalid revisions got
silently ignored. However, soon after in 8aca89a694d4 and 26b0a7514f01, a side
effect changed the behavior of "%ld" to no longer silently filter invalid
revisions.
After discussion on the mailing list, it was decided to align on the new %ld
behavior:
https://www.mercurial-scm.org/pipermail/mercurial-devel/2019-January/127291.html
This changeset introduce a '_rev()' predicated that keep the benefit from
24a1f67bb75a while enforcing a more strict checking on the inputs.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Fri, 18 Jan 2019 14:21:47 +0100 |
parents | 26b0a7514f01 |
children | 59638c6fcb70 |
comparison
equal
deleted
inserted
replaced
41296:d82dd55024e7 | 41297:b1ea90613af3 |
---|---|
583 """ | 583 """ |
584 return "'%s'" % stringutil.escapestr(pycompat.bytestr(s)) | 584 return "'%s'" % stringutil.escapestr(pycompat.bytestr(s)) |
585 | 585 |
586 def _formatargtype(c, arg): | 586 def _formatargtype(c, arg): |
587 if c == 'd': | 587 if c == 'd': |
588 return 'rev(%d)' % int(arg) | 588 return '_rev(%d)' % int(arg) |
589 elif c == 's': | 589 elif c == 's': |
590 return _quote(arg) | 590 return _quote(arg) |
591 elif c == 'r': | 591 elif c == 'r': |
592 if not isinstance(arg, bytes): | 592 if not isinstance(arg, bytes): |
593 raise TypeError | 593 raise TypeError |
661 and 'p' specifies a list of function parameters of that type. | 661 and 'p' specifies a list of function parameters of that type. |
662 | 662 |
663 >>> formatspec(b'%r:: and %lr', b'10 or 11', (b"this()", b"that()")) | 663 >>> formatspec(b'%r:: and %lr', b'10 or 11', (b"this()", b"that()")) |
664 '(10 or 11):: and ((this()) or (that()))' | 664 '(10 or 11):: and ((this()) or (that()))' |
665 >>> formatspec(b'%d:: and not %d::', 10, 20) | 665 >>> formatspec(b'%d:: and not %d::', 10, 20) |
666 'rev(10):: and not rev(20)::' | 666 '_rev(10):: and not _rev(20)::' |
667 >>> formatspec(b'%ld or %ld', [], [1]) | 667 >>> formatspec(b'%ld or %ld', [], [1]) |
668 "_list('') or rev(1)" | 668 "_list('') or _rev(1)" |
669 >>> formatspec(b'keyword(%s)', b'foo\\xe9') | 669 >>> formatspec(b'keyword(%s)', b'foo\\xe9') |
670 "keyword('foo\\\\xe9')" | 670 "keyword('foo\\\\xe9')" |
671 >>> b = lambda: b'default' | 671 >>> b = lambda: b'default' |
672 >>> b.branch = b | 672 >>> b.branch = b |
673 >>> formatspec(b'branch(%b)', b) | 673 >>> formatspec(b'branch(%b)', b) |