Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(854)

Unified Diff: tools/release/mergeinfo.py

Issue 1341303002: [Release] Distinguish between merges and follow-up CLs (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fixed nit Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/release/search_related_commits.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/release/mergeinfo.py
diff --git a/tools/release/mergeinfo.py b/tools/release/mergeinfo.py
index bf07e9f94af9ed47c959fbd58384b9ae21679649..b7fedbcc80ab168e729a06fcc9aa06f7fcbd42f8 100755
--- a/tools/release/mergeinfo.py
+++ b/tools/release/mergeinfo.py
@@ -7,29 +7,111 @@ import argparse
import os
import sys
-from subprocess import call
-
-def print_analysis(gitWorkingDir, hashToSearch):
- print '1.) Info'
- git_execute(gitWorkingDir, ['status'])
- print '2.) Searching for "' + hashToSearch + '"'
- print '=====================ORIGINAL COMMIT START====================='
- git_execute(gitWorkingDir, ['show', hashToSearch])
+from search_related_commits import git_execute
+
+GIT_OPTION_HASH_ONLY = '--pretty=format:%H'
+GIT_OPTION_NO_DIFF = '--quiet'
+GIT_OPTION_ONELINE = '--oneline'
+
+def describe_commit(git_working_dir, hash_to_search, one_line=False):
+ if one_line:
+ return git_execute(git_working_dir, ['show',
+ GIT_OPTION_NO_DIFF,
+ GIT_OPTION_ONELINE,
+ hash_to_search]).strip()
+ return git_execute(git_working_dir, ['show',
+ GIT_OPTION_NO_DIFF,
+ hash_to_search]).strip()
+
+
+def get_followup_commits(git_working_dir, hash_to_search):
+ return git_execute(git_working_dir, ['log',
+ '--grep=' + hash_to_search,
+ GIT_OPTION_HASH_ONLY,
+ 'master']).strip().splitlines()
+
+def get_merge_commits(git_working_dir, hash_to_search):
+ merges = get_related_commits_not_on_master(git_working_dir, hash_to_search)
+ false_merges = get_related_commits_not_on_master(
+ git_working_dir, 'Cr-Branched-From: ' + hash_to_search)
+ false_merges = set(false_merges)
+ return ([merge_commit for merge_commit in merges
+ if merge_commit not in false_merges])
+
+def get_related_commits_not_on_master(git_working_dir, grep_command):
+ commits = git_execute(git_working_dir, ['log',
+ '--all',
+ '--grep=' + grep_command,
+ GIT_OPTION_ONELINE,
+ '--decorate',
+ '--not',
+ 'master',
+ GIT_OPTION_HASH_ONLY])
+ return commits.splitlines()
+
+def get_branches_for_commit(git_working_dir, hash_to_search):
+ branches = git_execute(git_working_dir, ['branch',
+ '--contains',
+ hash_to_search,
+ '-a']).strip()
+ branches = branches.splitlines()
+ return map(str.strip, branches)
+
+def is_rolling(git_working_dir, hash_to_search):
+ branches = get_branches_for_commit(git_working_dir, hash_to_search)
+ return 'remotes/origin/roll' in branches
+
+def is_lkgr(git_working_dir, hash_to_search):
+ branches = get_branches_for_commit(git_working_dir, hash_to_search)
+ return 'remotes/origin/lkgr' in branches
+
+def get_first_canary(git_working_dir, hash_to_search):
+ branches = get_branches_for_commit(git_working_dir, hash_to_search)
+ canaries = ([currentBranch for currentBranch in branches if
+ currentBranch.startswith('remotes/origin/chromium/')])
+ canaries.sort()
+ if len(canaries) == 0:
+ return 'No Canary coverage'
+ return canaries[0].split('/')[-1]
+
+def print_analysis(git_working_dir, hash_to_search):
+ print '1.) Searching for "' + hash_to_search + '"'
+ print '=====================ORIGINAL COMMIT START==================='
+ print describe_commit(git_working_dir, hash_to_search)
print '=====================ORIGINAL COMMIT END====================='
- print '#####################FOUND MERGES & REVERTS START#####################'
- git_execute(gitWorkingDir, ["log",'--all', '--grep='+hashToSearch])
- print '#####################FOUND MERGES & REVERTS END#####################'
+
+ print '2.) General information:'
+ print 'Is rolling: ' + str(is_rolling(git_working_dir, hash_to_search))
+ print 'Is LKGR: ' + str(is_lkgr(git_working_dir, hash_to_search))
+ print 'Is on Canary: ' + (
+ str(get_first_canary(git_working_dir, hash_to_search)))
+ print '3.) Found follow-up commits, reverts and ports:'
+ followups = get_followup_commits(git_working_dir, hash_to_search)
+ for followup in followups:
+ print describe_commit(git_working_dir, followup, True)
+
+ print '4.) Found merges:'
+ merges = get_merge_commits(git_working_dir, hash_to_search)
+ for currentMerge in merges:
+ print describe_commit(git_working_dir, currentMerge, True)
+ print '---Merged to:'
+ mergeOutput = git_execute(git_working_dir, ['branch',
+ '--contains',
+ currentMerge,
+ '-r']).strip()
+ print mergeOutput
print 'Finished successfully'
-def git_execute(workingDir, commands):
- return call(["git", '-C', workingDir] + commands)
+if __name__ == '__main__': # pragma: no cover
+ parser = argparse.ArgumentParser('Tool to check where a git commit was'
+ ' merged and reverted.')
-if __name__ == "__main__": # pragma: no cover
- parser = argparse.ArgumentParser('Tool to check where a git commit was merged and reverted.')
- parser.add_argument("-g", "--git-dir", required=False, default='.',
- help="The path to your git working directory.")
+ parser.add_argument('-g', '--git-dir', required=False, default='.',
+ help='The path to your git working directory.')
- parser.add_argument('hash', nargs=1, help="Hash of the commit to be searched.")
+ parser.add_argument('hash',
+ nargs=1,
+ help='Hash of the commit to be searched.')
args = sys.argv[1:]
options = parser.parse_args(args)
« no previous file with comments | « no previous file | tools/release/search_related_commits.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698