Skip to content

Commit c0ff1a1

Browse files
committed
Added support for full URL as repo-slugs
fixes #32
1 parent d257205 commit c0ff1a1

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

git_repo/repo.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@
128128
from git import Repo, Git
129129
from git.exc import InvalidGitRepositoryError, NoSuchPathError
130130

131+
import re
132+
133+
EXTRACT_URL_RE = re.compile('[^:]*(://|@)[^/]*/')
134+
131135
def confirm(what, where):
132136
'''
133137
Method to show a CLI based confirmation message, waiting for a yes/no answer.
@@ -217,18 +221,19 @@ def set_verbosity(self, verbose): # pragma: no cover
217221

218222
@store_parameter('<user>/<repo>')
219223
def set_repo_slug(self, repo_slug):
220-
self.repo_slug = repo_slug
221-
if not repo_slug:
224+
self.repo_slug = EXTRACT_URL_RE.sub('', repo_slug) if repo_slug else repo_slug
225+
if not self.repo_slug:
222226
self.user_name = None
223227
self.repo_name = None
224-
elif '/' in repo_slug:
225-
self.user_name, self.repo_name, *overflow = repo_slug.split('/')
228+
elif '/' in self.repo_slug:
229+
# in case a full URL is given as parameter, just extract the slug part.
230+
self.user_name, self.repo_name, *overflow = self.repo_slug.split('/')
226231
if len(overflow) != 0:
227232
raise ArgumentError('Too many slashes.'
228233
'Format of the parameter is <user>/<repo> or <repo>.')
229234
else:
230235
self.user_name = None
231-
self.repo_name = repo_slug
236+
self.repo_name = self.repo_slug
232237

233238
@store_parameter('<branch>')
234239
def set_branch(self, branch):

tests/integration/test_main.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,18 @@ def test_clone__branch(self):
9292
args={'<branch>': 'foobar'})
9393
assert ('guyzmo', 'git-repo', 'foobar') == repo_slug_branch
9494

95+
def test_clone__full_url_http(self):
96+
repo_slug_branch, seen_args = self.main_clone('http://service.com/guyzmo/git-repo', 0)
97+
assert ('guyzmo', 'git-repo', 'master') == repo_slug_branch
98+
99+
def test_clone__full_url_https(self):
100+
repo_slug_branch, seen_args = self.main_clone('https://service.com/guyzmo/git-repo', 0)
101+
assert ('guyzmo', 'git-repo', 'master') == repo_slug_branch
102+
103+
def test_clone__full_url_git(self):
104+
repo_slug_branch, seen_args = self.main_clone('[email protected]/guyzmo/git-repo', 0)
105+
assert ('guyzmo', 'git-repo', 'master') == repo_slug_branch
106+
95107
def test_clone__too_many_slashes(self):
96108
did_clone = self.main_clone('guyzmo/git/repo', 2)
97109
assert None is did_clone

0 commit comments

Comments
 (0)