summaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs59
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}");