refactor(hive-forge): port CLI verbs to forgejo-api
This commit is contained in:
parent
b8a3927c43
commit
4636987469
36 changed files with 1463 additions and 1153 deletions
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
use anyhow::Result;
|
||||
use clap::Args as ClapArgs;
|
||||
use serde_json::{Value, json};
|
||||
use forgejo_api::structs::CreateRepoOption;
|
||||
|
||||
use crate::client::Client;
|
||||
use crate::verbs::print_json;
|
||||
|
|
@ -48,29 +48,31 @@ pub struct Args {
|
|||
/// permission on the target namespace, token missing/invalid) and any
|
||||
/// I/O error from writing the result to stdout.
|
||||
pub fn run(client: &Client, args: Args) -> Result<()> {
|
||||
let mut payload = json!({
|
||||
"name": args.name,
|
||||
"private": args.private,
|
||||
"auto_init": args.auto_init,
|
||||
});
|
||||
if let Some(d) = args.description {
|
||||
payload["description"] = json!(d);
|
||||
}
|
||||
if let Some(b) = args.default_branch {
|
||||
payload["default_branch"] = json!(b);
|
||||
}
|
||||
let payload = CreateRepoOption {
|
||||
auto_init: Some(args.auto_init),
|
||||
default_branch: args.default_branch,
|
||||
description: args.description,
|
||||
gitignores: None,
|
||||
issue_labels: None,
|
||||
license: None,
|
||||
name: args.name,
|
||||
object_format_name: None,
|
||||
private: Some(args.private),
|
||||
readme: None,
|
||||
template: None,
|
||||
trust_model: None,
|
||||
};
|
||||
|
||||
let path = match args.org.as_deref() {
|
||||
Some(org) => format!("/orgs/{org}/repos"),
|
||||
None => "/user/repos".to_owned(),
|
||||
let resp = match args.org.as_deref() {
|
||||
Some(org) => client.api().create_org_repo(org, payload).send()?,
|
||||
None => client.api().create_current_user_repo(payload).send()?,
|
||||
};
|
||||
let resp = client.post_json(&path, &payload)?;
|
||||
|
||||
if client.json_mode() {
|
||||
return print_json(&resp);
|
||||
return print_json(&serde_json::to_value(&resp)?);
|
||||
}
|
||||
// Default human path: print the web URL, like issue-create / pr-create.
|
||||
if let Some(url) = resp.get("html_url").and_then(Value::as_str) {
|
||||
if let Some(url) = resp.html_url {
|
||||
println!("{url}");
|
||||
}
|
||||
Ok(())
|
||||
|
|
|
|||
Loading…
Reference in a new issue