Commit 9ca89ac1 authored by Sigurd Schneider's avatar Sigurd Schneider Committed by LUCI CQ

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: 's avatarJosip Sokcevic <sokcevic@google.com>
Reviewed-by: 's avatarDirk Pranke <dpranke@google.com>
parent cf49cb82
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment