diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 59 |
1 files changed, 3 insertions, 56 deletions
diff --git a/src/main.rs b/src/main.rs index 4b69010..b388fab 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,6 +13,7 @@ mod prs; mod release; mod repo; mod user; +mod version; mod whoami; mod wiki; @@ -39,12 +40,7 @@ pub enum Command { Auth(auth::AuthCommand), Release(release::ReleaseCommand), User(user::UserCommand), - Version { - /// Checks for updates - #[clap(long)] - #[cfg(feature = "update-check")] - check: bool, - }, + Version(version::VersionCommand), } #[tokio::main] @@ -66,62 +62,13 @@ async fn main() -> eyre::Result<()> { Command::Auth(subcommand) => subcommand.run(&mut keys, host_name).await?, Command::Release(subcommand) => subcommand.run(&mut keys, host_name).await?, Command::User(subcommand) => subcommand.run(&mut keys, host_name).await?, - Command::Version { - #[cfg(feature = "update-check")] - check, - } => { - println!("{}", env!("CARGO_PKG_VERSION")); - #[cfg(feature = "update-check")] - update_msg(check).await?; - } + Command::Version(command) => command.run().await?, } keys.save().await?; Ok(()) } -#[cfg(feature = "update-check")] -async fn update_msg(check: bool) -> eyre::Result<()> { - use std::cmp::Ordering; - - if check { - let url = url::Url::parse("https://codeberg.org/")?; - let api = forgejo_api::Forgejo::new(forgejo_api::Auth::None, url)?; - - let latest = api - .repo_get_latest_release("Cyborus", "forgejo-cli") - .await?; - let latest_tag = latest - .tag_name - .ok_or_eyre("latest release does not have name")?; - let latest_ver = latest_tag - .strip_prefix("v") - .unwrap_or(&latest_tag) - .parse::<semver::Version>()?; - - let current_ver = env!("CARGO_PKG_VERSION").parse::<semver::Version>()?; - - match current_ver.cmp(&latest_ver) { - Ordering::Less => { - let latest_url = latest - .html_url - .ok_or_eyre("latest release does not have url")?; - println!("New version available: {latest_ver}"); - println!("Get it at {}", latest_url); - } - Ordering::Equal => { - println!("Up to date!"); - } - Ordering::Greater => { - println!("You are ahead of the latest published version"); - } - } - } else { - println!("Check for a new version with `fj version --check`"); - } - Ok(()) -} - async fn readline(msg: &str) -> eyre::Result<String> { use std::io::Write; print!("{msg}"); |