You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
depot_tools/git_utils/git-tree-prune

86 lines
2.4 KiB
Python

#!/usr/bin/env python
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Lists branches with closed and abandoned issues."""
import optparse
import os
import sys
import urllib2
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DEPOT_TOOLS_DIR = os.path.dirname(BASE_DIR)
sys.path.insert(0, DEPOT_TOOLS_DIR)
import git_cl
def get_branches():
"""Get list of all local git branches."""
return [Branch(l[2:]) for l in git_cl.RunGit(["branch"]).splitlines()]
class Branch(git_cl.Changelist):
def __init__(self, name):
git_cl.Changelist.__init__(self, branchref=name)
self._issue_status = None
def GetStatus(self):
if not self._issue_status:
if self.GetIssue():
try:
issue_properties = self.RpcServer().get_issue_properties(
self.GetIssue(), None)
if issue_properties['closed']:
self._issue_status = 'closed'
else:
self._issue_status = 'pending'
except urllib2.HTTPError, e:
if e.code == 404:
self._issue_status = 'abandoned'
else:
self._issue_status = 'no-issue'
return self._issue_status
def main():
parser = optparse.OptionParser(usage=sys.modules['__main__'].__doc__)
options, args = parser.parse_args()
if args:
parser.error('Unsupported arg: %s' % args)
branches = get_branches()
filtered = { 'closed' : [],
'pending' : [],
'abandoned' : [],
'no-issue' : []}
for branch in branches:
filtered[branch.GetStatus()].append(branch)
print "# Branches with closed issues"
for branch in filtered['closed']:
print "git branch -D %s # Issue %s is closed." % (branch.GetBranch(),
branch.GetIssue())
print "\n# Pending Branches"
for branch in filtered['pending']:
print "# Branch %s - Issue %s" % (branch.GetBranch(), branch.GetIssue())
print "\n# Branches with abandoned issues"
for branch in filtered['abandoned']:
print "# Branch %s - was issue %s" % (
branch.GetBranch(), branch.GetIssue())
print "\n# Branches without associated issues"
for branch in filtered['no-issue']:
print "# Branch %s" % (branch.GetBranch())
return 0
if __name__ == '__main__':
sys.exit(main())