1
0
mirror of https://github.com/openSUSE/osc.git synced 2025-09-05 20:58:42 +02:00

Extend 'osc fork' command with '--target-project' and '--target-package' options

This commit is contained in:
2025-03-18 14:49:14 +01:00
parent cd0b5730a3
commit 989121b271
2 changed files with 24 additions and 1 deletions

View File

@@ -31,6 +31,16 @@ class ForkCommand(osc.commandline.OscCommand):
help="Name of the package",
)
self.add_argument(
"--target-project",
help="Name of the target project (defaults to home:$user:branches)",
)
self.add_argument(
"--target-package",
help="Name of the package (defaults to $package)",
)
self.add_argument_new_repo_name()
def run(self, args):
@@ -97,7 +107,14 @@ class ForkCommand(osc.commandline.OscCommand):
print()
print(f"Forking OBS package {args.project}/{args.package} ...")
print(f" * OBS apiurl: {args.apiurl}")
status = obs_api.Package.cmd_fork(args.apiurl, args.project, args.package, scmsync=fork_scmsync)
status = obs_api.Package.cmd_fork(
args.apiurl,
args.project,
args.package,
scmsync=fork_scmsync,
target_project=args.target_project,
target_package=args.target_package,
)
target_project = status.data["targetproject"]
target_package = status.data["targetpackage"]
# XXX: the current OBS API is not ideal; we don't get any info whether the new package exists already; 404 would be probably nicer

View File

@@ -96,6 +96,8 @@ class Package(XmlModel):
package: str,
*,
scmsync: str,
target_project: Optional[str] = None,
target_package: Optional[str] = None,
):
"""
POST /source/{project}/{package}?cmd=fork&scmsync={scmsync}
@@ -105,12 +107,16 @@ class Package(XmlModel):
:param project: Project name.
:param package: Package name.
:param scmsync: Checkout Git URL. Example: https://src.example.com/owner/repo#branch
:param target_project: Target project name (defaults to home:$user:branches)
:param target_package: Target package name (defaults to $package)
"""
url_path = ["source", project, package]
url_query = {
"cmd": "fork",
"scmsync": scmsync,
"target_project": target_project,
"target_package": target_package,
}
response = cls.xml_request("POST", apiurl, url_path, url_query)
return Status.from_file(response, apiurl=apiurl)