codeberg_cli/actions/repo/
delete.rs1use crate::{
2 actions::GlobalArgs,
3 types::{
4 context::BergContext,
5 git::{MaybeOwnerRepo, OwnerRepo},
6 },
7};
8
9use clap::Parser;
10use miette::{Context, IntoDiagnostic};
11
12#[derive(Parser, Debug)]
14pub struct RepoDeleteArgs {
15 #[arg(value_name = "REPO or OWNER/REPO")]
17 pub owner_and_repo: MaybeOwnerRepo,
18}
19
20impl RepoDeleteArgs {
21 pub async fn run(self, global_args: GlobalArgs) -> miette::Result<()> {
22 let _ = global_args;
23 let ctx = BergContext::new(self, global_args).await?;
24
25 let owner_repo = match ctx.args.owner_and_repo {
26 MaybeOwnerRepo::ImplicitOwner(repo) => {
27 let owner = ctx
28 .client
29 .user_get_current()
30 .await
31 .into_diagnostic()?
32 .login
33 .context("Current user has no username on targeted forgejo instance")?;
34 OwnerRepo { owner, repo }
35 }
36 MaybeOwnerRepo::ExplicitOwner(owner_repo) => owner_repo,
37 };
38
39 ctx.client
40 .repo_delete(owner_repo.owner.as_str(), owner_repo.repo.as_str())
41 .await
42 .map_err(|e| {
43 miette::miette!(
44 help = format!(
45 "Make sure the repository {repo_display} exists!",
46 repo_display = owner_repo.to_string()
47 ),
48 "{e}"
49 )
50 .wrap_err("Deleting repository failed!")
51 })?;
52 Ok(())
53 }
54}