changeset 1729:da8ee2ef7f6d beta

implements #236 forking copy permission option
author Marcin Kuzminski <marcin@python-works.com>
date Sat, 26 Nov 2011 18:51:16 +0200
parents 07e56179633e
children ce0b47534c36
files rhodecode/model/db.py rhodecode/model/repo.py rhodecode/model/user.py rhodecode/templates/files/files_browser.html
diffstat 4 files changed, 66 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/model/db.py	Sat Nov 26 17:51:03 2011 +0200
+++ b/rhodecode/model/db.py	Sat Nov 26 18:51:16 2011 +0200
@@ -872,6 +872,18 @@
     permission = relationship('Permission')
     repository = relationship('Repository')
 
+    @classmethod
+    def create(cls, user, repository, permission):
+        n = cls()
+        n.user = user
+        n.repository = repository
+        n.permission = permission
+        Session().add(n)
+        return n
+
+    def __repr__(self):
+        return '<user:%s => %s >' % (self.user, self.repository)
+
 class UserToPerm(Base, BaseModel):
     __tablename__ = 'user_to_perm'
     __table_args__ = (UniqueConstraint('user_id', 'permission_id'), {'extend_existing':True})
@@ -930,6 +942,15 @@
     permission = relationship('Permission')
     repository = relationship('Repository')
 
+    @classmethod
+    def create(cls, users_group, repository, permission):
+        n = cls()
+        n.users_group = users_group
+        n.repository = repository
+        n.permission = permission
+        Session().add(n)
+        return n
+
     def __repr__(self):
         return '<userGroup:%s => %s >' % (self.users_group, self.repository)
 
--- a/rhodecode/model/repo.py	Sat Nov 26 17:51:03 2011 +0200
+++ b/rhodecode/model/repo.py	Sat Nov 26 18:51:16 2011 +0200
@@ -244,24 +244,46 @@
             new_repo.user_id = cur_user.user_id
             self.sa.add(new_repo)
 
-            #create default permission
-            repo_to_perm = UserRepoToPerm()
-            default = 'repository.read'
-            for p in User.get_by_username('default').user_perms:
-                if p.permission.permission_name.startswith('repository.'):
-                    default = p.permission.permission_name
-                    break
+            def _create_default_perms():
+                # create default permission
+                repo_to_perm = UserRepoToPerm()
+                default = 'repository.read'
+                for p in User.get_by_username('default').user_perms:
+                    if p.permission.permission_name.startswith('repository.'):
+                        default = p.permission.permission_name
+                        break
+
+                default_perm = 'repository.none' if form_data['private'] else default
+
+                repo_to_perm.permission_id = self.sa.query(Permission)\
+                        .filter(Permission.permission_name == default_perm)\
+                        .one().permission_id
+
+                repo_to_perm.repository = new_repo
+                repo_to_perm.user_id = User.get_by_username('default').user_id
+
+                self.sa.add(repo_to_perm)
 
-            default_perm = 'repository.none' if form_data['private'] else default
+
+            if fork:
+                if form_data.get('copy_permissions'):
+                    repo = Repository.get(fork_parent_id)
+                    user_perms = UserRepoToPerm.query()\
+                        .filter(UserRepoToPerm.repository == repo).all()
+                    group_perms = UsersGroupRepoToPerm.query()\
+                        .filter(UsersGroupRepoToPerm.repository == repo).all()
 
-            repo_to_perm.permission_id = self.sa.query(Permission)\
-                    .filter(Permission.permission_name == default_perm)\
-                    .one().permission_id
+                    for perm in user_perms:
+                        UserRepoToPerm.create(perm.user, new_repo,
+                                              perm.permission)
 
-            repo_to_perm.repository = new_repo
-            repo_to_perm.user_id = User.get_by_username('default').user_id
-
-            self.sa.add(repo_to_perm)
+                    for perm in group_perms:
+                        UsersGroupRepoToPerm.create(perm.users_group, new_repo,
+                                                    perm.permission)
+                else:
+                    _create_default_perms()
+            else:
+                _create_default_perms()
 
             if not just_db:
                 self.__create_repo(repo_name, form_data['repo_type'],
--- a/rhodecode/model/user.py	Sat Nov 26 17:51:03 2011 +0200
+++ b/rhodecode/model/user.py	Sat Nov 26 18:51:16 2011 +0200
@@ -376,21 +376,21 @@
             #==================================================================
             uid = user.user_id
 
-            #default global
+            # default global
             default_global_perms = self.sa.query(UserToPerm)\
                 .filter(UserToPerm.user_id == default_user_id)
 
             for perm in default_global_perms:
                 user.permissions['global'].add(perm.permission.permission_name)
 
-            #default for repositories
+            # default for repositories
             for perm in default_perms:
                 if perm.Repository.private and not (perm.Repository.user_id ==
                                                     uid):
-                    #disable defaults for private repos,
+                    # disable defaults for private repos,
                     p = 'repository.none'
                 elif perm.Repository.user_id == uid:
-                    #set admin if owner
+                    # set admin if owner
                     p = 'repository.admin'
                 else:
                     p = perm.Permission.permission_name
@@ -402,16 +402,15 @@
             # overwrite default with user permissions if any
             #==================================================================
 
-            #user global
+            # user global
             user_perms = self.sa.query(UserToPerm)\
                     .options(joinedload(UserToPerm.permission))\
                     .filter(UserToPerm.user_id == uid).all()
 
             for perm in user_perms:
-                user.permissions['global'].add(perm.permission.
-                                               permission_name)
+                user.permissions['global'].add(perm.permission.permission_name)
 
-            #user repositories
+            # user repositories
             user_repo_perms = self.sa.query(UserRepoToPerm, Permission,
                                             Repository)\
                 .join((Repository, UserRepoToPerm.repository_id ==
--- a/rhodecode/templates/files/files_browser.html	Sat Nov 26 17:51:03 2011 +0200
+++ b/rhodecode/templates/files/files_browser.html	Sat Nov 26 18:51:16 2011 +0200
@@ -84,7 +84,7 @@
 		             </td>
 		             <td>
 		             	%if node.is_file():
-		             		<span class="tooltip" title="${node.last_changeset.raw_id}">
+		             		<span class="tooltip" title="${node.last_changeset.message}">
 		             		${'r%s:%s' % (node.last_changeset.revision,node.last_changeset.short_id)}</span>
 		             	%endif
 		             </td>