/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/gitlab/hoster.py

  • Committer: Jelmer Vernooij
  • Date: 2020-06-15 01:29:36 UTC
  • mfrom: (7490.40.4 work)
  • mto: (7490.40.19 work)
  • mto: This revision was merged to the branch mainline in revision 7516.
  • Revision ID: jelmer@jelmer.uk-20200615012936-1adqbu592y7lzmy8
Merge upstream.

Show diffs side-by-side

added added

removed removed

Lines of Context:
169
169
        raise NotGitLabUrl(url)
170
170
    path = path.strip('/')
171
171
    parts = path.split('/')
 
172
    if len(parts) < 2:
 
173
        raise NotMergeRequestUrl(host, url)
172
174
    if parts[-2] != 'merge_requests':
173
175
        raise NotMergeRequestUrl(host, url)
174
 
    return host, '/'.join(parts[:-2]), int(parts[-1])
 
176
    if parts[-3] == '-':
 
177
        project_name = '/'.join(parts[:-3])
 
178
    else:
 
179
        project_name = '/'.join(parts[:-2])
 
180
    return host, project_name, int(parts[-1])
175
181
 
176
182
 
177
183
class GitLabMergeProposal(MergeProposal):
247
253
            return False
248
254
        elif self._mr['merge_status'] == 'can_be_merged':
249
255
            return True
 
256
        elif self._mr['merge_status'] in (
 
257
                'unchecked', 'cannot_be_merged_recheck'):
 
258
            # See https://gitlab.com/gitlab-org/gitlab/-/commit/7517105303c for
 
259
            # an explanation of the distinction between unchecked and
 
260
            # cannot_be_merged_recheck
 
261
            return None
250
262
        else:
251
263
            raise ValueError(self._mr['merge_status'])
252
264
 
285
297
    def base_url(self):
286
298
        return self.transport.base
287
299
 
 
300
    @property
 
301
    def base_hostname(self):
 
302
        return urlutils.parse_url(self.base_url)[3]
 
303
 
288
304
    def _api_request(self, method, path, fields=None, body=None):
289
305
        return self.transport.request(
290
306
            method, urlutils.join(self.base_url, 'api', 'v4', path),
379
395
            parameters['owner_id'] = urlutils.quote(owner, '')
380
396
        return self._list_paged(path, parameters, per_page=DEFAULT_PAGE_SIZE)
381
397
 
 
398
    def _get_merge_request(self, project, merge_id):
 
399
        path = 'projects/%s/merge_requests/%d' % (urlutils.quote(str(project), ''), merge_id)
 
400
        response = self._api_request('GET', path)
 
401
        if response.status == 403:
 
402
            raise errors.PermissionDenied(response.text)
 
403
        if response.status != 200:
 
404
            raise errors.InvalidHttpResponse(path, response.text)
 
405
        return json.loads(response.data)
 
406
 
382
407
    def _list_projects(self, owner):
383
408
        path = 'users/%s/projects' % urlutils.quote(str(owner), '')
384
409
        parameters = {}
395
420
    def _create_mergerequest(
396
421
            self, title, source_project_id, target_project_id,
397
422
            source_branch_name, target_branch_name, description,
398
 
            labels=None):
 
423
            labels=None, allow_collaboration=False):
399
424
        path = 'projects/%s/merge_requests' % source_project_id
400
425
        fields = {
401
426
            'title': title,
403
428
            'target_branch': target_branch_name,
404
429
            'target_project_id': target_project_id,
405
430
            'description': description,
 
431
            'allow_collaboration': allow_collaboration,
406
432
            }
407
433
        if labels:
408
434
            fields['labels'] = labels
489
515
            (host, project, branch_name) = parse_gitlab_branch_url(branch)
490
516
        except NotGitLabUrl:
491
517
            return False
492
 
        return (self.base_url == ('https://%s' % host))
 
518
        return self.base_hostname == host
493
519
 
494
520
    def check(self):
495
521
        response = self._api_request('GET', 'user')
544
570
        except NotGitLabUrl:
545
571
            raise UnsupportedHoster(url)
546
572
        except NotMergeRequestUrl as e:
547
 
            if self.base_url == ('https://%s' % e.host):
 
573
            if self.base_hostname == e.host:
548
574
                raise
549
575
            else:
550
576
                raise UnsupportedHoster(url)
551
 
        if self.base_url != ('https://%s' % host):
 
577
        if self.base_hostname != host:
552
578
            raise UnsupportedHoster(url)
553
579
        project = self._get_project(project)
554
 
        mr = project.mergerequests.get(merge_id)
555
 
        return GitLabMergeProposal(mr)
 
580
        mr = self._get_merge_request(project['path_with_namespace'], merge_id)
 
581
        return GitLabMergeProposal(self, mr)
556
582
 
557
583
    def delete_project(self, project):
558
584
        path = 'projects/%s' % urlutils.quote(str(project), '')
628
654
        try:
629
655
            merge_request = self.gl._create_mergerequest(**kwargs)
630
656
        except MergeRequestExists:
631
 
            raise ProposalExists(self.source_branch.user_url)
 
657
            raise MergeProposalExists(self.source_branch.user_url)
632
658
        return GitLabMergeProposal(self.gl, merge_request)
633
659
 
634
660