##// END OF EJS Templates
release: merge back stable branch into default
marcink -
r2344:e110c80e merge default
parent child Browse files
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