Merge "Better handling of duplicate default"
diff --git a/manifest_xml.py b/manifest_xml.py
index eb4908d..c5e2e34 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -97,6 +97,8 @@
def ToRemoteSpec(self, projectName):
url = self.resolvedFetchUrl.rstrip('/') + '/' + projectName
remoteName = self.name
+ if self.remoteAlias:
+ remoteName = self.remoteAlias
return RemoteSpec(remoteName, url, self.reviewUrl)
class XmlManifest(object):
@@ -151,6 +153,8 @@
root.appendChild(e)
e.setAttribute('name', r.name)
e.setAttribute('fetch', r.fetchUrl)
+ if r.remoteAlias is not None:
+ e.setAttribute('alias', r.remoteAlias)
if r.reviewUrl is not None:
e.setAttribute('review', r.reviewUrl)
@@ -229,7 +233,8 @@
e.setAttribute('name', name)
if relpath != name:
e.setAttribute('path', relpath)
- if not d.remote or p.remote.name != d.remote.name:
+ remoteName = d.remote.remoteAlias or d.remote.name
+ if not d.remote or p.remote.name != remoteName:
e.setAttribute('remote', p.remote.name)
if peg_rev:
if self.IsMirror:
diff --git a/repo b/repo
index eeb8920..62e6ea5 100755
--- a/repo
+++ b/repo
@@ -739,7 +739,7 @@
repo_main = my_main
ver_str = '.'.join(map(str, VERSION))
- me = [repo_main,
+ me = [sys.executable, repo_main,
'--repo-dir=%s' % rel_repo_dir,
'--wrapper-version=%s' % ver_str,
'--wrapper-path=%s' % wrapper_path,
@@ -747,7 +747,7 @@
me.extend(orig_args)
me.extend(extra_args)
try:
- os.execv(repo_main, me)
+ os.execv(sys.executable, me)
except OSError as e:
_print("fatal: unable to start %s" % repo_main, file=sys.stderr)
_print("fatal: %s" % e, file=sys.stderr)
diff --git a/subcmds/upload.py b/subcmds/upload.py
index f5833dd..8d801e0 100644
--- a/subcmds/upload.py
+++ b/subcmds/upload.py
@@ -21,6 +21,7 @@
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
@@ -344,7 +345,20 @@
key = 'review.%s.uploadtopic' % branch.project.remote.review
opt.auto_topic = branch.project.config.GetBoolean(key)
- destination = opt.dest_branch or branch.project.dest_branch or branch.project.revisionExpr
+ 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 @@
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 = []