diff --git a/src/keys.rs b/src/keys.rs index bc57cc4..a0be833 100644 --- a/src/keys.rs +++ b/src/keys.rs @@ -1,5 +1,5 @@ -use std::{collections::BTreeMap, io::ErrorKind}; use eyre::eyre; +use std::{collections::BTreeMap, io::ErrorKind}; use tokio::io::AsyncWriteExt; use url::Url; @@ -47,17 +47,23 @@ impl KeyInfo { let remote_url = get_remote(&repo)?; let login_info = self.get_login(&remote_url)?; - let mut path = remote_url.path_segments().ok_or_else(|| eyre!("bad path"))?.collect::>(); - let repo_name = path.pop().ok_or_else(|| eyre!("path does not have repo name"))?.to_string(); - let owner = path.pop().ok_or_else(|| eyre!("path does not have owner name"))?.to_string(); + let mut path = remote_url + .path_segments() + .ok_or_else(|| eyre!("bad path"))? + .collect::>(); + let repo_name = path + .pop() + .ok_or_else(|| eyre!("path does not have repo name"))? + .to_string(); + let owner = path + .pop() + .ok_or_else(|| eyre!("path does not have owner name"))? + .to_string(); let base_path = path.join("/"); let mut url = remote_url; url.set_path(&base_path); - let host_info = HostInfo { - url, - login_info, - }; + let host_info = HostInfo { url, login_info }; let repo_info = RepoInfo { owner, name: repo_name, @@ -111,7 +117,7 @@ impl RepoInfo { pub fn owner(&self) -> &str { &self.owner } - + pub fn name(&self) -> &str { &self.name } @@ -144,10 +150,7 @@ pub struct LoginInfo { impl LoginInfo { pub fn new(name: String, key: String) -> Self { - Self { - name, - key, - } + Self { name, key } } pub fn username(&self) -> &str { @@ -162,10 +165,11 @@ impl LoginInfo { fn get_remote(repo: &git2::Repository) -> eyre::Result { let head = repo.head()?; let branch_name = head.name().ok_or_else(|| eyre!("branch name not UTF-8"))?; - let remote_name= repo.branch_upstream_remote(branch_name)?; - let remote_name = remote_name.as_str().ok_or_else(|| eyre!("remote name not UTF-8"))?; + let remote_name = repo.branch_upstream_remote(branch_name)?; + let remote_name = remote_name + .as_str() + .ok_or_else(|| eyre!("remote name not UTF-8"))?; let remote = repo.find_remote(remote_name)?; let url = Url::parse(std::str::from_utf8(remote.url_bytes())?)?; Ok(url) } - diff --git a/src/main.rs b/src/main.rs index 5255abc..7f6ea6f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -132,10 +132,9 @@ async fn main() -> eyre::Result<()> { RepoCommand::Browse => { let (host, repo) = keys.get_current()?; let mut url = host.url().clone(); - let new_path = format!("{}/{}/{}", - url.path() - .strip_suffix("/") - .unwrap_or(url.path()), + let new_path = format!( + "{}/{}/{}", + url.path().strip_suffix("/").unwrap_or(url.path()), repo.owner(), repo.name(), ); @@ -146,10 +145,7 @@ async fn main() -> eyre::Result<()> { Command::User { host } => { let host = host.map(|host| Url::parse(&host)).transpose()?; let (url, name) = match host { - Some(url) => ( - keys.get_login(&url)?.username(), - url, - ), + Some(url) => (keys.get_login(&url)?.username(), url), None => { let (host, _) = keys.get_current()?; (host.username(), host.url().clone()) @@ -164,20 +160,14 @@ async fn main() -> eyre::Result<()> { // let pass = readline("password: ").await?; } AuthCommand::Logout { host } => { - let info_opt = keys - .hosts - .remove(&host); + let info_opt = keys.hosts.remove(&host); if let Some(info) = info_opt { eprintln!("signed out of {}@{}", &info.username(), host); } else { eprintln!("already not signed in to {host}"); } } - AuthCommand::AddKey { - host, - user, - key, - } => { + AuthCommand::AddKey { host, user, key } => { let key = match key { Some(key) => key, None => readline("new key: ").await?, @@ -185,10 +175,7 @@ async fn main() -> eyre::Result<()> { if keys.hosts.get(&user).is_none() { keys.hosts.insert(host, LoginInfo::new(user, key)); } else { - println!( - "key for {} already exists", - host - ); + println!("key for {} already exists", host); } } AuthCommand::List => { @@ -216,4 +203,3 @@ async fn readline(msg: &str) -> eyre::Result { }) .await? } -