Create master branch first if project is repository-less
This commit is contained in:
parent
319dfd68a8
commit
08e4d98cac
4 changed files with 90 additions and 5 deletions
|
@ -1,8 +1,10 @@
|
|||
class Projects::BranchesController < Projects::ApplicationController
|
||||
include ActionView::Helpers::SanitizeHelper
|
||||
include SortingHelper
|
||||
include ProjectsHelper
|
||||
|
||||
# Authorize
|
||||
before_action :require_non_empty_project
|
||||
before_action :require_non_empty_project, except: :create
|
||||
before_action :authorize_download_code!
|
||||
before_action :authorize_push_code!, only: [:new, :create, :destroy, :destroy_all_merged]
|
||||
|
||||
|
@ -32,6 +34,8 @@ class Projects::BranchesController < Projects::ApplicationController
|
|||
branch_name = sanitize(strip_tags(params[:branch_name]))
|
||||
branch_name = Addressable::URI.unescape(branch_name)
|
||||
|
||||
is_redirect_to_autodeploy_needed = project.empty_repo? && project.deployment_services.present?
|
||||
|
||||
result = CreateBranchService.new(project, current_user).
|
||||
execute(branch_name, ref)
|
||||
|
||||
|
@ -42,8 +46,16 @@ class Projects::BranchesController < Projects::ApplicationController
|
|||
|
||||
if result[:status] == :success
|
||||
@branch = result[:branch]
|
||||
redirect_to namespace_project_tree_path(@project.namespace, @project,
|
||||
@branch.name)
|
||||
|
||||
if is_redirect_to_autodeploy_needed
|
||||
redirect_to(
|
||||
url_to_autodeploy_setup(project, branch_name),
|
||||
notice: "Branch \"#{sanitize(branch_name)}\" was created. To set up auto deploy, \
|
||||
choose a GitLab CI Yaml template and commit your changes. #{view_context.link_to_autodeploy_doc}".html_safe)
|
||||
else
|
||||
redirect_to namespace_project_tree_path(@project.namespace, @project,
|
||||
@branch.name)
|
||||
end
|
||||
else
|
||||
@error = result[:message]
|
||||
render action: 'new'
|
||||
|
@ -76,7 +88,7 @@ class Projects::BranchesController < Projects::ApplicationController
|
|||
ref_escaped = sanitize(strip_tags(params[:ref]))
|
||||
Addressable::URI.unescape(ref_escaped)
|
||||
else
|
||||
@project.default_branch
|
||||
@project.default_branch || 'master'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -150,6 +150,10 @@ module ProjectsHelper
|
|||
).html_safe
|
||||
end
|
||||
|
||||
def link_to_autodeploy_doc
|
||||
link_to 'About auto deploy', help_page_path('ci/autodeploy/index'), target: '_blank'
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def repo_children_classes(field)
|
||||
|
@ -268,6 +272,18 @@ module ProjectsHelper
|
|||
)
|
||||
end
|
||||
|
||||
def url_to_autodeploy_setup(project, branch_name)
|
||||
namespace_project_new_blob_path(
|
||||
project.namespace,
|
||||
project,
|
||||
branch_name,
|
||||
file_name: '.gitlab-ci.yml',
|
||||
commit_message: 'Set up auto deploy',
|
||||
target_branch: branch_name,
|
||||
context: 'autodeploy'
|
||||
)
|
||||
end
|
||||
|
||||
def add_koding_stack_path(project)
|
||||
namespace_project_new_blob_path(
|
||||
project.namespace,
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
class CreateBranchService < BaseService
|
||||
def execute(branch_name, ref)
|
||||
create_master_branch if project.empty_repo?
|
||||
|
||||
result = ValidateNewBranchService.new(project, current_user)
|
||||
.execute(branch_name)
|
||||
|
||||
|
@ -19,4 +21,16 @@ class CreateBranchService < BaseService
|
|||
def success(branch)
|
||||
super().merge(branch: branch)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def create_master_branch
|
||||
project.repository.commit_file(
|
||||
current_user,
|
||||
'/README.md',
|
||||
'',
|
||||
message: 'Add README.md',
|
||||
branch_name: 'master',
|
||||
update: false)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -68,7 +68,7 @@ describe Projects::BranchesController do
|
|||
|
||||
describe "created from the new branch button on issues" do
|
||||
let(:branch) { "1-feature-branch" }
|
||||
let!(:issue) { create(:issue, project: project) }
|
||||
let(:issue) { create(:issue, project: project) }
|
||||
|
||||
before do
|
||||
sign_in(user)
|
||||
|
@ -95,6 +95,49 @@ describe Projects::BranchesController do
|
|||
issue_iid: issue.iid
|
||||
end
|
||||
|
||||
context 'repository-less project' do
|
||||
let(:project) { create :empty_project }
|
||||
|
||||
it 'redirects to newly created branch' do
|
||||
result = { status: :success, branch: double(name: branch) }
|
||||
|
||||
expect_any_instance_of(CreateBranchService).to receive(:execute).and_return(result)
|
||||
expect(SystemNoteService).to receive(:new_issue_branch).and_return(true)
|
||||
|
||||
post :create,
|
||||
namespace_id: project.namespace.to_param,
|
||||
project_id: project.to_param,
|
||||
branch_name: branch,
|
||||
issue_iid: issue.iid
|
||||
|
||||
expect(response).to redirect_to namespace_project_tree_path(project.namespace, project, branch)
|
||||
end
|
||||
|
||||
it 'redirects to autodeploy setup page' do
|
||||
result = { status: :success, branch: double(name: branch) }
|
||||
|
||||
project.create_kubernetes_service(
|
||||
active: true,
|
||||
properties: {
|
||||
namespace: project.path,
|
||||
api_url: 'https://kubernetes.example.com',
|
||||
token: 'a' * 40,
|
||||
}
|
||||
)
|
||||
|
||||
expect_any_instance_of(CreateBranchService).to receive(:execute).and_return(result)
|
||||
expect(SystemNoteService).to receive(:new_issue_branch).and_return(true)
|
||||
|
||||
post :create,
|
||||
namespace_id: project.namespace.to_param,
|
||||
project_id: project.to_param,
|
||||
branch_name: branch,
|
||||
issue_iid: issue.iid
|
||||
|
||||
expect(response.location).to include(namespace_project_new_blob_path(project.namespace, project, branch))
|
||||
end
|
||||
end
|
||||
|
||||
context 'without issue feature access' do
|
||||
before do
|
||||
project.update!(visibility_level: Gitlab::VisibilityLevel::PUBLIC)
|
||||
|
|
Loading…
Reference in a new issue