From 336f9125c0b8a590f33c5ff5097c73d0ff637f03 Mon Sep 17 00:00:00 2001 From: "piman@chromium.org" Date: Thu, 4 Sep 2014 02:16:55 +0000 Subject: [PATCH] Add a --tbr-owners option to git cl upload BUG=410125 Review URL: https://codereview.chromium.org/543463002 git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@291794 0039d316-1c4b-4281-b951-d872f2087c98 --- git_cl.py | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/git_cl.py b/git_cl.py index 655242078..b8263b550 100755 --- a/git_cl.py +++ b/git_cl.py @@ -36,6 +36,7 @@ import clang_format import fix_encoding import gclient_utils import git_common +import owners import owners_finder import presubmit_support import rietveld @@ -959,10 +960,10 @@ class ChangeDescription(object): lines.pop(-1) self._description_lines = lines - def update_reviewers(self, reviewers): + def update_reviewers(self, reviewers, add_owners_tbr=False, change=None): """Rewrites the R=/TBR= line(s) as a single line each.""" assert isinstance(reviewers, list), reviewers - if not reviewers: + if not reviewers and not add_owners_tbr: return reviewers = reviewers[:] @@ -987,6 +988,14 @@ class ChangeDescription(object): for name in r_names: if name not in reviewers: reviewers.append(name) + if add_owners_tbr: + owners_db = owners.Database(change.RepositoryRoot(), + fopen=file, os_path=os.path, glob=glob.glob) + all_reviewers = set(tbr_names + reviewers) + missing_files = owners_db.files_not_covered_by(change.LocalPaths(), + all_reviewers) + tbr_names.extend(owners_db.reviewers_for(missing_files, + change.author_email)) new_r_line = 'R=' + ', '.join(reviewers) if reviewers else None new_tbr_line = 'TBR=' + ', '.join(tbr_names) if tbr_names else None @@ -1525,7 +1534,7 @@ def AddChangeIdToCommitMessage(options, args): print >> sys.stderr, 'ERROR: Gerrit commit-msg hook not available.' -def GerritUpload(options, args, cl): +def GerritUpload(options, args, cl, change): """upload the current branch to gerrit.""" # We assume the remote called "origin" is the one we want. # It is probably not worthwhile to support different workflows. @@ -1551,8 +1560,8 @@ def GerritUpload(options, args, cl): 'commit.') ask_for_data('About to upload; enter to confirm.') - if options.reviewers: - change_desc.update_reviewers(options.reviewers) + if options.reviewers or options.tbr_owners: + change_desc.update_reviewers(options.reviewers, options.tbr_owners, change) receive_options = [] cc = cl.GetCCList().split(',') @@ -1575,7 +1584,7 @@ def GerritUpload(options, args, cl): return 0 -def RietveldUpload(options, args, cl): +def RietveldUpload(options, args, cl, change): """upload the patch to rietveld.""" upload_args = ['--assume_yes'] # Don't ask about untracked files. upload_args.extend(['--server', cl.GetRietveldServer()]) @@ -1600,8 +1609,10 @@ def RietveldUpload(options, args, cl): upload_args.extend(['--title', options.title]) message = options.title or options.message or CreateDescriptionFromLog(args) change_desc = ChangeDescription(message) - if options.reviewers: - change_desc.update_reviewers(options.reviewers) + if options.reviewers or options.tbr_owners: + change_desc.update_reviewers(options.reviewers, + options.tbr_owners, + change) if not options.force: change_desc.prompt() @@ -1735,6 +1746,8 @@ def CMDupload(parser, args): 'use for CL. Default: master') parser.add_option('--email', default=None, help='email address to use to connect to Rietveld') + parser.add_option('--tbr-owners', dest='tbr_owners', action='store_true', + help='add a set of OWNERS to TBR') add_git_similarity(parser) (options, args) = parser.parse_args(args) @@ -1765,10 +1778,12 @@ def CMDupload(parser, args): cl.SetWatchers(watchlist.GetWatchersForPaths(files)) if not options.bypass_hooks: - if options.reviewers: + if options.reviewers or options.tbr_owners: # Set the reviewer list now so that presubmit checks can access it. change_description = ChangeDescription(change.FullDescriptionText()) - change_description.update_reviewers(options.reviewers) + change_description.update_reviewers(options.reviewers, + options.tbr_owners, + change) change.SetDescriptionText(change_description.description) hook_results = cl.RunHook(committing=False, may_prompt=not options.force, @@ -1793,8 +1808,8 @@ def CMDupload(parser, args): print_stats(options.similarity, options.find_copies, args) if settings.GetIsGerrit(): - return GerritUpload(options, args, cl) - ret = RietveldUpload(options, args, cl) + return GerritUpload(options, args, cl, change) + ret = RietveldUpload(options, args, cl, change) if not ret: git_set_branch_value('last-upload-hash', RunGit(['rev-parse', 'HEAD']).strip())