Skip to main content

codeberg_cli/actions/repo/
open.rs

1use miette::{Context, IntoDiagnostic};
2
3use crate::actions::GlobalArgs;
4use crate::types::context::BergContext;
5use crate::types::git::OwnerRepo;
6
7use clap::Parser;
8
9/// Open the current repository in the browser
10#[derive(Parser, Debug)]
11pub struct RepoOpenArgs {}
12
13impl RepoOpenArgs {
14    pub async fn run(self, general_args: GlobalArgs) -> miette::Result<()> {
15        let ctx = BergContext::new(self, general_args).await?;
16
17        let OwnerRepo { owner, repo } = ctx.owner_repo()?;
18
19        let base_url = ctx
20            .config
21            .url()
22            .context("error while retrieving the base url for opening in browser")?;
23        let repo_url = base_url
24            .join(format!("{}/{}", owner, repo).as_str())
25            .into_diagnostic()
26            .context("error while constructing whole repo url for opening in browser")?;
27        webbrowser::open(repo_url.as_str())
28            .into_diagnostic()
29            .context("error while opening repo url in browser")?;
30
31        Ok(())
32    }
33}