Skip to content
Snippets Groups Projects
Commit 63d1651a authored by Dylan Aïssi's avatar Dylan Aïssi
Browse files

apertis-pkg-merge-upstream-to-downstreams: ensure merge request is created...

apertis-pkg-merge-upstream-to-downstreams: ensure merge request is created against the right project

In case of a forked project, like we are doing with the test of the rebase,
the GitLab API creates by default the MR against the original project
instead of the forked project.
To ensure the merge request is created against the forked project, we use
the push option merge_request.target_project to overwrite the default
behavior and to create the merge request against the forked project.

See:
https://docs.gitlab.com/ee/topics/git/commit.html#push-options-for-merge-requests



Signed-off-by: default avatarDylan Aïssi <dylan.aissi@collabora.com>
parent cadb28eb
No related branches found
No related tags found
4 merge requests!108Draft: v2026dev2: import-debian-package: stop using a PosixPath object as context manager,!106Draft: import-debian-package: stop using a PosixPath object as context manager,!104Fastforward v2026dev1 -> v2026dev2: Update for compatibility with Trixie,!94Update for compatibility with Trixie
......@@ -183,6 +183,32 @@ def ensure_downstream_branch(project_url, downstream, dry_run):
raise
def get_path_with_namespace(project_url):
url = urllib.parse.urlsplit(project_url)
project_id = urllib.parse.quote(removesuffix(url.path.strip("/"), ".git"), safe="")
# drop the inline auth data as urllib does not like it
auth, netloc_no_auth = url.netloc.split("@", 1)
token = auth.split(":", 1)[-1]
url = url._replace(
path=f"/api/v4/projects/{project_id}",
netloc=netloc_no_auth,
)
project_metadata = url.geturl()
req_project_metadata = urllib.request.Request(
url=project_metadata,
headers={"PRIVATE-TOKEN": token},
)
try:
res = urllib.request.urlopen(req_project_metadata)
json_res = json.load(res)
path_with_namespace = json_res["path_with_namespace"]
except urllib.error.HTTPError as e:
print("ERROR:", e.read().decode())
raise
return path_with_namespace
def push_merge_request(
project_url, proposed_branch, upstream, downstream, auto_merge="", dry_run=False
):
......@@ -213,8 +239,11 @@ def push_merge_request(
ensure_downstream_branch(project_url, downstream, dry_run)
project_path = get_path_with_namespace(project_url)
print(
f"Create merge request from '{proposed_branch}' to '{downstream}'", flush=True
f"Create merge request from '{proposed_branch}' to '{project_path}/{downstream}'",
flush=True,
)
git_push_custom(
"-o",
......@@ -224,6 +253,8 @@ def push_merge_request(
"-o",
f"merge_request.target={downstream}",
"-o",
f"merge_request.target_project={project_path}",
"-o",
f"merge_request.title={title}",
project_url,
f"{proposed_branch}:{proposed_branch}",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment