# HG changeset patch # User Mads Kiilerich # Date 2022-12-10 17:18:05 # Node ID abc29122c7f2f4cd2bde3ed40399541d7ccb4703 # Parent fdc9c2fd439ae7c73c7f4021aa9084273499675d repo group: introduce editing of owner The repo group owner concept was only partially implemented. Owners were shown in the repo group listing, but couldn't be changed. Users owning repo groups couldn't be deleted, with no other solution than deleting owned repo groups. This also fixes the existing broken update_repo_group API, which tried to use unimplemented functionality. diff --git a/kallithea/controllers/admin/repo_groups.py b/kallithea/controllers/admin/repo_groups.py --- a/kallithea/controllers/admin/repo_groups.py +++ b/kallithea/controllers/admin/repo_groups.py @@ -76,6 +76,7 @@ class RepoGroupsController(base.BaseCont repo_group = db.RepoGroup.get_or_404(group_id) data = repo_group.get_dict() data['group_name'] = repo_group.name + data['owner'] = repo_group.owner.username # fill repository group users for p in repo_group.repo_group_to_perm: @@ -146,7 +147,7 @@ class RepoGroupsController(base.BaseCont group_name=form_result['group_name'], group_description=form_result['group_description'], parent=form_result['parent_group_id'], - owner=request.authuser.user_id, # TODO: make editable + owner=request.authuser.user_id, copy_permissions=form_result['group_copy_permissions'] ) meta.Session().commit() diff --git a/kallithea/model/forms.py b/kallithea/model/forms.py --- a/kallithea/model/forms.py +++ b/kallithea/model/forms.py @@ -173,6 +173,7 @@ def RepoGroupForm(edit=False, old_data=N group_copy_permissions = v.StringBoolean(if_missing=False) if edit: + owner = All(v.UnicodeString(not_empty=True), v.ValidRepoUser()) # FIXME: do a special check that we cannot move a group to one of # its children pass diff --git a/kallithea/model/repo_group.py b/kallithea/model/repo_group.py --- a/kallithea/model/repo_group.py +++ b/kallithea/model/repo_group.py @@ -281,6 +281,8 @@ class RepoGroupModel(object): old_path = repo_group.full_path # change properties + if 'owner' in repo_group_args: + repo_group.owner = db.User.get_by_username(repo_group_args['owner']) if 'group_description' in repo_group_args: repo_group.group_description = repo_group_args['group_description'] if 'parent_group_id' in repo_group_args: diff --git a/kallithea/templates/admin/repo_groups/repo_group_edit_settings.html b/kallithea/templates/admin/repo_groups/repo_group_edit_settings.html --- a/kallithea/templates/admin/repo_groups/repo_group_edit_settings.html +++ b/kallithea/templates/admin/repo_groups/repo_group_edit_settings.html @@ -9,6 +9,13 @@
+ +
+ ${h.text('owner',class_='form-control', placeholder=_('Type name of user'))} +
+
+ +
${h.textarea('group_description',cols=23,rows=5,class_='form-control')} @@ -47,5 +54,6 @@ $("#parent_group_id").select2({ 'dropdownAutoWidth': true }); + SimpleUserAutoComplete($('#owner')); }); diff --git a/kallithea/tests/api/api_base.py b/kallithea/tests/api/api_base.py --- a/kallithea/tests/api/api_base.py +++ b/kallithea/tests/api/api_base.py @@ -1851,7 +1851,7 @@ class _BaseTestApi(object): self._compare_error(id_, expected, given=response.body) @base.parametrize('changing_attr,updates', [ - #('owner', {'owner': base.TEST_USER_REGULAR_LOGIN}), # currently broken + ('owner', {'owner': base.TEST_USER_REGULAR_LOGIN}), ('description', {'description': 'new description'}), ('group_name', {'group_name': 'new_repo_name'}), ('parent', {'parent': 'test_group_for_update'}), diff --git a/kallithea/tests/functional/test_admin_repo_groups.py b/kallithea/tests/functional/test_admin_repo_groups.py --- a/kallithea/tests/functional/test_admin_repo_groups.py +++ b/kallithea/tests/functional/test_admin_repo_groups.py @@ -53,6 +53,7 @@ class TestRepoGroupsController(base.Test # edit response = self.app.post(base.url('update_repos_group', group_name=group_name), {'group_name': group_name, + 'owner': base.TEST_USER_REGULAR2_LOGIN, 'group_description': 'lolo', '_session_csrf_secret_token': self.session_csrf_secret_token()}) self.checkSessionFlash(response, 'Updated repository group %s' % group_name)