Add option to git cl st to sort by committer date

Some developers want to see the branches with recent commits first.
This CL adds the option --dateorder to git cl st which sorts branches
by the committer date of the most recent branch.

Change-Id: Ibdf3fc35ea784521a3e99b374535f822bb83a55e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/2521573
Commit-Queue: Sigurd Schneider <sigurds@chromium.org>
Reviewed-by: Josip Sokcevic <sokcevic@google.com>
Reviewed-by: Dirk Pranke <dpranke@google.com>
changes/73/2521573/7
Sigurd Schneider 5 years ago committed by LUCI CQ
parent cf49cb8206
commit 9ca89ac1f4

@ -939,7 +939,11 @@ class Changelist(object):
with great care.
"""
def __init__(self, branchref=None, issue=None, codereview_host=None):
def __init__(self,
branchref=None,
issue=None,
codereview_host=None,
commit_date=None):
"""Create a new ChangeList instance.
**kwargs will be passed directly to Gerrit implementation.
@ -956,6 +960,7 @@ class Changelist(object):
self.branch = scm.GIT.ShortBranchName(self.branchref)
else:
self.branch = None
self.commit_date = commit_date
self.upstream_branch = None
self.lookedup_issue = False
self.issue = issue or None
@ -994,6 +999,10 @@ class Changelist(object):
"""Extends the list of users to cc on this CL based on the changed files."""
self.more_cc.extend(more_cc)
def GetCommitDate(self):
"""Returns the commit date as provided in the constructor"""
return self.commit_date
def GetBranch(self):
"""Returns the short branch name, e.g. 'main'."""
if not self.branch:
@ -2655,7 +2664,10 @@ class ChangeDescription(object):
bug_regexp = re.compile(self.BUG_LINE)
fixed_regexp = re.compile(self.FIXED_LINE)
prefix = settings.GetBugPrefix()
has_issue = lambda l: bug_regexp.match(l) or fixed_regexp.match(l)
def has_issue(l):
return bug_regexp.match(l) or fixed_regexp.match(l)
if not any((has_issue(line) for line in self._description_lines)):
self.append_footer('Bug: %s' % prefix)
@ -3497,6 +3509,10 @@ def CMDstatus(parser, args):
'-i', '--issue', type=int,
help='Operate on this issue instead of the current branch\'s implicit '
'issue. Requires --field to be set.')
parser.add_option('-d',
'--dateorder',
action='store_true',
help='Order branches by committer date.')
options, args = parser.parse_args(args)
if args:
parser.error('Unsupported args: %s' % args)
@ -3525,14 +3541,17 @@ def CMDstatus(parser, args):
print(url)
return 0
branches = RunGit(['for-each-ref', '--format=%(refname)', 'refs/heads'])
branches = RunGit([
'for-each-ref', '--format=%(refname) %(committerdate:unix)', 'refs/heads'
])
if not branches:
print('No local branch found.')
return 0
changes = [
Changelist(branchref=b)
for b in branches.splitlines()]
Changelist(branchref=b, commit_date=ct)
for b, ct in map(lambda line: line.split(' '), branches.splitlines())
]
print('Branches associated with reviews:')
output = get_cl_statuses(changes,
fine_grained=not options.fast,
@ -3558,7 +3577,13 @@ def CMDstatus(parser, args):
branch_statuses = {}
alignment = max(5, max(len(FormatBranchName(c.GetBranch())) for c in changes))
for cl in sorted(changes, key=lambda c: c.GetBranch()):
if options.committerdate:
sorted_changes = sorted(changes,
key=lambda c: c.GetCommitDate(),
reverse=True)
else:
sorted_changes = sorted(changes, key=lambda c: c.GetBranch())
for cl in sorted_changes:
branch = cl.GetBranch()
while branch not in branch_statuses:
c, status = next(output)
@ -5199,6 +5224,7 @@ def CMDlol(parser, args):
class OptionParser(optparse.OptionParser):
"""Creates the option parse and add --verbose support."""
def __init__(self, *args, **kwargs):
optparse.OptionParser.__init__(
self, *args, prog='git cl', version=__version__, **kwargs)

Loading…
Cancel
Save