Skip to content

Commit 5f92f4c

Browse files
committed
🚒 Refactored guess_repo_slug(): RepositoryService
1 parent 3a65cca commit 5f92f4c

File tree

2 files changed

+26
-23
lines changed

2 files changed

+26
-23
lines changed

git_repo/repo.py

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -154,28 +154,6 @@ def init(self): # pragma: no cover
154154
if 'GIT_WORK_TREE' in os.environ.keys() or 'GIT_DIR' in os.environ.keys():
155155
del os.environ['GIT_WORK_TREE']
156156

157-
def _guess_repo_slug(self, repository, service, resolve_targets=None):
158-
config = repository.config_reader()
159-
if resolve_targets:
160-
targets = [target.format(service=service.name) for target in resolve_targets]
161-
else:
162-
targets = (service.name, 'upstream', 'origin')
163-
for remote in repository.remotes:
164-
if remote.name in targets:
165-
for url in remote.urls:
166-
if url.startswith('https'):
167-
if url.endswith('.git'):
168-
url = url[:-4]
169-
*_, user, name = url.split('/')
170-
self.set_repo_slug('/'.join([user, name]), auto=True)
171-
return
172-
elif url.startswith('git@'):
173-
if url.endswith('.git'):
174-
url = url[:-4]
175-
_, repo_slug = url.split(':')
176-
self.set_repo_slug(repo_slug, auto=True)
177-
return
178-
179157
def get_service(self, lookup_repository=True, resolve_targets=None):
180158
if not lookup_repository:
181159
service = RepositoryService.get_service(None, self.target)
@@ -191,7 +169,11 @@ def get_service(self, lookup_repository=True, resolve_targets=None):
191169
raise FileNotFoundError('Cannot find path to the repository.')
192170
service = RepositoryService.get_service(repository, self.target)
193171
if not self.repo_name:
194-
self._guess_repo_slug(repository, service, resolve_targets)
172+
repo_slug = RepositoryService.guess_repo_slug(
173+
repository, service, resolve_targets
174+
)
175+
if repo_slug:
176+
self.set_repo_slug(repo_slug, auto=True)
195177
return service
196178

197179
'''Argument storage'''

git_repo/services/service.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,27 @@ def get_config_path(cls):
7676
return home_conf
7777
return xdg_conf
7878

79+
@staticmethod
80+
def guess_repo_slug(repository, service, resolve_targets=None):
81+
config = repository.config_reader()
82+
if resolve_targets:
83+
targets = [target.format(service=service.name) for target in resolve_targets]
84+
else:
85+
targets = (service.name, 'upstream', 'origin')
86+
for remote in repository.remotes:
87+
if remote.name in targets:
88+
for url in remote.urls:
89+
if url.endswith('.git'):
90+
url = url[:-4]
91+
# strip http://, https:// and ssh://
92+
if '://' in url:
93+
*_, user, name = url.split('/')
94+
return '/'.join([user, name])
95+
# scp-style URL
96+
elif '@' in url and ':' in url:
97+
return url.split(':')[-1]
98+
return None
99+
79100
@classmethod
80101
def get_config(cls, config):
81102
out = {}

0 commit comments

Comments
 (0)