| Index: git-utils/git-tree-prune
|
| ===================================================================
|
| --- git-utils/git-tree-prune (revision 0)
|
| +++ git-utils/git-tree-prune (revision 0)
|
| @@ -0,0 +1,79 @@
|
| +#!/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.
|
| +
|
| +"""A tool for listing branches with closed and abandoned issues."""
|
| +
|
| +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(argv):
|
| + 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(sys.argv[1:]))
|
|
|
| Property changes on: git-utils/git-tree-prune
|
| ___________________________________________________________________
|
| Added: svn:executable
|
| + *
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|