Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/revset.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 | 5affe1583e1d |
children | 431cf2c8c839 |
comparison
equal
deleted
inserted
replaced
41296:d82dd55024e7 | 41297:b1ea90613af3 |
---|---|
1763 raise error.ParseError(_("rev expects a number")) | 1763 raise error.ParseError(_("rev expects a number")) |
1764 if l not in repo.changelog and l not in (node.nullrev, node.wdirrev): | 1764 if l not in repo.changelog and l not in (node.nullrev, node.wdirrev): |
1765 return baseset() | 1765 return baseset() |
1766 return subset & baseset([l]) | 1766 return subset & baseset([l]) |
1767 | 1767 |
1768 @predicate('_rev(number)', safe=True) | |
1769 def _rev(repo, subset, x): | |
1770 # internal version of "rev(x)" that raise error if "x" is invalid | |
1771 # i18n: "rev" is a keyword | |
1772 l = getargs(x, 1, 1, _("rev requires one argument")) | |
1773 try: | |
1774 # i18n: "rev" is a keyword | |
1775 l = int(getstring(l[0], _("rev requires a number"))) | |
1776 except (TypeError, ValueError): | |
1777 # i18n: "rev" is a keyword | |
1778 raise error.ParseError(_("rev expects a number")) | |
1779 repo.changelog.node(l) # check that the rev exists | |
1780 return subset & baseset([l]) | |
1781 | |
1768 @predicate('revset(set)', safe=True, takeorder=True) | 1782 @predicate('revset(set)', safe=True, takeorder=True) |
1769 def revsetpredicate(repo, subset, x, order): | 1783 def revsetpredicate(repo, subset, x, order): |
1770 """Strictly interpret the content as a revset. | 1784 """Strictly interpret the content as a revset. |
1771 | 1785 |
1772 The content of this special predicate will be strictly interpreted as a | 1786 The content of this special predicate will be strictly interpreted as a |