Chromium Code Reviews| Index: git_find_releases.py |
| diff --git a/git_find_releases.py b/git_find_releases.py |
| new file mode 100755 |
| index 0000000000000000000000000000000000000000..1edce2e49130e47aae96e6cab4234100674a5319 |
| --- /dev/null |
| +++ b/git_find_releases.py |
| @@ -0,0 +1,56 @@ |
| +#!/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 NameForCommit(sha1): |
|
Primiano Tucci (use gerrit)
2015/09/08 19:27:27
Nit: GetNameForCommit (same below)
scottmg
2015/09/08 21:21:06
Done.
|
| + return re.sub(r'~.*$', '', git.run('name-rev', '--tags', '--name-only', sha1)) |
| + |
| + |
| +def MergesForCommit(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: |
| + print 'commit %s was:' % arg |
| + print ' initially in ' + NameForCommit(arg) |
| + merges = MergesForCommit(arg) |
| + for merge in merges: |
| + print ' merged to ' + NameForCommit(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: |
|
Primiano Tucci (use gerrit)
2015/09/08 19:27:27
Thanks for the civilization and not bailing out wi
|
| + sys.stderr.write('interrupted\n') |
| + sys.exit(1) |