mirror of
https://github.com/cargo-bins/cargo-binstall.git
synced 2025-04-25 06:40:03 +00:00
Support other git hosting services (#312)
* Impl new mod `hosting` for detecting git hosting services * Refactor: Make `guess_git_hosting_services` associated fn of `GitHostingService` * Set default value of `PkgMeta::pkg_url` to `None` * Impl new method `get_redirected_final_url` * Use `get_redirected_final_url` in `GhCrateMeta::find` to make `guess_git_hosting_services` more accurate. * Use redirected `repo` in `GhCrateMeta::launch_baseline_find_tasks` * Refactor `<GhCrateMeta as Fetcher>::find` * Mod `get_default_pkg_url_template` to ret `&[&str]` * Add more default `pkg-url` templates * Rm `pkg-url` in `bin/Cargo.toml` Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
parent
6b5e8f6875
commit
846e7ead91
7 changed files with 251 additions and 44 deletions
56
crates/lib/src/fetchers/gh_crate_meta/hosting.rs
Normal file
56
crates/lib/src/fetchers/gh_crate_meta/hosting.rs
Normal file
|
@ -0,0 +1,56 @@
|
|||
use url::Url;
|
||||
|
||||
use crate::errors::BinstallError;
|
||||
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
pub enum GitHostingServices {
|
||||
GitHub,
|
||||
GitLab,
|
||||
BitBucket,
|
||||
SourceForge,
|
||||
Unknown,
|
||||
}
|
||||
impl GitHostingServices {
|
||||
pub fn guess_git_hosting_services(repo: &Url) -> Result<Self, BinstallError> {
|
||||
use GitHostingServices::*;
|
||||
|
||||
match repo.domain() {
|
||||
Some(domain) if domain.starts_with("github") => Ok(GitHub),
|
||||
Some(domain) if domain.starts_with("gitlab") => Ok(GitLab),
|
||||
Some(domain) if domain == "bitbucket.org" => Ok(BitBucket),
|
||||
Some(domain) if domain == "sourceforge.net" => Ok(SourceForge),
|
||||
_ => Ok(Unknown),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_default_pkg_url_template(self) -> Option<&'static [&'static str]> {
|
||||
use GitHostingServices::*;
|
||||
|
||||
match self {
|
||||
GitHub => Some(&[
|
||||
"{ repo }/releases/download/v{ version }/{ name }-{ target }-v{ version }.{ archive-format }",
|
||||
"{ repo }/releases/download/v{ version }/{ name }-v{ version }-{ target }.{ archive-format }",
|
||||
"{ repo }/releases/download/v{ version }/{ name }-{ version }-{ target }.{ archive-format }",
|
||||
"{ repo }/releases/download/v{ version }/{ name }-{ target }.{ archive-format }",
|
||||
]),
|
||||
GitLab => Some(&[
|
||||
"{ repo }/-/releases/v{ version }/downloads/binaries/{ name }-{ target }-v{ version }.{ archive-format }",
|
||||
"{ repo }/-/releases/v{ version }/downloads/binaries/{ name }-v{ version }-{ target }.{ archive-format }",
|
||||
"{ repo }/-/releases/v{ version }/downloads/binaries/{ name }-{ version }-{ target }.{ archive-format }",
|
||||
"{ repo }/-/releases/v{ version }/downloads/binaries/{ name }-{ target }.{ archive-format }",
|
||||
]),
|
||||
BitBucket => Some(&[
|
||||
"{ repo }/downloads/{ name }-{ target }-v{ version }.{ archive-format }",
|
||||
"{ repo }/downloads/{ name }-v{ version }-{ target }.{ archive-format }",
|
||||
"{ repo }/downloads/{ name }-{ version }-{ target }.{ archive-format }",
|
||||
]),
|
||||
SourceForge => Some(&[
|
||||
"{ repo }/files/binaries/v{ version }/{ name }-{ target }-v{ version }.{ archive-format }/download",
|
||||
"{ repo }/files/binaries/v{ version }/{ name }-v{ version }-{ target }.{ archive-format }/download",
|
||||
"{ repo }/files/binaries/v{ version }/{ name }-{ version }-{ target }.{ archive-format }/download",
|
||||
"{ repo }/files/binaries/v{ version }/{ name }-{ target }.{ archive-format }/download",
|
||||
]),
|
||||
Unknown => None,
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue