Show More
@@ -0,0 +1,41 b'' | |||||
|
1 | |RCE| 4.16.2 |RNS| | |||
|
2 | ------------------ | |||
|
3 | ||||
|
4 | Release Date | |||
|
5 | ^^^^^^^^^^^^ | |||
|
6 | ||||
|
7 | - 2019-04-02 | |||
|
8 | ||||
|
9 | ||||
|
10 | New Features | |||
|
11 | ^^^^^^^^^^^^ | |||
|
12 | ||||
|
13 | ||||
|
14 | ||||
|
15 | General | |||
|
16 | ^^^^^^^ | |||
|
17 | ||||
|
18 | ||||
|
19 | ||||
|
20 | Security | |||
|
21 | ^^^^^^^^ | |||
|
22 | ||||
|
23 | ||||
|
24 | ||||
|
25 | Performance | |||
|
26 | ^^^^^^^^^^^ | |||
|
27 | ||||
|
28 | ||||
|
29 | ||||
|
30 | Fixes | |||
|
31 | ^^^^^ | |||
|
32 | ||||
|
33 | - Integrations: fixed missing template variable for fork reference checks. | |||
|
34 | - Permissions: fixed server error when showing permissions for user groups. | |||
|
35 | - Pull requests: fixed a bug in removal of multiple reviewers at once. | |||
|
36 | ||||
|
37 | ||||
|
38 | Upgrade notes | |||
|
39 | ^^^^^^^^^^^^^ | |||
|
40 | ||||
|
41 | - Scheduled release addressing problems in 4.16.X releases. |
@@ -51,3 +51,4 b' 14502561d22e6b70613674cd675ae9a604b7989f' | |||||
51 | 4aaa40b605b01af78a9f6882eca561c54b525ef0 v4.15.2 |
|
51 | 4aaa40b605b01af78a9f6882eca561c54b525ef0 v4.15.2 | |
52 | 797744642eca86640ed20bef2cd77445780abaec v4.16.0 |
|
52 | 797744642eca86640ed20bef2cd77445780abaec v4.16.0 | |
53 | 6c3452c7c25ed35ff269690929e11960ed6ad7d3 v4.16.1 |
|
53 | 6c3452c7c25ed35ff269690929e11960ed6ad7d3 v4.16.1 | |
|
54 | 5d8057df561c4b6b81b6401aed7d2f911e6e77f7 v4.16.2 |
@@ -9,6 +9,7 b' Release Notes' | |||||
9 | .. toctree:: |
|
9 | .. toctree:: | |
10 | :maxdepth: 1 |
|
10 | :maxdepth: 1 | |
11 |
|
11 | |||
|
12 | release-notes-4.16.2.rst | |||
12 | release-notes-4.16.1.rst |
|
13 | release-notes-4.16.1.rst | |
13 | release-notes-4.16.0.rst |
|
14 | release-notes-4.16.0.rst | |
14 | release-notes-4.15.2.rst |
|
15 | release-notes-4.15.2.rst |
@@ -67,12 +67,6 b' class RepoSettingsView(RepoAppView):' | |||||
67 | .filter(UserFollowing.user_id == c.default_user_id) \ |
|
67 | .filter(UserFollowing.user_id == c.default_user_id) \ | |
68 | .filter(UserFollowing.follows_repository == self.db_repo).scalar() |
|
68 | .filter(UserFollowing.follows_repository == self.db_repo).scalar() | |
69 |
|
69 | |||
70 | c.has_origin_repo_read_perm = False |
|
|||
71 | if self.db_repo.fork: |
|
|||
72 | c.has_origin_repo_read_perm = h.HasRepoPermissionAny( |
|
|||
73 | 'repository.write', 'repository.read', 'repository.admin')( |
|
|||
74 | self.db_repo.fork.repo_name, 'repo set as fork page') |
|
|||
75 |
|
||||
76 | c.ver_info_dict = self.rhodecode_vcs_repo.get_hooks_info() |
|
70 | c.ver_info_dict = self.rhodecode_vcs_repo.get_hooks_info() | |
77 |
|
71 | |||
78 | return self._get_template_context(c) |
|
72 | return self._get_template_context(c) |
@@ -114,7 +114,6 b' class IntegrationSettingsViewBase(BaseAp' | |||||
114 | _ = self.request.translate |
|
114 | _ = self.request.translate | |
115 | c = super(IntegrationSettingsViewBase, self)._get_local_tmpl_context( |
|
115 | c = super(IntegrationSettingsViewBase, self)._get_local_tmpl_context( | |
116 | include_app_defaults=include_app_defaults) |
|
116 | include_app_defaults=include_app_defaults) | |
117 |
|
||||
118 | c.active = 'integrations' |
|
117 | c.active = 'integrations' | |
119 |
|
118 | |||
120 | return c |
|
119 | return c | |
@@ -404,6 +403,11 b' class RepoIntegrationsView(IntegrationSe' | |||||
404 | c.repo_name = self.db_repo.repo_name |
|
403 | c.repo_name = self.db_repo.repo_name | |
405 | c.repository_pull_requests = ScmModel().get_pull_requests(self.repo) |
|
404 | c.repository_pull_requests = ScmModel().get_pull_requests(self.repo) | |
406 |
|
405 | |||
|
406 | c.has_origin_repo_read_perm = False | |||
|
407 | if self.db_repo.fork: | |||
|
408 | c.has_origin_repo_read_perm = h.HasRepoPermissionAny( | |||
|
409 | 'repository.write', 'repository.read', 'repository.admin')( | |||
|
410 | self.db_repo.fork.repo_name, 'summary fork link') | |||
407 | return c |
|
411 | return c | |
408 |
|
412 | |||
409 | @LoginRequired() |
|
413 | @LoginRequired() |
@@ -1020,6 +1020,9 b' class PullRequestModel(BaseModel):' | |||||
1020 | log.debug("Adding %s reviewers", ids_to_add) |
|
1020 | log.debug("Adding %s reviewers", ids_to_add) | |
1021 | log.debug("Removing %s reviewers", ids_to_remove) |
|
1021 | log.debug("Removing %s reviewers", ids_to_remove) | |
1022 | changed = False |
|
1022 | changed = False | |
|
1023 | added_audit_reviewers = [] | |||
|
1024 | removed_audit_reviewers = [] | |||
|
1025 | ||||
1023 | for uid in ids_to_add: |
|
1026 | for uid in ids_to_add: | |
1024 | changed = True |
|
1027 | changed = True | |
1025 | _usr = self._get_user(uid) |
|
1028 | _usr = self._get_user(uid) | |
@@ -1030,29 +1033,37 b' class PullRequestModel(BaseModel):' | |||||
1030 | # NOTE(marcink): mandatory shouldn't be changed now |
|
1033 | # NOTE(marcink): mandatory shouldn't be changed now | |
1031 | # reviewer.mandatory = reviewers[uid]['reasons'] |
|
1034 | # reviewer.mandatory = reviewers[uid]['reasons'] | |
1032 | Session().add(reviewer) |
|
1035 | Session().add(reviewer) | |
1033 | self._log_audit_action( |
|
1036 | added_audit_reviewers.append(reviewer.get_dict()) | |
1034 | 'repo.pull_request.reviewer.add', {'data': reviewer.get_dict()}, |
|
|||
1035 | user, pull_request) |
|
|||
1036 |
|
1037 | |||
1037 | for uid in ids_to_remove: |
|
1038 | for uid in ids_to_remove: | |
1038 | changed = True |
|
1039 | changed = True | |
|
1040 | # NOTE(marcink): we fetch "ALL" reviewers using .all(). This is an edge case | |||
|
1041 | # that prevents and fixes cases that we added the same reviewer twice. | |||
|
1042 | # this CAN happen due to the lack of DB checks | |||
1039 | reviewers = PullRequestReviewers.query()\ |
|
1043 | reviewers = PullRequestReviewers.query()\ | |
1040 | .filter(PullRequestReviewers.user_id == uid, |
|
1044 | .filter(PullRequestReviewers.user_id == uid, | |
1041 | PullRequestReviewers.pull_request == pull_request)\ |
|
1045 | PullRequestReviewers.pull_request == pull_request)\ | |
1042 | .all() |
|
1046 | .all() | |
1043 | # use .all() in case we accidentally added the same person twice |
|
1047 | ||
1044 | # this CAN happen due to the lack of DB checks |
|
|||
1045 | for obj in reviewers: |
|
1048 | for obj in reviewers: | |
1046 |
|
|
1049 | added_audit_reviewers.append(obj.get_dict()) | |
1047 | Session().delete(obj) |
|
1050 | Session().delete(obj) | |
1048 | self._log_audit_action( |
|
|||
1049 | 'repo.pull_request.reviewer.delete', |
|
|||
1050 | {'old_data': old_data}, user, pull_request) |
|
|||
1051 |
|
1051 | |||
1052 | if changed: |
|
1052 | if changed: | |
|
1053 | Session().expire_all() | |||
1053 | pull_request.updated_on = datetime.datetime.now() |
|
1054 | pull_request.updated_on = datetime.datetime.now() | |
1054 | Session().add(pull_request) |
|
1055 | Session().add(pull_request) | |
1055 |
|
1056 | |||
|
1057 | # finally store audit logs | |||
|
1058 | for user_data in added_audit_reviewers: | |||
|
1059 | self._log_audit_action( | |||
|
1060 | 'repo.pull_request.reviewer.add', {'data': user_data}, | |||
|
1061 | user, pull_request) | |||
|
1062 | for user_data in removed_audit_reviewers: | |||
|
1063 | self._log_audit_action( | |||
|
1064 | 'repo.pull_request.reviewer.delete', {'old_data': user_data}, | |||
|
1065 | user, pull_request) | |||
|
1066 | ||||
1056 | self.notify_reviewers(pull_request, ids_to_add) |
|
1067 | self.notify_reviewers(pull_request, ids_to_add) | |
1057 | return ids_to_add, ids_to_remove |
|
1068 | return ids_to_add, ids_to_remove | |
1058 |
|
1069 |
General Comments 0
You need to be logged in to leave comments.
Login now