changeset 5948:7d0052c68a6f

Merge stable
author Mads Kiilerich <madski@unity3d.com>
date Mon, 30 May 2016 15:44:36 +0200
parents a3c91d420bf3 (current diff) 6754597990cb (diff)
children 3578484a86d2
files kallithea/controllers/api/api.py kallithea/model/repo.py kallithea/tests/__init__.py kallithea/tests/api/api_base.py
diffstat 5 files changed, 59 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/controllers/api/api.py	Mon May 23 18:04:56 2016 +0200
+++ b/kallithea/controllers/api/api.py	Mon May 30 15:44:36 2016 +0200
@@ -1566,10 +1566,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)
@@ -1677,9 +1674,10 @@
         try:
             # create structure of groups and return the last group
             group = map_groups(fork_name)
+            fork_base_name = fork_name.rsplit('/', 1)[-1]
 
             form_data = dict(
-                repo_name=fork_name,
+                repo_name=fork_base_name,
                 repo_name_full=fork_name,
                 repo_group=group,
                 repo_type=repo.repo_type,
--- a/kallithea/lib/dbmigrate/versions/018_version_2_0_0.py	Mon May 23 18:04:56 2016 +0200
+++ b/kallithea/lib/dbmigrate/versions/018_version_2_0_0.py	Mon May 30 15:44:36 2016 +0200
@@ -64,9 +64,11 @@
         old_setting = models.Setting.get_by_name(k)
         name = 'auth_%s' % k
         setting = models.Setting.get_by_name(name)
-        if not setting:
+        if setting is None:
             # if we don't have this option create it
-            setting = models.Setting(name, old_setting.app_settings_value, t)
+            if old_setting is not None:
+                v = old_setting.app_settings_value
+            setting = models.Setting(name, v, t)
 
         _SESSION().add(setting)
         _SESSION().commit()
--- a/kallithea/model/repo.py	Mon May 23 18:04:56 2016 +0200
+++ b/kallithea/model/repo.py	Mon May 30 15:44:36 2016 +0200
@@ -327,6 +327,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',
@@ -341,10 +342,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(
@@ -360,9 +361,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/__init__.py	Mon May 23 18:04:56 2016 +0200
+++ b/kallithea/tests/__init__.py	Mon May 30 15:44:36 2016 +0200
@@ -226,4 +226,3 @@
 
     def checkSessionFlashRegex(self, response, regex, skip=0):
         self.checkSessionFlash(response, regex, skip=skip, _matcher=re.search)
-
--- a/kallithea/tests/api/api_base.py	Mon May 23 18:04:56 2016 +0200
+++ b/kallithea/tests/api/api_base.py	Mon May 30 15:44:36 2016 +0200
@@ -1180,6 +1180,47 @@
             if changing_attr == 'repo_group':
                 fixture.destroy_repo_group(updates['group'])
 
+    @parametrize('changing_attr,updates', [
+        ('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 = u'admin_owned'
         fixture.create_repo(repo_name)
@@ -1359,8 +1400,11 @@
         self._compare_ok(id_, expected, given=response.body)
         fixture.destroy_repo(fork_name)
 
-    def test_api_fork_repo_non_admin(self):
-        fork_name = u'api-repo-fork'
+    @parametrize('fork_name', [
+        u'api-repo-fork',
+        u'%s/api-repo-fork' % TEST_REPO_GROUP,
+    ])
+    def test_api_fork_repo_non_admin(self, fork_name):
         id_, params = _build_data(self.apikey_regular, 'fork_repo',
                                   repoid=self.REPO,
                                   fork_name=fork_name,