Projects::CreateService refactor
Created by: rspeicher
Major feature of this PR is the refactor of Projects::CreateService, but after I refactored that with everything green, I attacked its spec to clean that up a bit too.
Also includes some other minor changes to clean things up a bit.
Created by: rspeicher
In theory, simpler code is simpler to maintain and less likely to introduce new bugs in future changes.
I saw a logically complex class and tried to simplify it.
On Thursday, March 20, 2014, Dmitriy Zaporozhets notifications@github.com wrote:
@tsigo https://github.com/tsigo your contributions are always welcome. You did a lot for gitlab. But such PR does not makes sense for me. Its just replace one code with another without any benefits. Correct me if Im wrong.
Reply to this email directly or view it on GitHubhttps://github.com/gitlabhq/gitlabhq/pull/6579#issuecomment-38202793 .
By Administrator on 2014-03-20T18:22:41 (imported from GitLab project)
Created by: rspeicher
CreateService#execute before:
def execute # get namespace id namespace_id = params.delete(:namespace_id) # check that user is allowed to set specified visibility_level unless Gitlab::VisibilityLevel.allowed_for?(current_user, params[:visibility_level]) params.delete(:visibility_level) end # Load default feature settings default_features = Gitlab.config.gitlab.default_projects_features default_opts = { issues_enabled: default_features.issues, wiki_enabled: default_features.wiki, wall_enabled: default_features.wall, snippets_enabled: default_features.snippets, merge_requests_enabled: default_features.merge_requests, visibility_level: default_features.visibility_level }.stringify_keys @project = Project.new(default_opts.merge(params)) # Parametrize path for project # # Ex. # 'GitLab HQ'.parameterize => "gitlab-hq" # @project.path = @project.name.dup.parameterize unless @project.path.present? if namespace_id # Find matching namespace and check if it allowed # for current user if namespace_id passed. if allowed_namespace?(current_user, namespace_id) @project.namespace_id = namespace_id else deny_namespace return @project end else # Set current user namespace if namespace_id is nil @project.namespace_id = current_user.namespace_id end @project.creator = current_user if @project.save unless @project.group @project.users_projects.create( project_access: UsersProject::MASTER, user: current_user ) end @project.update_column(:last_activity_at, @project.created_at) if @project.import? @project.import_start else GitlabShellWorker.perform_async( :add_repository, @project.path_with_namespace ) end if @project.wiki_enabled? begin # force the creation of a wiki, GollumWiki.new(@project, @project.owner).wiki rescue GollumWiki::CouldNotCreateWikiError => ex # Prevent project observer crash # if failed to create wiki nil end end end @project rescue => ex @project.errors.add(:base, "Can't save project. Please try again later") @project end
After:
def execute assign_namespace(namespace_id) project.creator = current_user begin if project.save add_user_as_master unless project.group project.update_column(:last_activity_at, project.created_at) import_repository create_wiki end rescue => ex project.errors.add(:base, "Can't save project. Please try again later") end project end
I know which one I'd rather make changes to.
By Administrator on 2014-03-21T13:41:38 (imported from GitLab project)