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)