Show More
@@ -0,0 +1,41 b'' | |||
|
1 | |RCE| 4.10.4 |RNS| | |
|
2 | ------------------ | |
|
3 | ||
|
4 | Release Date | |
|
5 | ^^^^^^^^^^^^ | |
|
6 | ||
|
7 | - 2017-11-14 | |
|
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 | ||
|
34 | - repository groups: fixed a regressions in update of nested repository groups. | |
|
35 | ||
|
36 | ||
|
37 | Upgrade notes | |
|
38 | ^^^^^^^^^^^^^ | |
|
39 | ||
|
40 | - Fixes regression in nested repository groups update. No upgrade problems should | |
|
41 | be expected |
@@ -25,3 +25,4 b' 4ba4d74981cec5d6b28b158f875a2540952c2f74' | |||
|
25 | 25 | 0a6821cbd6b0b3c21503002f88800679fa35ab63 v4.10.1 |
|
26 | 26 | 434ad90ec8d621f4416074b84f6e9ce03964defb v4.10.2 |
|
27 | 27 | 68baee10e698da2724c6e0f698c03a6abb993bf2 v4.10.3 |
|
28 | 00821d3afd1dce3f4767cc353f84a17f7d5218a1 v4.10.4 |
@@ -9,6 +9,7 b' Release Notes' | |||
|
9 | 9 | .. toctree:: |
|
10 | 10 | :maxdepth: 1 |
|
11 | 11 | |
|
12 | release-notes-4.10.4.rst | |
|
12 | 13 | release-notes-4.10.3.rst |
|
13 | 14 | release-notes-4.10.2.rst |
|
14 | 15 | release-notes-4.10.1.rst |
@@ -169,7 +169,7 b' class RepoGroupSettingsView(RepoGroupApp' | |||
|
169 | 169 | |
|
170 | 170 | # use the new full name for redirect once we know we updated |
|
171 | 171 | # the name on filesystem and in DB |
|
172 | new_repo_group_name = schema_data['repo_group_name'] | |
|
172 | new_repo_group_name = schema_data['repo_group']['repo_group_name_with_group'] | |
|
173 | 173 | |
|
174 | 174 | h.flash(_('Repository Group `{}` updated successfully').format( |
|
175 | 175 | old_repo_group_name), category='success') |
@@ -32,6 +32,11 b' def get_group_and_repo(repo_name):' | |||
|
32 | 32 | repo_name, get_object=True) |
|
33 | 33 | |
|
34 | 34 | |
|
35 | def get_repo_group(repo_group_id): | |
|
36 | from rhodecode.model.repo_group import RepoGroup | |
|
37 | return RepoGroup.get(repo_group_id), RepoGroup.CHOICES_SEPARATOR | |
|
38 | ||
|
39 | ||
|
35 | 40 | @colander.deferred |
|
36 | 41 | def deferred_can_write_to_group_validator(node, kw): |
|
37 | 42 | old_values = kw.get('old_values') or {} |
@@ -178,6 +183,7 b' class GroupType(colander.Mapping):' | |||
|
178 | 183 | parent_group_name, |
|
179 | 184 | parent_group) = get_group_and_repo(validated_name) |
|
180 | 185 | |
|
186 | appstruct['repo_group_name_with_group'] = validated_name | |
|
181 | 187 | appstruct['repo_group_name_without_group'] = repo_group_name_without_group |
|
182 | 188 | appstruct['repo_group_name'] = parent_group_name or types.RootLocation |
|
183 | 189 | if parent_group: |
@@ -271,6 +277,14 b' class RepoGroupSettingsSchema(RepoGroupS' | |||
|
271 | 277 | appstruct = super(RepoGroupSchema, self).deserialize(cstruct) |
|
272 | 278 | validated_name = appstruct['repo_group_name'] |
|
273 | 279 | |
|
280 | # because of repoSchema adds repo-group as an ID, we inject it as | |
|
281 | # full name here because validators require it, it's unwrapped later | |
|
282 | # so it's safe to use and final name is going to be without group anyway | |
|
283 | ||
|
284 | group, separator = get_repo_group(appstruct['repo_group']) | |
|
285 | if group: | |
|
286 | validated_name = separator.join([group.group_name, validated_name]) | |
|
287 | ||
|
274 | 288 | # second pass to validate permissions to repo_group |
|
275 | 289 | second = RepoGroupAccessSchema().bind(**self.bindings) |
|
276 | 290 | appstruct_second = second.deserialize({'repo_group': validated_name}) |
@@ -60,6 +60,7 b' class TestRepoGroupSchema(object):' | |||
|
60 | 60 | assert schema_data['repo_group'] == { |
|
61 | 61 | 'repo_group_id': None, |
|
62 | 62 | 'repo_group_name': types.RootLocation, |
|
63 | 'repo_group_name_with_group': u'my_schema_group', | |
|
63 | 64 | 'repo_group_name_without_group': u'my_schema_group'} |
|
64 | 65 | |
|
65 | 66 | @pytest.mark.parametrize('given, err_key, expected_exc', [ |
@@ -96,6 +97,7 b' class TestRepoGroupSchema(object):' | |||
|
96 | 97 | assert schema_data['repo_group'] == { |
|
97 | 98 | 'repo_group_id': test_repo_group.group_id, |
|
98 | 99 | 'repo_group_name': test_repo_group.group_name, |
|
100 | 'repo_group_name_with_group': full_name, | |
|
99 | 101 | 'repo_group_name_without_group': u'my_schema_group'} |
|
100 | 102 | |
|
101 | 103 | def test_deserialize_with_group_name_regular_user_no_perms( |
General Comments 0
You need to be logged in to leave comments.
Login now