[PATCH 2 of 2] revset: define table of sort() key functions
Yuya Nishihara
yuya at tcha.org
Wed May 25 10:37:55 EDT 2016
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1463223120 -32400
# Sat May 14 19:52:00 2016 +0900
# Node ID edbf799691811456b2fc052750221672d4ee3e43
# Parent 63b2515cfc673094cc085ef929aeb34ace042e74
revset: define table of sort() key functions
This should be more readable than big "if" branch.
diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -1834,6 +1834,15 @@ def roots(repo, subset, x):
return True
return subset & s.filter(filter, condrepr='<roots>')
+_sortkeyfuncs = {
+ 'rev': lambda c: c.rev(),
+ 'branch': lambda c: c.branch(),
+ 'desc': lambda c: c.description(),
+ 'user': lambda c: c.user(),
+ 'author': lambda c: c.user(),
+ 'date': lambda c: c.date()[0],
+}
+
@predicate('sort(set[, [-]key...])', safe=True)
def sort(repo, subset, x):
"""Sort set by keys. The default sort order is ascending, specify a key
@@ -1870,17 +1879,9 @@ def sort(repo, subset, x):
reverse = (k[0] == '-')
if reverse:
k = k[1:]
- if k == 'rev':
- ctxs.sort(key=lambda c: c.rev(), reverse=reverse)
- elif k == 'branch':
- ctxs.sort(key=lambda c: c.branch(), reverse=reverse)
- elif k == 'desc':
- ctxs.sort(key=lambda c: c.description(), reverse=reverse)
- elif k in 'user author':
- ctxs.sort(key=lambda c: c.user(), reverse=reverse)
- elif k == 'date':
- ctxs.sort(key=lambda c: c.date()[0], reverse=reverse)
- else:
+ try:
+ ctxs.sort(key=_sortkeyfuncs[k], reverse=reverse)
+ except KeyError:
raise error.ParseError(_("unknown sort key %r") % fk)
return baseset([c.rev() for c in ctxs])
More information about the Mercurial-devel
mailing list