From 3bfd72158c11583213037ddfe5224c2038288383 Mon Sep 17 00:00:00 2001 From: Conley Owens Date: Mon, 30 Sep 2013 15:54:38 -0700 Subject: [PATCH] Don't upload when dest branch is not merge branch Example: - `repo init -b master` / sync a project - In one project: `git checkout -b work origin/branch-thats-not-master` - make some changes, `git commit` - `repo upload .` - Upload will now be skipped with a warning instead of being uploaded to master Change-Id: I990b36217b75fe3c8b4d776e7fefa1c7d9ab7282 --- subcmds/upload.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/subcmds/upload.py b/subcmds/upload.py index 74c287d0..8d801e08 100644 --- a/subcmds/upload.py +++ b/subcmds/upload.py @@ -21,6 +21,7 @@ import sys from command import InteractiveCommand from editor import Editor from error import HookError, UploadError +from git_command import GitCommand from project import RepoHook from pyversion import is_python3 @@ -345,6 +346,19 @@ Gerrit Code Review: http://code.google.com/p/gerrit/ opt.auto_topic = branch.project.config.GetBoolean(key) destination = opt.dest_branch or branch.project.dest_branch + + # Make sure our local branch is not setup to track a different remote branch + merge_branch = self._GetMergeBranch(branch.project) + full_dest = 'refs/heads/%s' % destination + if not opt.dest_branch and merge_branch and merge_branch != full_dest: + print('merge branch %s does not match destination branch %s' + % (merge_branch, full_dest)) + print('skipping upload.') + print('Please use `--destination %s` if this is intentional' + % destination) + branch.uploaded = False + continue + branch.UploadForReview(people, auto_topic=opt.auto_topic, draft=opt.draft, dest_branch=destination) branch.uploaded = True except UploadError as e: @@ -379,6 +393,21 @@ Gerrit Code Review: http://code.google.com/p/gerrit/ if have_errors: sys.exit(1) + def _GetMergeBranch(self, project): + p = GitCommand(project, + ['rev-parse', '--abbrev-ref', 'HEAD'], + capture_stdout = True, + capture_stderr = True) + p.Wait() + local_branch = p.stdout.strip() + p = GitCommand(project, + ['config', '--get', 'branch.%s.merge' % local_branch], + capture_stdout = True, + capture_stderr = True) + p.Wait() + merge_branch = p.stdout.strip() + return merge_branch + def Execute(self, opt, args): project_list = self.GetProjects(args) pending = []