diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py --- a/rhodecode/model/db.py +++ b/rhodecode/model/db.py @@ -872,6 +872,18 @@ class UserRepoToPerm(Base, BaseModel): 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 ' %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 @@ class UsersGroupRepoToPerm(Base, BaseMod 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 ' %s >' % (self.users_group, self.repository) diff --git a/rhodecode/model/repo.py b/rhodecode/model/repo.py --- a/rhodecode/model/repo.py +++ b/rhodecode/model/repo.py @@ -244,24 +244,46 @@ class RepoModel(BaseModel): 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'], diff --git a/rhodecode/model/user.py b/rhodecode/model/user.py --- a/rhodecode/model/user.py +++ b/rhodecode/model/user.py @@ -376,21 +376,21 @@ class UserModel(BaseModel): #================================================================== 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 @@ class UserModel(BaseModel): # 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 == diff --git a/rhodecode/templates/files/files_browser.html b/rhodecode/templates/files/files_browser.html --- a/rhodecode/templates/files/files_browser.html +++ b/rhodecode/templates/files/files_browser.html @@ -84,7 +84,7 @@ %if node.is_file(): - + ${'r%s:%s' % (node.last_changeset.revision,node.last_changeset.short_id)} %endif