Skip to content

Commit

Permalink
feat: add homepage to git URL conversion tests
Browse files Browse the repository at this point in the history
  • Loading branch information
louib committed Aug 20, 2023
1 parent a496845 commit 6404ba5
Showing 1 changed file with 55 additions and 35 deletions.
90 changes: 55 additions & 35 deletions src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,38 +49,38 @@ lazy_static! {
static ref BITBUCKET_PROJECT_REGEX: Regex =
Regex::new(r"https?://bitbucket.org/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)").unwrap();
}
pub fn get_git_url_from_archive_url(archive_url: &str) -> Option<String> {
if let Some(git_url) = get_github_url_from_archive_url(archive_url) {
pub fn get_git_url_from_generic_url(generic_url: &str) -> Option<String> {
if let Some(git_url) = get_github_url_from_generic_url(generic_url) {
return Some(git_url);
}
if let Some(git_url) = get_gitlab_url_from_archive_url(archive_url) {
if let Some(git_url) = get_gitlab_url_from_generic_url(generic_url) {
return Some(git_url);
}
if let Some(git_url) = get_gnome_gitlab_url_from_archive_url(archive_url) {
if let Some(git_url) = get_gnome_gitlab_url_from_generic_url(generic_url) {
return Some(git_url);
}
if let Some(git_url) = get_pagure_url_from_archive_url(archive_url) {
if let Some(git_url) = get_pagure_url_from_generic_url(generic_url) {
return Some(git_url);
}
if let Some(git_url) = get_gnu_url_from_archive_url(archive_url) {
if let Some(git_url) = get_gnu_url_from_generic_url(generic_url) {
return Some(git_url);
}
if let Some(git_url) = get_nongnu_release_url_from_archive_url(archive_url) {
if let Some(git_url) = get_nongnu_release_url_from_generic_url(generic_url) {
return Some(git_url);
}
if let Some(git_url) = get_nongnu_project_url_from_archive_url(archive_url) {
if let Some(git_url) = get_nongnu_project_url_from_generic_url(generic_url) {
return Some(git_url);
}
if let Some(git_url) = get_bitbucket_url_from_archive_url(archive_url) {
if let Some(git_url) = get_bitbucket_url_from_generic_url(generic_url) {
return Some(git_url);
}
// The SourceForge git access is documented here
// https://sourceforge.net/p/forge/documentation/Git/#anonymous-access-read-only
None
}

pub fn get_github_url_from_archive_url(archive_url: &str) -> Option<String> {
let captured_groups = match GITHUB_PROJECT_REGEX.captures(archive_url) {
pub fn get_github_url_from_generic_url(generic_url: &str) -> Option<String> {
let captured_groups = match GITHUB_PROJECT_REGEX.captures(generic_url) {
Some(g) => g,
None => return None,
};
Expand All @@ -95,8 +95,8 @@ pub fn get_github_url_from_archive_url(archive_url: &str) -> Option<String> {
));
}

pub fn get_gitlab_url_from_archive_url(archive_url: &str) -> Option<String> {
let captured_groups = match GITLAB_PROJECT_REGEX.captures(archive_url) {
pub fn get_gitlab_url_from_generic_url(generic_url: &str) -> Option<String> {
let captured_groups = match GITLAB_PROJECT_REGEX.captures(generic_url) {
Some(g) => g,
None => return None,
};
Expand All @@ -111,8 +111,8 @@ pub fn get_gitlab_url_from_archive_url(archive_url: &str) -> Option<String> {
));
}

pub fn get_gnome_gitlab_url_from_archive_url(archive_url: &str) -> Option<String> {
let captured_groups = match GNOME_GITLAB_PROJECT_REGEX.captures(archive_url) {
pub fn get_gnome_gitlab_url_from_generic_url(generic_url: &str) -> Option<String> {
let captured_groups = match GNOME_GITLAB_PROJECT_REGEX.captures(generic_url) {
Some(g) => g,
None => return None,
};
Expand All @@ -127,8 +127,8 @@ pub fn get_gnome_gitlab_url_from_archive_url(archive_url: &str) -> Option<String
));
}

pub fn get_pagure_url_from_archive_url(archive_url: &str) -> Option<String> {
let captured_groups = match PAGURE_PROJECT_REGEX.captures(archive_url) {
pub fn get_pagure_url_from_generic_url(generic_url: &str) -> Option<String> {
let captured_groups = match PAGURE_PROJECT_REGEX.captures(generic_url) {
Some(g) => g,
None => return None,
};
Expand All @@ -139,8 +139,8 @@ pub fn get_pagure_url_from_archive_url(archive_url: &str) -> Option<String> {
return Some(format!("https://pagure.io/{}.git", project_name));
}

pub fn get_gnu_url_from_archive_url(archive_url: &str) -> Option<String> {
let captured_groups = match GNU_PROJECT_REGEX.captures(archive_url) {
pub fn get_gnu_url_from_generic_url(generic_url: &str) -> Option<String> {
let captured_groups = match GNU_PROJECT_REGEX.captures(generic_url) {
Some(g) => g,
None => return None,
};
Expand All @@ -154,8 +154,8 @@ pub fn get_gnu_url_from_archive_url(archive_url: &str) -> Option<String> {
));
}

pub fn get_nongnu_release_url_from_archive_url(archive_url: &str) -> Option<String> {
let captured_groups = match NONGNU_RELEASE_REGEX.captures(archive_url) {
pub fn get_nongnu_release_url_from_generic_url(generic_url: &str) -> Option<String> {
let captured_groups = match NONGNU_RELEASE_REGEX.captures(generic_url) {
Some(g) => g,
None => return None,
};
Expand All @@ -169,8 +169,8 @@ pub fn get_nongnu_release_url_from_archive_url(archive_url: &str) -> Option<Stri
));
}

pub fn get_nongnu_project_url_from_archive_url(archive_url: &str) -> Option<String> {
let captured_groups = match NONGNU_PROJECT_REGEX.captures(archive_url) {
pub fn get_nongnu_project_url_from_generic_url(generic_url: &str) -> Option<String> {
let captured_groups = match NONGNU_PROJECT_REGEX.captures(generic_url) {
Some(g) => g,
None => return None,
};
Expand All @@ -184,10 +184,10 @@ pub fn get_nongnu_project_url_from_archive_url(archive_url: &str) -> Option<Stri
));
}

pub fn get_bitbucket_url_from_archive_url(archive_url: &str) -> Option<String> {
pub fn get_bitbucket_url_from_generic_url(generic_url: &str) -> Option<String> {
// Bitbucket does not allow anonymous git access by default, so this
// might fail.
let captured_groups = match BITBUCKET_PROJECT_REGEX.captures(archive_url) {
let captured_groups = match BITBUCKET_PROJECT_REGEX.captures(generic_url) {
Some(g) => g,
None => return None,
};
Expand All @@ -207,14 +207,18 @@ mod tests {
use super::*;

#[test]
pub fn test_get_git_url_from_archive_url() {
let git_url = crate::utils::get_git_url_from_archive_url(
pub fn test_get_git_url_from_generic_url() {
let git_url = crate::utils::get_git_url_from_generic_url(
"https://github.com/sass/libsass/archive/3.6.4.tar.gz",
);
assert!(git_url.is_some());
assert_eq!(git_url.unwrap(), "https://github.com/sass/libsass.git");

let git_url = crate::utils::get_git_url_from_archive_url(
let git_url = crate::utils::get_git_url_from_generic_url("https://github.com/sass/libsass");
assert!(git_url.is_some());
assert_eq!(git_url.unwrap(), "https://github.com/sass/libsass.git");

let git_url = crate::utils::get_git_url_from_generic_url(
"https://gitlab.com/rszibele/e-juice-calc/-/archive/1.0.7/e-juice-calc-1.0.7.tar.bz2",
);
assert!(git_url.is_some());
Expand All @@ -223,7 +227,15 @@ mod tests {
"https://gitlab.com/rszibele/e-juice-calc.git"
);

let git_url = crate::utils::get_git_url_from_archive_url(
let git_url =
crate::utils::get_git_url_from_generic_url("https://gitlab.com/rszibele/e-juice-calc");
assert!(git_url.is_some());
assert_eq!(
git_url.unwrap(),
"https://gitlab.com/rszibele/e-juice-calc.git"
);

let git_url = crate::utils::get_git_url_from_generic_url(
"https://gitlab.gnome.org/GNOME/libsecret/-/archive/0.19.1/libsecret-0.19.1.tar.gz",
);
assert!(git_url.is_some());
Expand All @@ -232,13 +244,21 @@ mod tests {
"https://gitlab.gnome.org/GNOME/libsecret.git"
);

let git_url = crate::utils::get_git_url_from_archive_url(
let git_url =
crate::utils::get_git_url_from_generic_url("https://gitlab.gnome.org/GNOME/libsecret");
assert!(git_url.is_some());
assert_eq!(
git_url.unwrap(),
"https://gitlab.gnome.org/GNOME/libsecret.git"
);

let git_url = crate::utils::get_git_url_from_generic_url(
"https://pagure.io/libaio/archive/libaio-0.3.111/libaio-libaio-0.3.111.tar.gz",
);
assert!(git_url.is_some());
assert_eq!(git_url.unwrap(), "https://pagure.io/libaio.git");

let git_url = crate::utils::get_git_url_from_archive_url(
let git_url = crate::utils::get_git_url_from_generic_url(
"https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz",
);
assert!(git_url.is_some());
Expand All @@ -247,7 +267,7 @@ mod tests {
"https://git.savannah.gnu.org/git/libiconv.git"
);

let git_url = crate::utils::get_git_url_from_archive_url(
let git_url = crate::utils::get_git_url_from_generic_url(
"http://ftp.gnu.org/gnu/autoconf/autoconf-2.13.tar.gz",
);
assert!(git_url.is_some());
Expand All @@ -256,7 +276,7 @@ mod tests {
"https://git.savannah.gnu.org/git/autoconf.git"
);

let git_url = crate::utils::get_git_url_from_archive_url(
let git_url = crate::utils::get_git_url_from_generic_url(
"https://download.savannah.nongnu.org/releases/openexr/openexr-2.2.1.tar.gz",
);
assert!(git_url.is_some());
Expand All @@ -265,7 +285,7 @@ mod tests {
"https://git.savannah.nongnu.org/git/openexr.git"
);

let git_url = crate::utils::get_git_url_from_archive_url(
let git_url = crate::utils::get_git_url_from_generic_url(
"http://savannah.nongnu.org/download/icoutils/icoutils-0.31.1.tar.bz2",
);
assert!(git_url.is_some());
Expand All @@ -274,7 +294,7 @@ mod tests {
"https://git.savannah.nongnu.org/git/icoutils.git"
);

let git_url = crate::utils::get_git_url_from_archive_url(
let git_url = crate::utils::get_git_url_from_generic_url(
"https://bitbucket.org/Doomseeker/doomseeker/get/1.3.1.tar.bz2",
);
assert!(git_url.is_some());
Expand Down

0 comments on commit 6404ba5

Please sign in to comment.