upload: Add superproject identifier as push option
When uploading, add the root superproject repo as a push option in the
format `-o custom-keyed-value=rootRepo:$HOST/$PROJECT`.
Bug: b/401147338
Change-Id: I00230256eb7ae307b03840bb4090c28dc8a0505e
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/472601
Reviewed-by: Josip Sokcevic <sokcevic@chromium.org>
Tested-by: Gavin Mak <gavinmak@google.com>
Commit-Queue: Gavin Mak <gavinmak@google.com>
diff --git a/git_superproject.py b/git_superproject.py
index ce8161f..aba836a 100644
--- a/git_superproject.py
+++ b/git_superproject.py
@@ -28,6 +28,7 @@
import sys
import time
from typing import NamedTuple
+import urllib.parse
from git_command import git_require
from git_command import GitCommand
@@ -140,6 +141,23 @@
self._manifest_path if os.path.exists(self._manifest_path) else None
)
+ @property
+ def repo_id(self):
+ """Returns the repo ID for the superproject.
+
+ For example, if the superproject points to:
+ https://android-review.googlesource.com/platform/superproject/
+ Then the repo_id would be:
+ android/platform/superproject
+ """
+ if review_url := self.remote.review:
+ parsed_url = urllib.parse.urlparse(review_url)
+ if netloc := parsed_url.netloc:
+ parts = netloc.split("-review", 1)
+ host = parts[0]
+ return f"{host}/{self.name}"
+ return None
+
def _LogMessage(self, fmt, *inputs):
"""Logs message to stderr and _git_event_log."""
message = f"{self._LogMessagePrefix()} {fmt.format(*inputs)}"
diff --git a/subcmds/upload.py b/subcmds/upload.py
index bac2f8a..2837ff5 100644
--- a/subcmds/upload.py
+++ b/subcmds/upload.py
@@ -628,6 +628,13 @@
branch.uploaded = False
return
+ # If using superproject, add the root repo as a push option.
+ manifest = branch.project.manifest
+ push_options = list(opt.push_options)
+ sp = manifest.superproject
+ if sp and sp.repo_id and manifest.manifestProject.use_superproject:
+ push_options.append(f"custom-keyed-value=rootRepo:{sp.repo_id}")
+
branch.UploadForReview(
people,
dryrun=opt.dryrun,
@@ -640,7 +647,7 @@
ready=opt.ready,
dest_branch=destination,
validate_certs=opt.validate_certs,
- push_options=opt.push_options,
+ push_options=push_options,
patchset_description=opt.patchset_description,
)