def create(self, group_name, group_description, owner, parent=None, just_db=False): try: user = self._get_user(owner) new_repos_group = RepoGroup() new_repos_group.user = user new_repos_group.group_description = group_description or group_name new_repos_group.parent_group = self._get_repo_group(parent) new_repos_group.group_name = new_repos_group.get_new_name(group_name) self.sa.add(new_repos_group) perm_obj = self._create_default_perms(new_repos_group) self.sa.add(perm_obj) #create an ADMIN permission for owner except if we're super admin, #later owner should go into the owner field of groups if not user.is_admin: self.grant_user_permission(repos_group=new_repos_group, user=owner, perm='group.admin') if not just_db: # we need to flush here, in order to check if database won't # throw any exceptions, create filesystem dirs at the very end self.sa.flush() self.__create_group(new_repos_group.group_name) return new_repos_group except Exception: log.error(traceback.format_exc()) raise
def create(self, group_name, group_description, owner, parent=None, just_db=False): try: new_repos_group = RepoGroup() new_repos_group.group_description = group_description or group_name new_repos_group.parent_group = self._get_repos_group(parent) new_repos_group.group_name = new_repos_group.get_new_name(group_name) self.sa.add(new_repos_group) self._create_default_perms(new_repos_group) #create an ADMIN permission for owner, later owner should go into #the owner field of groups self.grant_user_permission(repos_group=new_repos_group, user=owner, perm='group.admin') if not just_db: # we need to flush here, in order to check if database won't # throw any exceptions, create filesystem dirs at the very end self.sa.flush() self.__create_group(new_repos_group.group_name) return new_repos_group except Exception: log.error(traceback.format_exc()) raise
def create(self, group_name, group_description, parent, just_db=False): try: new_repos_group = RepoGroup() new_repos_group.group_description = group_description new_repos_group.parent_group = self.__get_repos_group(parent) new_repos_group.group_name = new_repos_group.get_new_name(group_name) self.sa.add(new_repos_group) self._create_default_perms(new_repos_group) if not just_db: # we need to flush here, in order to check if database won't # throw any exceptions, create filesystem dirs at the very end self.sa.flush() self.__create_group(new_repos_group.group_name) return new_repos_group except: log.error(traceback.format_exc()) raise
def create(self, group_name, group_description, parent, just_db=False): try: new_repos_group = RepoGroup() new_repos_group.group_description = group_description new_repos_group.parent_group = self.__get_repos_group(parent) new_repos_group.group_name = new_repos_group.get_new_name( group_name) self.sa.add(new_repos_group) self._create_default_perms(new_repos_group) if not just_db: # we need to flush here, in order to check if database won't # throw any exceptions, create filesystem dirs at the very end self.sa.flush() self.__create_group(new_repos_group.group_name) return new_repos_group except: log.error(traceback.format_exc()) raise
def create(self, group_name, group_description, owner, just_db=False, copy_permissions=False, commit_early=True): (group_name_cleaned, parent_group_name) = RepoGroupModel()._get_group_name_and_parent(group_name) parent_group = None if parent_group_name: parent_group = self._get_repo_group(parent_group_name) # becase we are doing a cleanup, we need to check if such directory # already exists. If we don't do that we can accidentally delete existing # directory via cleanup that can cause data issues, since delete does a # folder rename to special syntax later cleanup functions can delete this cleanup_group = self.check_exist_filesystem(group_name, exc_on_failure=False) try: user = self._get_user(owner) new_repo_group = RepoGroup() new_repo_group.user = user new_repo_group.group_description = group_description or group_name new_repo_group.parent_group = parent_group new_repo_group.group_name = group_name self.sa.add(new_repo_group) # create an ADMIN permission for owner except if we're super admin, # later owner should go into the owner field of groups if not user.is_admin: self.grant_user_permission(repo_group=new_repo_group, user=owner, perm='group.admin') if parent_group and copy_permissions: # copy permissions from parent user_perms = UserRepoGroupToPerm.query() \ .filter(UserRepoGroupToPerm.group == parent_group).all() group_perms = UserGroupRepoGroupToPerm.query() \ .filter(UserGroupRepoGroupToPerm.group == parent_group).all() for perm in user_perms: # don't copy over the permission for user who is creating # this group, if he is not super admin he get's admin # permission set above if perm.user != user or user.is_admin: UserRepoGroupToPerm.create( perm.user, new_repo_group, perm.permission) for perm in group_perms: UserGroupRepoGroupToPerm.create( perm.users_group, new_repo_group, perm.permission) else: perm_obj = self._create_default_perms(new_repo_group) self.sa.add(perm_obj) # now commit the changes, earlier so we are sure everything is in # the database. if commit_early: self.sa.commit() if not just_db: self._create_group(new_repo_group.group_name) # trigger the post hook from rhodecode.lib.hooks_base import log_create_repository_group repo_group = RepoGroup.get_by_group_name(group_name) log_create_repository_group( created_by=user.username, **repo_group.get_dict()) return new_repo_group except Exception: self.sa.rollback() log.exception('Exception occurred when creating repository group, ' 'doing cleanup...') # rollback things manually ! repo_group = RepoGroup.get_by_group_name(group_name) if repo_group: RepoGroup.delete(repo_group.group_id) self.sa.commit() if cleanup_group: RepoGroupModel()._delete_filesystem_group(repo_group) raise