File tree Expand file tree Collapse file tree 2 files changed +24
-2
lines changed Expand file tree Collapse file tree 2 files changed +24
-2
lines changed Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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]
213232fn filepath ( ) {
214233 let _ = env_logger:: try_init ( ) ;
You can’t perform that action at this time.
0 commit comments