Mercurial > kallithea
changeset 5946:ffe4d5060d91 stable
api: avoid duplicating group name when updating repo (Issue #37)
The api incorrectly passed repo.repo_name as repo_name, and the model update
function incorrectly always required repo_name.
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Mon, 30 May 2016 15:32:22 +0200 |
parents | 34ef164e0635 |
children | 6754597990cb |
files | kallithea/controllers/api/api.py kallithea/model/repo.py kallithea/tests/api/api_base.py |
diffstat | 3 files changed, 48 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/kallithea/controllers/api/api.py Mon May 30 15:32:22 2016 +0200 +++ b/kallithea/controllers/api/api.py Mon May 30 15:32:22 2016 +0200 @@ -1567,10 +1567,7 @@ 'Only Kallithea admin can specify `owner` param' ) - updates = { - # update function requires this. - 'repo_name': repo.repo_name - } + updates = {} repo_group = group if not isinstance(repo_group, Optional): repo_group = get_repo_group_or_error(repo_group)
--- a/kallithea/model/repo.py Mon May 30 15:32:22 2016 +0200 +++ b/kallithea/model/repo.py Mon May 30 15:32:22 2016 +0200 @@ -322,6 +322,7 @@ if 'repo_group' in kwargs: cur_repo.group = RepoGroup.get(kwargs['repo_group']) + cur_repo.repo_name = cur_repo.get_new_name(cur_repo.just_name) log.debug('Updating repo %s with params:%s', cur_repo, kwargs) for k in ['repo_enable_downloads', 'repo_description', @@ -336,10 +337,10 @@ if clone_uri is not None and clone_uri != cur_repo.clone_uri_hidden: cur_repo.clone_uri = clone_uri - new_name = cur_repo.get_new_name(kwargs['repo_name']) - cur_repo.repo_name = new_name + if 'repo_name' in kwargs: + cur_repo.repo_name = cur_repo.get_new_name(kwargs['repo_name']) + #if private flag is set, reset default permission to NONE - if kwargs.get('repo_private'): EMPTY_PERM = 'repository.none' RepoModel().grant_user_permission( @@ -355,9 +356,9 @@ self.sa.add(ex_field) self.sa.add(cur_repo) - if org_repo_name != new_name: + if org_repo_name != cur_repo.repo_name: # rename repository - self._rename_filesystem_repo(old=org_repo_name, new=new_name) + self._rename_filesystem_repo(old=org_repo_name, new=cur_repo.repo_name) return cur_repo except Exception:
--- a/kallithea/tests/api/api_base.py Mon May 30 15:32:22 2016 +0200 +++ b/kallithea/tests/api/api_base.py Mon May 30 15:32:22 2016 +0200 @@ -1171,6 +1171,47 @@ if changing_attr == 'repo_group': fixture.destroy_repo_group(updates['group']) + @parameterized.expand([ + ('owner', {'owner': TEST_USER_REGULAR_LOGIN}), + ('description', {'description': u'new description'}), + ('active', {'active': True}), + ('active', {'active': False}), + ('clone_uri', {'clone_uri': 'http://example.com/repo'}), + ('clone_uri', {'clone_uri': None}), + ('landing_rev', {'landing_rev': 'branch:master'}), + ('enable_statistics', {'enable_statistics': True}), + ('enable_locking', {'enable_locking': True}), + ('enable_downloads', {'enable_downloads': True}), + ('name', {'name': u'new_repo_name'}), + ('repo_group', {'group': u'test_group_for_update'}), + ]) + def test_api_update_group_repo(self, changing_attr, updates): + group_name = u'lololo' + fixture.create_repo_group(group_name) + repo_name = u'%s/api_update_me' % group_name + repo = fixture.create_repo(repo_name, repo_group=group_name, repo_type=self.REPO_TYPE) + if changing_attr == 'repo_group': + fixture.create_repo_group(updates['group']) + + id_, params = _build_data(self.apikey, 'update_repo', + repoid=repo_name, **updates) + response = api_call(self, params) + if changing_attr == 'name': + repo_name = u'%s/%s' % (group_name, updates['name']) + if changing_attr == 'repo_group': + repo_name = u'/'.join([updates['group'], repo_name.rsplit('/', 1)[-1]]) + try: + expected = { + 'msg': 'updated repo ID:%s %s' % (repo.repo_id, repo_name), + 'repository': repo.get_api_data() + } + self._compare_ok(id_, expected, given=response.body) + finally: + fixture.destroy_repo(repo_name) + if changing_attr == 'repo_group': + fixture.destroy_repo_group(updates['group']) + fixture.destroy_repo_group(group_name) + def test_api_update_repo_repo_group_does_not_exist(self): repo_name = 'admin_owned' fixture.create_repo(repo_name)