Show More
@@ -56,6 +56,25 b' class TestCreatePullRequestApi(object):' | |||
|
56 | 56 | assert_error(id_, expected, given=response.body) |
|
57 | 57 | |
|
58 | 58 | @pytest.mark.backends("git", "hg") |
|
59 | @pytest.mark.parametrize('source_ref', [ | |
|
60 | 'bookmarg:default:initial' | |
|
61 | ]) | |
|
62 | def test_create_with_wrong_refs_data(self, backend, source_ref): | |
|
63 | ||
|
64 | data = self._prepare_data(backend) | |
|
65 | data['source_ref'] = source_ref | |
|
66 | ||
|
67 | id_, params = build_data( | |
|
68 | self.apikey_regular, 'create_pull_request', **data) | |
|
69 | ||
|
70 | response = api_call(self.app, params) | |
|
71 | ||
|
72 | expected = "Ref `{}` type is not allowed. " \ | |
|
73 | "Only:['bookmark', 'book', 'tag', 'branch'] " \ | |
|
74 | "are possible.".format(source_ref) | |
|
75 | assert_error(id_, expected, given=response.body) | |
|
76 | ||
|
77 | @pytest.mark.backends("git", "hg") | |
|
59 | 78 | def test_create_with_correct_data(self, backend): |
|
60 | 79 | data = self._prepare_data(backend) |
|
61 | 80 | RepoModel().revoke_user_permission( |
@@ -84,11 +84,11 b' class TestResolveRefOrError(object):' | |||
|
84 | 84 | |
|
85 | 85 | def test_non_supported_refs(self): |
|
86 | 86 | repo = Mock() |
|
87 |
ref = ' |
|
|
87 | ref = 'bookmark:ref' | |
|
88 | 88 | with pytest.raises(JSONRPCError) as excinfo: |
|
89 | 89 | utils.resolve_ref_or_error(ref, repo) |
|
90 | 90 | expected_message = ( |
|
91 |
'The specified value: |
|
|
91 | 'The specified value:bookmark:`ref` does not exist, or is not allowed.') | |
|
92 | 92 | assert excinfo.value.message == expected_message |
|
93 | 93 | |
|
94 | 94 | def test_branch_is_not_found(self): |
@@ -388,7 +388,19 b' def get_commit_or_error(ref, repo):' | |||
|
388 | 388 | raise JSONRPCError('Ref `{ref}` does not exist'.format(ref=ref)) |
|
389 | 389 | |
|
390 | 390 | |
|
391 | def resolve_ref_or_error(ref, repo): | |
|
391 | def _get_ref_hash(repo, type_, name): | |
|
392 | vcs_repo = repo.scm_instance() | |
|
393 | if type_ in ['branch'] and vcs_repo.alias in ('hg', 'git'): | |
|
394 | return vcs_repo.branches[name] | |
|
395 | elif type_ in ['bookmark', 'book'] and vcs_repo.alias == 'hg': | |
|
396 | return vcs_repo.bookmarks[name] | |
|
397 | else: | |
|
398 | raise ValueError() | |
|
399 | ||
|
400 | ||
|
401 | def resolve_ref_or_error(ref, repo, allowed_ref_types=None): | |
|
402 | allowed_ref_types = allowed_ref_types or ['bookmark', 'book', 'tag', 'branch'] | |
|
403 | ||
|
392 | 404 | def _parse_ref(type_, name, hash_=None): |
|
393 | 405 | return type_, name, hash_ |
|
394 | 406 | |
@@ -399,6 +411,12 b' def resolve_ref_or_error(ref, repo):' | |||
|
399 | 411 | 'Ref `{ref}` given in a wrong format. Please check the API' |
|
400 | 412 | ' documentation for more details'.format(ref=ref)) |
|
401 | 413 | |
|
414 | if ref_type not in allowed_ref_types: | |
|
415 | raise JSONRPCError( | |
|
416 | 'Ref `{ref}` type is not allowed. ' | |
|
417 | 'Only:{allowed_refs} are possible.'.format( | |
|
418 | ref=ref, allowed_refs=allowed_ref_types)) | |
|
419 | ||
|
402 | 420 | try: |
|
403 | 421 | ref_hash = ref_hash or _get_ref_hash(repo, ref_type, ref_name) |
|
404 | 422 | except (KeyError, ValueError): |
@@ -429,13 +447,3 b' def _get_commit_dict(' | |||
|
429 | 447 | "raw_diff": raw_diff, |
|
430 | 448 | "stats": stats |
|
431 | 449 | } |
|
432 | ||
|
433 | ||
|
434 | def _get_ref_hash(repo, type_, name): | |
|
435 | vcs_repo = repo.scm_instance() | |
|
436 | if type_ == 'branch' and vcs_repo.alias in ('hg', 'git'): | |
|
437 | return vcs_repo.branches[name] | |
|
438 | elif type_ == 'bookmark' and vcs_repo.alias == 'hg': | |
|
439 | return vcs_repo.bookmarks[name] | |
|
440 | else: | |
|
441 | raise ValueError() |
@@ -129,6 +129,8 b' class PullRequestModel(BaseModel):' | |||
|
129 | 129 | 'This pull request cannot be updated because the source ' |
|
130 | 130 | 'reference is missing.'), |
|
131 | 131 | } |
|
132 | REF_TYPES = ['bookmark', 'book', 'tag', 'branch'] | |
|
133 | UPDATABLE_REF_TYPES = ['bookmark', 'book', 'branch'] | |
|
132 | 134 | |
|
133 | 135 | def __get_pull_request(self, pull_request): |
|
134 | 136 | return self._get_instance(( |
@@ -671,7 +673,7 b' class PullRequestModel(BaseModel):' | |||
|
671 | 673 | |
|
672 | 674 | def has_valid_update_type(self, pull_request): |
|
673 | 675 | source_ref_type = pull_request.source_ref_parts.type |
|
674 |
return source_ref_type in |
|
|
676 | return source_ref_type in self.REF_TYPES | |
|
675 | 677 | |
|
676 | 678 | def update_commits(self, pull_request): |
|
677 | 679 | """ |
@@ -751,7 +753,7 b' class PullRequestModel(BaseModel):' | |||
|
751 | 753 | pull_request_version = pull_request |
|
752 | 754 | |
|
753 | 755 | try: |
|
754 |
if target_ref_type in |
|
|
756 | if target_ref_type in self.REF_TYPES: | |
|
755 | 757 | target_commit = target_repo.get_commit(target_ref_name) |
|
756 | 758 | else: |
|
757 | 759 | target_commit = target_repo.get_commit(target_ref_id) |
@@ -1326,7 +1328,7 b' class PullRequestModel(BaseModel):' | |||
|
1326 | 1328 | return merge_state |
|
1327 | 1329 | |
|
1328 | 1330 | def _refresh_reference(self, reference, vcs_repository): |
|
1329 | if reference.type in ('branch', 'book'): | |
|
1331 | if reference.type in self.UPDATABLE_REF_TYPES: | |
|
1330 | 1332 | name_or_id = reference.name |
|
1331 | 1333 | else: |
|
1332 | 1334 | name_or_id = reference.commit_id |
General Comments 0
You need to be logged in to leave comments.
Login now