| 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)
|
|
|