| Index: git_find_releases.py
|
| diff --git a/git_find_releases.py b/git_find_releases.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..76e114eedd9a5bc1ce0ba3c8266945110a802680
|
| --- /dev/null
|
| +++ b/git_find_releases.py
|
| @@ -0,0 +1,60 @@
|
| +#!/usr/bin/env python
|
| +# Copyright 2015 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.
|
| +"""Usage: %prog <commit>*
|
| +
|
| +Given a commit, finds the release where it first appeared (e.g. 47.0.2500.0) as
|
| +well as attempting to determine the branches to which it was merged.
|
| +
|
| +Note that it uses the "cherry picked from" annotation to find merges, so it will
|
| +only work on merges that followed the "use cherry-pick -x" instructions.
|
| +"""
|
| +
|
| +import optparse
|
| +import re
|
| +import sys
|
| +
|
| +import git_common as git
|
| +
|
| +
|
| +def GetNameForCommit(sha1):
|
| + return re.sub(r'~.*$', '', git.run('name-rev', '--tags', '--name-only', sha1))
|
| +
|
| +
|
| +def GetMergesForCommit(sha1):
|
| + return [c.split()[0] for c in
|
| + git.run('log', '--oneline', '-F', '--all', '--no-abbrev', '--grep',
|
| + 'cherry picked from commit %s' % sha1).splitlines()]
|
| +
|
| +
|
| +def main():
|
| + parser = optparse.OptionParser(usage=sys.modules[__name__].__doc__)
|
| + _, args = parser.parse_args()
|
| +
|
| + if len(args) == 0:
|
| + parser.error('Need at least one commit.')
|
| +
|
| + for arg in args:
|
| + commit_name = GetNameForCommit(arg)
|
| + if not commit_name:
|
| + print '%s not found' % arg
|
| + return 1
|
| + print 'commit %s was:' % arg
|
| + print ' initially in ' + commit_name
|
| + merges = GetMergesForCommit(arg)
|
| + for merge in merges:
|
| + print ' merged to ' + GetNameForCommit(merge) + ' (as ' + merge + ')'
|
| + if not merges:
|
| + print 'No merges found. If this seems wrong, be sure that you did:'
|
| + print ' git fetch origin && gclient sync --with_branch_heads'
|
| +
|
| + return 0
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + try:
|
| + sys.exit(main())
|
| + except KeyboardInterrupt:
|
| + sys.stderr.write('interrupted\n')
|
| + sys.exit(1)
|
|
|