diff rhodecode/model/repos_group.py @ 3472:702da441f5c4

fixed issue with renaming repos group together with changing parents with multiple nested trees added regresion tests for such cases
author Marcin Kuzminski <marcin@python-works.com>
date Wed, 06 Mar 2013 00:20:13 +0100
parents 6f82f8bdd22c
children 3563bb7b4b82
line wrap: on
line diff
--- a/rhodecode/model/repos_group.py	Mon Mar 04 18:44:36 2013 +0100
+++ b/rhodecode/model/repos_group.py	Wed Mar 06 00:20:13 2013 +0100
@@ -244,27 +244,37 @@
 
             # change properties
             repos_group.group_description = form_data['group_description']
-            repos_group.parent_group = RepoGroup.get(form_data['group_parent_id'])
             repos_group.group_parent_id = form_data['group_parent_id']
             repos_group.enable_locking = form_data['enable_locking']
+
+            repos_group.parent_group = RepoGroup.get(form_data['group_parent_id'])
             repos_group.group_name = repos_group.get_new_name(form_data['group_name'])
             new_path = repos_group.full_path
-
             self.sa.add(repos_group)
 
-            # iterate over all members of this groups and set the locking !
+            # iterate over all members of this groups and do fixes
+            # set locking if given
+            # if obj is a repoGroup also fix the name of the group according
+            # to the parent
+            # if obj is a Repo fix it's name
             # this can be potentially heavy operation
             for obj in repos_group.recursive_groups_and_repos():
                 #set the value from it's parent
                 obj.enable_locking = repos_group.enable_locking
+                if isinstance(obj, RepoGroup):
+                    new_name = obj.get_new_name(obj.name)
+                    log.debug('Fixing group %s to new name %s' \
+                                % (obj.group_name, new_name))
+                    obj.group_name = new_name
+                elif isinstance(obj, Repository):
+                    # we need to get all repositories from this new group and
+                    # rename them accordingly to new group path
+                    new_name = obj.get_new_name(obj.just_name)
+                    log.debug('Fixing repo %s to new name %s' \
+                                % (obj.repo_name, new_name))
+                    obj.repo_name = new_name
                 self.sa.add(obj)
 
-            # we need to get all repositories from this new group and
-            # rename them accordingly to new group path
-            for r in repos_group.repositories:
-                r.repo_name = r.get_new_name(r.just_name)
-                self.sa.add(r)
-
             self.__rename_group(old_path, new_path)
 
             return repos_group