Dont allow project creation without repository
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
parent
27cd35de69
commit
674cbe939c
|
@ -19,10 +19,11 @@ class ProjectsController < ApplicationController
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@project = ::Projects::CreateService.new(current_user, project_params).execute
|
@project = ::Projects::CreateService.new(current_user, project_params).execute
|
||||||
flash[:notice] = 'Project was successfully created.' if @project.saved?
|
|
||||||
|
|
||||||
respond_to do |format|
|
if @project.saved?
|
||||||
format.js
|
redirect_to project_path(@project), notice: 'Project was successfully created.'
|
||||||
|
else
|
||||||
|
render 'new'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -586,4 +586,25 @@ class Project < ActiveRecord::Base
|
||||||
def origin_merge_requests
|
def origin_merge_requests
|
||||||
merge_requests.where(source_project_id: self.id)
|
merge_requests.where(source_project_id: self.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def create_repository
|
||||||
|
if gitlab_shell.add_repository(path_with_namespace)
|
||||||
|
true
|
||||||
|
else
|
||||||
|
errors.add(:base, "Failed to create repository")
|
||||||
|
false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def repository_exists?
|
||||||
|
!!repository.exists?
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_wiki
|
||||||
|
ProjectWiki.new(self, self.owner).wiki
|
||||||
|
true
|
||||||
|
rescue ProjectWiki::CouldNotCreateWikiError => ex
|
||||||
|
errors.add(:base, "Failed create wiki")
|
||||||
|
false
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -37,35 +37,22 @@ module Projects
|
||||||
|
|
||||||
@project.creator = current_user
|
@project.creator = current_user
|
||||||
|
|
||||||
if @project.save
|
Project.transaction do
|
||||||
log_info("#{@project.owner.name} created a new project \"#{@project.name_with_namespace}\"")
|
@project.save
|
||||||
system_hook_service.execute_hooks_for(@project, :create)
|
|
||||||
|
|
||||||
unless @project.group
|
unless @project.import?
|
||||||
@project.team << [current_user, :master]
|
unless @project.create_repository
|
||||||
end
|
raise 'Failed to create repository'
|
||||||
|
end
|
||||||
@project.update_column(:last_activity_at, @project.created_at)
|
end
|
||||||
|
|
||||||
if @project.import?
|
|
||||||
@project.import_start
|
|
||||||
else
|
|
||||||
GitlabShellWorker.perform_async(
|
|
||||||
:add_repository,
|
|
||||||
@project.path_with_namespace
|
|
||||||
)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if @project.persisted?
|
||||||
if @project.wiki_enabled?
|
if @project.wiki_enabled?
|
||||||
begin
|
@project.create_wiki
|
||||||
# force the creation of a wiki,
|
|
||||||
ProjectWiki.new(@project, @project.owner).wiki
|
|
||||||
rescue ProjectWiki::CouldNotCreateWikiError => ex
|
|
||||||
# Prevent project observer crash
|
|
||||||
# if failed to create wiki
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
after_create_actions
|
||||||
end
|
end
|
||||||
|
|
||||||
@project
|
@project
|
||||||
|
@ -84,5 +71,20 @@ module Projects
|
||||||
namespace = Namespace.find_by(id: namespace_id)
|
namespace = Namespace.find_by(id: namespace_id)
|
||||||
current_user.can?(:create_projects, namespace)
|
current_user.can?(:create_projects, namespace)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def after_create_actions
|
||||||
|
log_info("#{@project.owner.name} created a new project \"#{@project.name_with_namespace}\"")
|
||||||
|
system_hook_service.execute_hooks_for(@project, :create)
|
||||||
|
|
||||||
|
unless @project.group
|
||||||
|
@project.team << [current_user, :master]
|
||||||
|
end
|
||||||
|
|
||||||
|
@project.update_column(:last_activity_at, @project.created_at)
|
||||||
|
|
||||||
|
if @project.import?
|
||||||
|
@project.import_start
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
- if @project.saved?
|
|
||||||
- if @project.import?
|
|
||||||
:plain
|
|
||||||
location.href = "#{import_project_path(@project)}";
|
|
||||||
- else
|
|
||||||
:plain
|
|
||||||
location.href = "#{project_path(@project)}";
|
|
||||||
- else
|
|
||||||
:plain
|
|
||||||
$(".project-edit-errors").html("#{escape_javascript(render('errors'))}");
|
|
||||||
$('.project-submit').enable();
|
|
||||||
$('.save-project-loader').hide();
|
|
||||||
$('.project-edit-container').show();
|
|
|
@ -3,7 +3,7 @@
|
||||||
= render 'projects/errors'
|
= render 'projects/errors'
|
||||||
.project-edit-content
|
.project-edit-content
|
||||||
|
|
||||||
= form_for @project, remote: true, html: { class: 'new_project form-horizontal' } do |f|
|
= form_for @project, html: { class: 'new_project form-horizontal' } do |f|
|
||||||
.form-group.project-name-holder
|
.form-group.project-name-holder
|
||||||
= f.label :name, class: 'control-label' do
|
= f.label :name, class: 'control-label' do
|
||||||
%strong Project name
|
%strong Project name
|
||||||
|
|
Loading…
Reference in New Issue