summaryrefslogtreecommitdiffstats
path: root/src/repo.rs
diff options
context:
space:
mode:
authorCyborus <cyborus@noreply.codeberg.org>2024-09-05 20:22:55 +0200
committerCyborus <cyborus@noreply.codeberg.org>2024-09-05 20:22:55 +0200
commit74d3748fa87bd25228f2b0b3d6f1976e1d22114d (patch)
tree1634bf460aeea7c7469354a7c192304cd8f6430c /src/repo.rs
parentMerge pull request 'improve host name consistency' (#124) from host-consisten... (diff)
parentfeat: automatically add ssh url as alias if it is different (diff)
downloadforgejo-cli-74d3748fa87bd25228f2b0b3d6f1976e1d22114d.tar.xz
forgejo-cli-74d3748fa87bd25228f2b0b3d6f1976e1d22114d.zip
Merge pull request 'host aliases' (#125) from alias-host into main
Reviewed-on: https://codeberg.org/Cyborus/forgejo-cli/pulls/125
Diffstat (limited to 'src/repo.rs')
-rw-r--r--src/repo.rs31
1 files changed, 19 insertions, 12 deletions
diff --git a/src/repo.rs b/src/repo.rs
index 5221bf3..c55c51b 100644
--- a/src/repo.rs
+++ b/src/repo.rs
@@ -17,6 +17,7 @@ impl RepoInfo {
host: Option<&str>,
repo: Option<&RepoArg>,
remote: Option<&str>,
+ keys: &crate::keys::KeyInfo,
) -> eyre::Result<Self> {
// l = domain/owner/name
// s = owner/name
@@ -53,6 +54,7 @@ impl RepoInfo {
.ok()
.filter(|x| !x.cannot_be_a_base())
.or_else(|| Url::parse(&format!("https://{host}/")).ok())
+ .map(|url| keys.deref_alias(url))
}
repo_name = Some(RepoName {
owner: repo.owner.clone(),
@@ -68,6 +70,7 @@ impl RepoInfo {
.ok()
.filter(|x| !x.cannot_be_a_base())
.or_else(|| Url::parse(&format!("https://{host}/")).ok())
+ .map(|url| keys.deref_alias(url))
});
let (remote_url, remote_repo_name) = {
@@ -97,7 +100,7 @@ impl RepoInfo {
if let Some(host_url) = &host_url {
let remote = local_repo.find_remote(remote_name_s)?;
let url_s = std::str::from_utf8(remote.url_bytes())?;
- let url = crate::ssh_url_parse(url_s)?;
+ let url = keys.deref_alias(crate::ssh_url_parse(url_s)?);
if crate::host_with_port(&url) == crate::host_with_port(host_url) {
name = Some(remote_name_s.to_owned());
@@ -123,8 +126,9 @@ impl RepoInfo {
let remote = local_repo.find_remote(remote_name)?;
if let Some(url) = remote.url() {
- let (url, _) = url_strip_repo_name(crate::ssh_url_parse(url)?)?;
- if crate::host_with_port(&url) == crate::host_with_port(host_url)
+ let url = keys.deref_alias(crate::ssh_url_parse(url)?);
+ let (url, _) = url_strip_repo_name(url)?;
+ if crate::host_with_port(&url) == crate::host_with_port(&url)
&& url.path() == host_url.path()
{
name = Some(remote_name.to_owned());
@@ -138,7 +142,7 @@ impl RepoInfo {
if let Some(name) = name {
if let Ok(remote) = local_repo.find_remote(&name) {
let url_s = std::str::from_utf8(remote.url_bytes())?;
- let url = crate::ssh_url_parse(url_s)?;
+ let url = keys.deref_alias(crate::ssh_url_parse(url_s)?);
let (url, name) = url_strip_repo_name(url)?;
out = (Some(url), Some(name))
@@ -362,7 +366,7 @@ impl RepoCommand {
remote,
push,
} => {
- let host = RepoInfo::get_current(host_name, None, None)?;
+ let host = RepoInfo::get_current(host_name, None, None, &keys)?;
let api = keys.get_api(host.host_url()).await?;
create_repo(&api, repo, description, private, remote, push).await?;
}
@@ -381,7 +385,8 @@ impl RepoCommand {
}
}
- let repo_info = RepoInfo::get_current(host_name, Some(&repo), remote.as_deref())?;
+ let repo_info =
+ RepoInfo::get_current(host_name, Some(&repo), remote.as_deref(), &keys)?;
let api = keys.get_api(repo_info.host_url()).await?;
let repo = repo_info
.name()
@@ -389,7 +394,8 @@ impl RepoCommand {
fork_repo(&api, repo, name).await?
}
RepoCommand::View { name, remote } => {
- let repo = RepoInfo::get_current(host_name, name.as_ref(), remote.as_deref())?;
+ let repo =
+ RepoInfo::get_current(host_name, name.as_ref(), remote.as_deref(), &keys)?;
let api = keys.get_api(repo.host_url()).await?;
let repo = repo
.name()
@@ -397,20 +403,20 @@ impl RepoCommand {
view_repo(&api, repo).await?
}
RepoCommand::Clone { repo, path } => {
- let repo = RepoInfo::get_current(host_name, Some(&repo), None)?;
+ let repo = RepoInfo::get_current(host_name, Some(&repo), None, &keys)?;
let api = keys.get_api(repo.host_url()).await?;
let name = repo.name().unwrap();
cmd_clone_repo(&api, name, path).await?;
}
RepoCommand::Star { repo } => {
- let repo = RepoInfo::get_current(host_name, Some(&repo), None)?;
+ let repo = RepoInfo::get_current(host_name, Some(&repo), None, &keys)?;
let api = keys.get_api(repo.host_url()).await?;
let name = repo.name().unwrap();
api.user_current_put_star(name.owner(), name.name()).await?;
println!("Starred {}/{}!", name.owner(), name.name());
}
RepoCommand::Unstar { repo } => {
- let repo = RepoInfo::get_current(host_name, Some(&repo), None)?;
+ let repo = RepoInfo::get_current(host_name, Some(&repo), None, &keys)?;
let api = keys.get_api(repo.host_url()).await?;
let name = repo.name().unwrap();
api.user_current_delete_star(name.owner(), name.name())
@@ -418,13 +424,14 @@ impl RepoCommand {
println!("Removed star from {}/{}", name.owner(), name.name());
}
RepoCommand::Delete { repo } => {
- let repo = RepoInfo::get_current(host_name, Some(&repo), None)?;
+ let repo = RepoInfo::get_current(host_name, Some(&repo), None, &keys)?;
let api = keys.get_api(repo.host_url()).await?;
let name = repo.name().unwrap();
delete_repo(&api, name).await?;
}
RepoCommand::Browse { name, remote } => {
- let repo = RepoInfo::get_current(host_name, name.as_ref(), remote.as_deref())?;
+ let repo =
+ RepoInfo::get_current(host_name, name.as_ref(), remote.as_deref(), &keys)?;
let mut url = repo.host_url().clone();
let repo = repo
.name()