Show More
@@ -94,6 +94,20 b' class TestCreatePullRequestApi(object):' | |||||
94 | assert pull_request.description == '' |
|
94 | assert pull_request.description == '' | |
95 |
|
95 | |||
96 | @pytest.mark.backends("git", "hg") |
|
96 | @pytest.mark.backends("git", "hg") | |
|
97 | def test_create_with_empty_title(self, backend): | |||
|
98 | data = self._prepare_data(backend) | |||
|
99 | data.pop('title') | |||
|
100 | id_, params = build_data( | |||
|
101 | self.apikey_regular, 'create_pull_request', **data) | |||
|
102 | response = api_call(self.app, params) | |||
|
103 | result = response.json | |||
|
104 | pull_request_id = result['result']['pull_request_id'] | |||
|
105 | pull_request = PullRequestModel().get(pull_request_id) | |||
|
106 | data['ref'] = backend.default_branch_name | |||
|
107 | title = '{source_repo}#{ref} to {target_repo}'.format(**data) | |||
|
108 | assert pull_request.title == title | |||
|
109 | ||||
|
110 | @pytest.mark.backends("git", "hg") | |||
97 | def test_create_with_reviewers_specified_by_names( |
|
111 | def test_create_with_reviewers_specified_by_names( | |
98 | self, backend, no_notifications): |
|
112 | self, backend, no_notifications): | |
99 | data = self._prepare_data(backend) |
|
113 | data = self._prepare_data(backend) | |
@@ -277,6 +291,7 b' class TestCreatePullRequestApi(object):' | |||||
277 | self.commit_ids = backend.create_master_repo(commits) |
|
291 | self.commit_ids = backend.create_master_repo(commits) | |
278 | self.source = backend.create_repo(heads=[source_head]) |
|
292 | self.source = backend.create_repo(heads=[source_head]) | |
279 | self.target = backend.create_repo(heads=[target_head]) |
|
293 | self.target = backend.create_repo(heads=[target_head]) | |
|
294 | ||||
280 | data = { |
|
295 | data = { | |
281 | 'source_repo': self.source.repo_name, |
|
296 | 'source_repo': self.source.repo_name, | |
282 | 'target_repo': self.target.repo_name, |
|
297 | 'target_repo': self.target.repo_name, |
@@ -608,7 +608,7 b' def create_pull_request(' | |||||
608 | [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}] |
|
608 | [{'username': 'nick', 'reasons': ['original author'], 'mandatory': <bool>}] | |
609 | """ |
|
609 | """ | |
610 |
|
610 | |||
611 |
source_db_repo = |
|
611 | source_db_repo = get_repo_or_error(source_repo) | |
612 | target_db_repo = get_repo_or_error(target_repo) |
|
612 | target_db_repo = get_repo_or_error(target_repo) | |
613 | if not has_superadmin_permission(apiuser): |
|
613 | if not has_superadmin_permission(apiuser): | |
614 | _perms = ('repository.admin', 'repository.write', 'repository.read',) |
|
614 | _perms = ('repository.admin', 'repository.write', 'repository.read',) | |
@@ -616,24 +616,29 b' def create_pull_request(' | |||||
616 |
|
616 | |||
617 | full_source_ref = resolve_ref_or_error(source_ref, source_db_repo) |
|
617 | full_source_ref = resolve_ref_or_error(source_ref, source_db_repo) | |
618 | full_target_ref = resolve_ref_or_error(target_ref, target_db_repo) |
|
618 | full_target_ref = resolve_ref_or_error(target_ref, target_db_repo) | |
|
619 | ||||
|
620 | source_scm = source_db_repo.scm_instance() | |||
|
621 | target_scm = target_db_repo.scm_instance() | |||
|
622 | ||||
619 | source_commit = get_commit_or_error(full_source_ref, source_db_repo) |
|
623 | source_commit = get_commit_or_error(full_source_ref, source_db_repo) | |
620 | target_commit = get_commit_or_error(full_target_ref, target_db_repo) |
|
624 | target_commit = get_commit_or_error(full_target_ref, target_db_repo) | |
621 | source_scm = source_db_repo.scm_instance() |
|
625 | ||
622 | target_scm = target_db_repo.scm_instance() |
|
626 | ancestor = source_scm.get_common_ancestor( | |
|
627 | source_commit.raw_id, target_commit.raw_id, target_scm) | |||
|
628 | if not ancestor: | |||
|
629 | raise JSONRPCError('no common ancestor found') | |||
|
630 | ||||
|
631 | # recalculate target ref based on ancestor | |||
|
632 | target_ref_type, target_ref_name, __ = full_target_ref.split(':') | |||
|
633 | full_target_ref = ':'.join((target_ref_type, target_ref_name, ancestor)) | |||
623 |
|
634 | |||
624 | commit_ranges = target_scm.compare( |
|
635 | commit_ranges = target_scm.compare( | |
625 | target_commit.raw_id, source_commit.raw_id, source_scm, |
|
636 | target_commit.raw_id, source_commit.raw_id, source_scm, | |
626 | merge=True, pre_load=[]) |
|
637 | merge=True, pre_load=[]) | |
627 |
|
638 | |||
628 | ancestor = target_scm.get_common_ancestor( |
|
|||
629 | target_commit.raw_id, source_commit.raw_id, source_scm) |
|
|||
630 |
|
||||
631 | if not commit_ranges: |
|
639 | if not commit_ranges: | |
632 | raise JSONRPCError('no commits found') |
|
640 | raise JSONRPCError('no commits found') | |
633 |
|
641 | |||
634 | if not ancestor: |
|
|||
635 | raise JSONRPCError('no common ancestor found') |
|
|||
636 |
|
||||
637 | reviewer_objects = Optional.extract(reviewers) or [] |
|
642 | reviewer_objects = Optional.extract(reviewers) or [] | |
638 |
|
643 | |||
639 | if reviewer_objects: |
|
644 | if reviewer_objects: | |
@@ -674,6 +679,7 b' def create_pull_request(' | |||||
674 | source_ref=title_source_ref, |
|
679 | source_ref=title_source_ref, | |
675 | target=target_repo |
|
680 | target=target_repo | |
676 | ) |
|
681 | ) | |
|
682 | description = Optional.extract(description) | |||
677 |
|
683 | |||
678 | pull_request = PullRequestModel().create( |
|
684 | pull_request = PullRequestModel().create( | |
679 | created_by=apiuser.user_id, |
|
685 | created_by=apiuser.user_id, | |
@@ -684,7 +690,7 b' def create_pull_request(' | |||||
684 | revisions=[commit.raw_id for commit in reversed(commit_ranges)], |
|
690 | revisions=[commit.raw_id for commit in reversed(commit_ranges)], | |
685 | reviewers=reviewers, |
|
691 | reviewers=reviewers, | |
686 | title=title, |
|
692 | title=title, | |
687 |
description= |
|
693 | description=description, | |
688 | reviewer_data=reviewer_rules, |
|
694 | reviewer_data=reviewer_rules, | |
689 | auth_user=apiuser |
|
695 | auth_user=apiuser | |
690 | ) |
|
696 | ) |
General Comments 0
You need to be logged in to leave comments.
Login now