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> {
90
90
/// Parse the most common form of git url by offered by git providers
91
91
fn parse_path ( input : & str ) -> Result < ( & str , GenericProvider ) , GitUrlParseError > {
92
92
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
+ } ;
95
98
Ok ( ( input, GenericProvider { owner : user, repo } ) )
96
99
}
97
100
Original file line number Diff line number Diff line change @@ -209,6 +209,25 @@ fn ssh_gitlab_subgroups() {
209
209
assert_eq ! ( provider_info. fullname( ) , full) ;
210
210
}
211
211
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
+
212
231
#[ test]
213
232
fn filepath ( ) {
214
233
let _ = env_logger:: try_init ( ) ;
You can’t perform that action at this time.
0 commit comments