Merge lp:~jelmer/brz/hoster-supported-but into lp:brz/3.1

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Jelmer Vernooij
Approved revision: no longer in the source branch.
Merge reported by: The Breezy Bot
Merged at revision: not available
Proposed branch: lp:~jelmer/brz/hoster-supported-but
Merge into: lp:brz/3.1
Diff against target: 56 lines (+20/-4)
1 file modified
breezy/plugins/gitlab/hoster.py (+20/-4)
To merge this branch: bzr merge lp:~jelmer/brz/hoster-supported-but
Reviewer Review Type Date Requested Status
Jelmer Vernooij Approve
Review via email: mp+400299@code.launchpad.net

Commit message

Support probing for GitLab URLs.

Description of the change

Support probing for GitLab URLs.

To post a comment you must log in.
Revision history for this message
Jelmer Vernooij (jelmer) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'breezy/plugins/gitlab/hoster.py'
2--- breezy/plugins/gitlab/hoster.py 2021-03-27 16:32:17 +0000
3+++ breezy/plugins/gitlab/hoster.py 2021-03-28 18:36:21 +0000
4@@ -45,6 +45,7 @@
5 PrerequisiteBranchUnsupported,
6 SourceNotDerivedFromTarget,
7 UnsupportedHoster,
8+ HosterLoginRequired,
9 )
10
11
12@@ -109,9 +110,9 @@
13 self.target_host = target_host
14
15
16-class GitLabLoginMissing(errors.BzrError):
17+class GitLabLoginMissing(HosterLoginRequired):
18
19- _fmt = ("Please log into GitLab")
20+ _fmt = ("Please log into GitLab instance at %(hoster)s")
21
22
23 class GitlabLoginError(errors.BzrError):
24@@ -693,7 +694,12 @@
25 return self.base_hostname == host
26
27 def check(self):
28- response = self._api_request('GET', 'user')
29+ try:
30+ response = self._api_request('GET', 'user')
31+ except errors.UnexpectedHttpStatus as e:
32+ if e.code == 401:
33+ raise GitLabLoginMissing()
34+ raise
35 if response.status == 200:
36 self._current_user = json.loads(response.data)
37 return
38@@ -715,7 +721,17 @@
39 credentials = get_credentials_by_url(transport.base)
40 if credentials is not None:
41 return cls(transport, credentials.get('private_token'))
42- raise UnsupportedHoster(url)
43+ try:
44+ resp = transport.request(
45+ 'GET', 'https://%s/api/v4/projects/%s' % (host, urlutils.quote(str(project), '')))
46+ except errors.UnexpectedHttpStatus as e:
47+ raise UnsupportedHoster(url)
48+ else:
49+ if not resp.getheader('X-Gitlab-Feature-Category'):
50+ raise UnsupportedHoster(url)
51+ if resp.status in (200, 401):
52+ raise GitLabLoginMissing()
53+ raise UnsupportedHoster(url)
54
55 @classmethod
56 def iter_instances(cls):

Subscribers

People subscribed via source and target branches