Skip to content

Commit f20ebe9

Browse files
authored
Merge pull request #4 from sks444/giturlparse
Make all the invalid urls valid
2 parents f7af21d + 25508c9 commit f20ebe9

File tree

2 files changed

+102
-18
lines changed

2 files changed

+102
-18
lines changed

giturlparse/parser.py

+24-10
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,30 @@ def parse(self):
6969
'name': None,
7070
'owner': None,
7171
}
72-
regexes = [(r'^(?P<protocol>https?|git|ssh|rsync)\://'
73-
'(?:(?P<user>.+)@)*'
74-
'(?P<resource>[a-z0-9_.-]*)'
75-
'[:/]*'
76-
'(?P<port>[\d]+){0,1}'
77-
'(?P<pathname>\/(?P<owner>.+)/(?P<name>.+).git)'),
78-
(r'^(?:(?P<user>.+)@)*'
79-
'(?P<resource>[a-z0-9_.-]*)[:/]*'
80-
'(?P<port>[\d]+){0,1}'
81-
'[:](?P<pathname>\/?(?P<owner>.+)/(?P<name>.+).git)')]
72+
regexes = [
73+
(r'^(?P<protocol>https?|git|ssh|rsync)\://'
74+
'(?:(?P<user>.+)@)*'
75+
'(?P<resource>[a-z0-9_.-]*)'
76+
'[:/]*'
77+
'(?P<port>[\d]+){0,1}'
78+
'(?P<pathname>\/(?P<owner>.+)/(?P<name>.+).git)'),
79+
(r'(git\+)?'
80+
'((?P<protocol>\w+)://)'
81+
'((?P<user>\w+)@)?'
82+
'((?P<resource>[\w\.\-]+))'
83+
'(:(?P<port>\d+))?'
84+
'(?P<pathname>(\/(?P<owner>\w+)/)?'
85+
'(\/?(?P<name>[\w\-]+)(\.git)?)?)'),
86+
(r'^(?:(?P<user>.+)@)*'
87+
'(?P<resource>[a-z0-9_.-]*)[:/]*'
88+
'(?P<port>[\d]+){0,1}'
89+
'[:](?P<pathname>\/?(?P<owner>.+)/(?P<name>.+).git)'),
90+
(r'((?P<user>\w+)@)?'
91+
'((?P<resource>[\w\.\-]+))'
92+
'[\:\/]{1,2}'
93+
'(?P<pathname>((?P<owner>\w+)/)?'
94+
'((?P<name>[\w\-]+)(\.git)?)?)'),
95+
]
8296
for regex in regexes:
8397
if re.search(regex, self._url):
8498
m = re.search(regex, self._url)

test/conftest.py

+78-8
Original file line numberDiff line numberDiff line change
@@ -170,16 +170,86 @@ def git_urls():
170170
'name': 'repo',
171171
'owner': 'owner',
172172
},
173+
'https://example.com/owner/repo': {
174+
'pathname': '/owner/repo',
175+
'protocols': ['https'],
176+
'protocol': 'https',
177+
'href': 'https://example.com/owner/repo',
178+
'resource': 'example.com',
179+
'user': None,
180+
'port': None,
181+
'name': 'repo',
182+
'owner': 'owner',
183+
},
184+
'example.com:repo.git': {
185+
'pathname': 'repo.git',
186+
'protocols': [],
187+
'protocol': 'ssh',
188+
'href': 'example.com:repo.git',
189+
'resource': 'example.com',
190+
'user': None,
191+
'port': None,
192+
'name': 'repo',
193+
'owner': None,
194+
},
195+
'https://example.com/repo': {
196+
'pathname': '/repo',
197+
'protocols': ['https'],
198+
'protocol': 'https',
199+
'href': 'https://example.com/repo',
200+
'resource': 'example.com',
201+
'user': None,
202+
'port': None,
203+
'name': 'repo',
204+
'owner': None,
205+
},
206+
'https://example.in/repo': {
207+
'pathname': '/repo',
208+
'protocols': ['https'],
209+
'protocol': 'https',
210+
'href': 'https://example.in/repo',
211+
'resource': 'example.in',
212+
'user': None,
213+
'port': None,
214+
'name': 'repo',
215+
'owner': None,
216+
},
217+
'[email protected]:repo.git': {
218+
'pathname': 'repo.git',
219+
'protocols': [],
220+
'protocol': 'ssh',
221+
'href': '[email protected]:repo.git',
222+
'resource': 'example.com',
223+
'user': 'user',
224+
'port': None,
225+
'name': 'repo',
226+
'owner': None,
227+
},
228+
'git+ssh://example.com/owner/repo.git': {
229+
'pathname': '/owner/repo.git',
230+
'protocols': ['git', 'ssh'],
231+
'protocol': 'ssh',
232+
'href': 'git+ssh://example.com/owner/repo.git',
233+
'resource': 'example.com',
234+
'user': None,
235+
'port': None,
236+
'name': 'repo',
237+
'owner': 'owner',
238+
},
239+
'git+https://example.com/owner/repo.git': {
240+
'pathname': '/owner/repo.git',
241+
'protocols': ['git', 'https'],
242+
'protocol': 'https',
243+
'href': 'git+https://example.com/owner/repo.git',
244+
'resource': 'example.com',
245+
'user': None,
246+
'port': None,
247+
'name': 'repo',
248+
'owner': 'owner',
249+
},
173250
}
174251

175252

176253
@pytest.fixture()
177254
def invalid_urls():
178-
return [
179-
'https://example.com/owner',
180-
'git+ssh://example.com/owner/repo.git'
181-
'git+https://example.com/owner/repo.git'
182-
'https://example.com/owner',
183-
'example.com:repo.git',
184-
'[email protected]:repo.git',
185-
]
255+
return []

0 commit comments

Comments
 (0)