From b753ddd62bc669cce797e6525ad181178376294b Mon Sep 17 00:00:00 2001 From: Marc Jakobi Date: Wed, 17 Sep 2025 18:14:32 +0200 Subject: [PATCH] fix: failure to parse provider info if .git suffix is missing --- src/types/provider/mod.rs | 7 +++++-- tests/provider.rs | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/types/provider/mod.rs b/src/types/provider/mod.rs index 3176556..54c4407 100644 --- a/src/types/provider/mod.rs +++ b/src/types/provider/mod.rs @@ -90,8 +90,11 @@ impl<'a> GenericProvider<'a> { /// Parse the most common form of git url by offered by git providers fn parse_path(input: &str) -> Result<(&str, GenericProvider), GitUrlParseError> { let (input, _) = opt(tag("/")).parse(input)?; - let (input, (user, repo)) = - separated_pair(is_not("/"), tag("/"), take_until(".git")).parse(input)?; + let (input, (user, repo)) = if input.ends_with(".git") { + separated_pair(is_not("/"), tag("/"), take_until(".git")).parse(input)? + } else { + separated_pair(is_not("/"), tag("/"), is_not("/")).parse(input)? + }; Ok((input, GenericProvider { owner: user, repo })) } diff --git a/tests/provider.rs b/tests/provider.rs index 823601f..19aea9d 100644 --- a/tests/provider.rs +++ b/tests/provider.rs @@ -209,6 +209,25 @@ fn ssh_gitlab_subgroups() { assert_eq!(provider_info.fullname(), full); } +#[test] +fn url_without_git_suffix() { + let _ = env_logger::try_init(); + let test_url = "http://git.example.com:3000/user/repo"; + let parsed = GitUrl::parse(test_url).expect("URL parse failed"); + debug!("{:#?}", parsed); + + let provider_info: GenericProvider = parsed.provider_info().unwrap(); + debug!("{:#?}", provider_info); + + let owner = "user"; + let repo = "repo"; + let full = format!("{owner}/{repo}"); + + assert_eq!(provider_info.owner(), owner); + assert_eq!(provider_info.repo(), repo); + assert_eq!(provider_info.fullname(), full); +} + #[test] fn filepath() { let _ = env_logger::try_init();