Mercurial > kallithea
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>