/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/plugins/propose/gitlabs.py

  • Committer: Breezy landing bot
  • Author(s): Jelmer Vernooij
  • Date: 2020-05-06 03:06:18 UTC
  • mfrom: (7500.1.2 trunk-merge-3.1)
  • Revision ID: breezy.the.bot@gmail.com-20200506030618-131sjbc876q7on66
Merge the 3.1 branch.

Merged from https://code.launchpad.net/~jelmer/brz/trunk-merge-3.1/+merge/383481

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""Support for GitLab."""
18
18
 
19
 
from __future__ import absolute_import
20
 
 
21
19
import json
22
20
import os
23
21
import time
30
28
    urlutils,
31
29
    )
32
30
from ...git.urls import git_url_to_bzr_url
33
 
from ...sixish import PY3
34
31
from ...trace import mutter
35
32
from ...transport import get_transport
36
33
 
169
166
        raise NotGitLabUrl(url)
170
167
    path = path.strip('/')
171
168
    parts = path.split('/')
 
169
    if len(parts) < 2:
 
170
        raise NotMergeRequestUrl(host, url)
172
171
    if parts[-2] != 'merge_requests':
173
172
        raise NotMergeRequestUrl(host, url)
174
 
    return host, '/'.join(parts[:-2]), int(parts[-1])
 
173
    if parts[-3] == '-':
 
174
        project_name = '/'.join(parts[:-3])
 
175
    else:
 
176
        project_name = '/'.join(parts[:-2])
 
177
    return host, project_name, int(parts[-1])
175
178
 
176
179
 
177
180
class GitLabMergeProposal(MergeProposal):
265
268
 
266
269
 
267
270
def gitlab_url_to_bzr_url(url, name):
268
 
    if not PY3:
269
 
        name = name.encode('utf-8')
270
271
    return git_url_to_bzr_url(url, branch=name)
271
272
 
272
273
 
285
286
    def base_url(self):
286
287
        return self.transport.base
287
288
 
 
289
    @property
 
290
    def base_hostname(self):
 
291
        return urlutils.parse_url(self.base_url)[3]
 
292
 
288
293
    def _api_request(self, method, path, fields=None, body=None):
289
294
        return self.transport.request(
290
295
            method, urlutils.join(self.base_url, 'api', 'v4', path),
379
384
            parameters['owner_id'] = urlutils.quote(owner, '')
380
385
        return self._list_paged(path, parameters, per_page=DEFAULT_PAGE_SIZE)
381
386
 
 
387
    def _get_merge_request(self, project, merge_id):
 
388
        path = 'projects/%s/merge_requests/%d' % (urlutils.quote(str(project), ''), merge_id)
 
389
        response = self._api_request('GET', path)
 
390
        if response.status == 403:
 
391
            raise errors.PermissionDenied(response.text)
 
392
        if response.status != 200:
 
393
            raise errors.InvalidHttpResponse(path, response.text)
 
394
        return json.loads(response.data)
 
395
 
382
396
    def _list_projects(self, owner):
383
397
        path = 'users/%s/projects' % urlutils.quote(str(owner), '')
384
398
        parameters = {}
490
504
            (host, project, branch_name) = parse_gitlab_branch_url(branch)
491
505
        except NotGitLabUrl:
492
506
            return False
493
 
        return (self.base_url == ('https://%s' % host))
 
507
        return self.base_hostname == host
494
508
 
495
509
    def check(self):
496
510
        response = self._api_request('GET', 'user')
545
559
        except NotGitLabUrl:
546
560
            raise UnsupportedHoster(url)
547
561
        except NotMergeRequestUrl as e:
548
 
            if self.base_url == ('https://%s' % e.host):
 
562
            if self.base_hostname == e.host:
549
563
                raise
550
564
            else:
551
565
                raise UnsupportedHoster(url)
552
 
        if self.base_url != ('https://%s' % host):
 
566
        if self.base_hostname != host:
553
567
            raise UnsupportedHoster(url)
554
568
        project = self._get_project(project)
555
 
        mr = project.mergerequests.get(merge_id)
556
 
        return GitLabMergeProposal(mr)
 
569
        mr = self._get_merge_request(project['path_with_namespace'], merge_id)
 
570
        return GitLabMergeProposal(self, mr)
557
571
 
558
572
    def delete_project(self, project):
559
573
        path = 'projects/%s' % urlutils.quote(str(project), '')
629
643
        try:
630
644
            merge_request = self.gl._create_mergerequest(**kwargs)
631
645
        except MergeRequestExists:
632
 
            raise ProposalExists(self.source_branch.user_url)
 
646
            raise MergeProposalExists(self.source_branch.user_url)
633
647
        return GitLabMergeProposal(self.gl, merge_request)
634
648
 
635
649