Mercurial > hg
changeset 35494:dd911f95cbda
revsetlang: add utility function to return hash like symbols from the tree
Functionalities like unhiding changesets whose rev/hash is passed by the user
required the knowledge of rev/hashes in the user provided specs. This patch adds
functions which can parse tree object and return a list of such values.
Differential Revision: https://phab.mercurial-scm.org/D1732
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Fri, 15 Dec 2017 04:25:32 +0530 |
parents | 3c9c05a38d78 |
children | 07fdac1d5c66 |
files | mercurial/revsetlang.py |
diffstat | 1 files changed, 31 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revsetlang.py Fri Dec 22 22:19:42 2017 +0530 +++ b/mercurial/revsetlang.py Fri Dec 15 04:25:32 2017 +0530 @@ -661,3 +661,34 @@ if tree[0] == 'func': funcs.add(tree[1][1]) return funcs + +_hashre = util.re.compile('[0-9a-fA-F]{1,40}$') + +def _ishashlikesymbol(symbol): + """returns true if the symbol looks like a hash""" + return _hashre.match(symbol) + +def gethashlikesymbols(tree): + """returns the list of symbols of the tree that look like hashes + + >>> gethashlikesymbols(('dagrange', ('symbol', '3'), ('symbol', 'abe3ff'))) + ['3', 'abe3ff'] + >>> gethashlikesymbols(('func', ('symbol', 'precursors'), ('symbol', '.'))) + [] + >>> gethashlikesymbols(('func', ('symbol', 'precursors'), ('symbol', '34'))) + ['34'] + >>> gethashlikesymbols(('symbol', 'abe3ffZ')) + [] + """ + if not tree: + return [] + + if tree[0] == "symbol": + if _ishashlikesymbol(tree[1]): + return [tree[1]] + elif len(tree) >= 3: + results = [] + for subtree in tree[1:]: + results += gethashlikesymbols(subtree) + return results + return []