diff rhodecode/model/repos_group.py @ 1591:0b63a0d2cede beta

Merge with upstream
author Nicolas VINOT <aeris@imirhil.fr>
date Wed, 19 Oct 2011 01:47:56 +0200
parents ada6926c374f 307ec693bdf2
children 92a4f7c496a5
line wrap: on
line diff
--- a/rhodecode/model/repos_group.py	Mon Oct 17 15:48:19 2011 +0200
+++ b/rhodecode/model/repos_group.py	Wed Oct 19 01:47:56 2011 +0200
@@ -36,21 +36,21 @@
 from rhodecode.model.caching_query import FromCache
 from rhodecode.model.db import Group, RhodeCodeUi
 
-log = logging.getLogger(__name__)
+log = logging.getLogger( __name__ )
 
 
-class ReposGroupModel(BaseModel):
+class ReposGroupModel( BaseModel ):
 
     @LazyProperty
-    def repos_path(self):
+    def repos_path( self ):
         """
         Get's the repositories root path from database
         """
 
-        q = RhodeCodeUi.get_by_key('/').one()
+        q = RhodeCodeUi.get_by_key( '/' ).one()
         return q.ui_value
 
-    def __create_group(self, group_name):
+    def __create_group( self, group_name, parent_id ):
         """
         makes repositories group on filesystem
 
@@ -58,107 +58,117 @@
         :param parent_id:
         """
 
-        create_path = os.path.join(self.repos_path, group_name)
-        log.debug('creating new group in %s', create_path)
+        if parent_id:
+            paths = Group.get( parent_id ).full_path.split( Group.url_sep() )
+            parent_path = os.sep.join( paths )
+        else:
+            parent_path = ''
+
+        create_path = os.path.join( self.repos_path, parent_path, group_name )
+        log.debug( 'creating new group in %s', create_path )
 
-        if os.path.isdir(create_path):
-            raise Exception('That directory already exists !')
+        if os.path.isdir( create_path ):
+            raise Exception( 'That directory already exists !' )
+
 
-        os.makedirs(create_path)
+        os.makedirs( create_path )
 
-    def __rename_group(self, old, new):
+
+    def __rename_group( self, old, old_parent_id, new, new_parent_id ):
         """
         Renames a group on filesystem
         
         :param group_name:
         """
+        log.debug( 'renaming repos group from %s to %s', old, new )
 
-        if old == new:
-            log.debug('skipping group rename')
-            return
-
-        log.debug('renaming repos group from %s to %s', old, new)
-
+        if new_parent_id:
+            paths = Group.get( new_parent_id ).full_path.split( Group.url_sep() )
+            new_parent_path = os.sep.join( paths )
+        else:
+            new_parent_path = ''
 
-        old_path = os.path.join(self.repos_path, old)
-        new_path = os.path.join(self.repos_path, new)
+        if old_parent_id:
+            paths = Group.get( old_parent_id ).full_path.split( Group.url_sep() )
+            old_parent_path = os.sep.join( paths )
+        else:
+            old_parent_path = ''
 
-        log.debug('renaming repos paths from %s to %s', old_path, new_path)
+        old_path = os.path.join( self.repos_path, old_parent_path, old )
+        new_path = os.path.join( self.repos_path, new_parent_path, new )
 
-        if os.path.isdir(new_path):
-            raise Exception('Was trying to rename to already '
-                            'existing dir %s' % new_path)
-        shutil.move(old_path, new_path)
+        log.debug( 'renaming repos paths from %s to %s', old_path, new_path )
 
-    def __delete_group(self, group):
+        if os.path.isdir( new_path ):
+            raise Exception( 'Was trying to rename to already '
+                            'existing dir %s' % new_path )
+        shutil.move( old_path, new_path )
+
+    def __delete_group( self, group ):
         """
         Deletes a group from a filesystem
         
         :param group: instance of group from database
         """
-        paths = group.full_path.split(Group.url_sep())
-        paths = os.sep.join(paths)
+        paths = group.full_path.split( Group.url_sep() )
+        paths = os.sep.join( paths )
 
-        rm_path = os.path.join(self.repos_path, paths)
-        if os.path.isdir(rm_path):
-            # delete only if that path really exists
-            os.rmdir(rm_path)
+        rm_path = os.path.join( self.repos_path, paths )
+        os.rmdir( rm_path )
 
-    def create(self, form_data):
+    def create( self, form_data ):
         try:
             new_repos_group = Group()
-            new_repos_group.group_description = form_data['group_description']
-            new_repos_group.parent_group = Group.get(form_data['group_parent_id'])
-            new_repos_group.group_name = new_repos_group.get_new_name(form_data['group_name'])
+            new_repos_group.group_name = form_data['group_name']
+            new_repos_group.group_description = \
+                form_data['group_description']
+            new_repos_group.group_parent_id = form_data['group_parent_id']
 
-            self.sa.add(new_repos_group)
+            self.sa.add( new_repos_group )
 
-            self.__create_group(new_repos_group.group_name)
+            self.__create_group( form_data['group_name'],
+                                form_data['group_parent_id'] )
 
             self.sa.commit()
             return new_repos_group
         except:
-            log.error(traceback.format_exc())
+            log.error( traceback.format_exc() )
             self.sa.rollback()
             raise
 
-    def update(self, repos_group_id, form_data):
+    def update( self, repos_group_id, form_data ):
 
         try:
-            repos_group = Group.get(repos_group_id)
-            old_path = repos_group.full_path
-
-            #change properties
-            repos_group.group_description = form_data['group_description']
-            repos_group.parent_group = Group.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
+            repos_group = Group.get( repos_group_id )
+            old_name = repos_group.group_name
+            old_parent_id = repos_group.group_parent_id
 
-            self.sa.add(repos_group)
-
-            self.__rename_group(old_path, new_path)
+            repos_group.group_name = form_data['group_name']
+            repos_group.group_description = \
+                form_data['group_description']
+            repos_group.group_parent_id = form_data['group_parent_id']
 
-            # 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.sa.add( repos_group )
+
+            if old_name != form_data['group_name'] or ( old_parent_id !=
+                                                form_data['group_parent_id'] ):
+                self.__rename_group( old = old_name, old_parent_id = old_parent_id,
+                                    new = form_data['group_name'],
+                                    new_parent_id = form_data['group_parent_id'] )
 
             self.sa.commit()
-            return repos_group
         except:
-            log.error(traceback.format_exc())
+            log.error( traceback.format_exc() )
             self.sa.rollback()
             raise
 
-    def delete(self, users_group_id):
+    def delete( self, users_group_id ):
         try:
-            users_group = Group.get(users_group_id)
-            self.sa.delete(users_group)
-            self.__delete_group(users_group)
+            users_group = Group.get( users_group_id )
+            self.sa.delete( users_group )
+            self.__delete_group( users_group )
             self.sa.commit()
         except:
-            log.error(traceback.format_exc())
+            log.error( traceback.format_exc() )
             self.sa.rollback()
             raise