diff --git a/osc/commands/fork.py b/osc/commands/fork.py index 4cd9d2b9..c7d3e1a8 100644 --- a/osc/commands/fork.py +++ b/osc/commands/fork.py @@ -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 diff --git a/osc/obs_api/package.py b/osc/obs_api/package.py index 6a9d5325..5cc085e3 100644 --- a/osc/obs_api/package.py +++ b/osc/obs_api/package.py @@ -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)