Mercurial > public > mercurial-scm > hg
comparison mercurial/revset.py @ 30783:931a60880df4
revset: add regular expression support to 'desc'
This is a case insensitive predicate like 'author', so it conforms to the
existing behavior of performing a case insensitive regex.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sat, 07 Jan 2017 21:26:32 -0500 |
parents | db38cfc7c29d |
children | 5dd67f0993ce |
comparison
equal
deleted
inserted
replaced
30782:db38cfc7c29d | 30783:931a60880df4 |
---|---|
812 condrepr=('<date %r>', ds)) | 812 condrepr=('<date %r>', ds)) |
813 | 813 |
814 @predicate('desc(string)', safe=True) | 814 @predicate('desc(string)', safe=True) |
815 def desc(repo, subset, x): | 815 def desc(repo, subset, x): |
816 """Search commit message for string. The match is case-insensitive. | 816 """Search commit message for string. The match is case-insensitive. |
817 | |
818 If `string` starts with `re:`, the remainder of the string is treated as | |
819 a regular expression. To match a substring that actually starts with `re:`, | |
820 use the prefix `literal:`. | |
817 """ | 821 """ |
818 # i18n: "desc" is a keyword | 822 # i18n: "desc" is a keyword |
819 ds = encoding.lower(getstring(x, _("desc requires a string"))) | 823 ds = getstring(x, _("desc requires a string")) |
820 | 824 |
821 def matches(x): | 825 kind, pattern, matcher = _substringmatcher(ds, casesensitive=False) |
822 c = repo[x] | 826 |
823 return ds in encoding.lower(c.description()) | 827 return subset.filter(lambda r: matcher(repo[r].description()), |
824 | 828 condrepr=('<desc %r>', ds)) |
825 return subset.filter(matches, condrepr=('<desc %r>', ds)) | |
826 | 829 |
827 def _descendants(repo, subset, x, followfirst=False): | 830 def _descendants(repo, subset, x, followfirst=False): |
828 roots = getset(repo, fullreposet(repo), x) | 831 roots = getset(repo, fullreposet(repo), x) |
829 if not roots: | 832 if not roots: |
830 return baseset() | 833 return baseset() |