Skip to content

Commit 7a43b90

Browse files
authored
fix: failure to parse provider info if .git suffix is missing (#70)
1 parent c1d9195 commit 7a43b90

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

src/types/provider/mod.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,11 @@ impl<'a> GenericProvider<'a> {
9090
/// Parse the most common form of git url by offered by git providers
9191
fn parse_path(input: &str) -> Result<(&str, GenericProvider), GitUrlParseError> {
9292
let (input, _) = opt(tag("/")).parse(input)?;
93-
let (input, (user, repo)) =
94-
separated_pair(is_not("/"), tag("/"), take_until(".git")).parse(input)?;
93+
let (input, (user, repo)) = if input.ends_with(".git") {
94+
separated_pair(is_not("/"), tag("/"), take_until(".git")).parse(input)?
95+
} else {
96+
separated_pair(is_not("/"), tag("/"), is_not("/")).parse(input)?
97+
};
9598
Ok((input, GenericProvider { owner: user, repo }))
9699
}
97100

tests/provider.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,25 @@ fn ssh_gitlab_subgroups() {
209209
assert_eq!(provider_info.fullname(), full);
210210
}
211211

212+
#[test]
213+
fn url_without_git_suffix() {
214+
let _ = env_logger::try_init();
215+
let test_url = "http://git.example.com:3000/user/repo";
216+
let parsed = GitUrl::parse(test_url).expect("URL parse failed");
217+
debug!("{:#?}", parsed);
218+
219+
let provider_info: GenericProvider = parsed.provider_info().unwrap();
220+
debug!("{:#?}", provider_info);
221+
222+
let owner = "user";
223+
let repo = "repo";
224+
let full = format!("{owner}/{repo}");
225+
226+
assert_eq!(provider_info.owner(), owner);
227+
assert_eq!(provider_info.repo(), repo);
228+
assert_eq!(provider_info.fullname(), full);
229+
}
230+
212231
#[test]
213232
fn filepath() {
214233
let _ = env_logger::try_init();

0 commit comments

Comments
 (0)