diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb index aaa69597d09b4f1467f25547de1dd3dacf9be64a..64761d659607eea064a88377702fc1a7da84ba61 100644 --- a/app/services/projects/create_service.rb +++ b/app/services/projects/create_service.rb @@ -319,7 +319,9 @@ def extra_attributes_for_measurement private def default_branch - @default_branch.presence || @project.default_branch_or_main + return @project.default_branch_or_main if @default_branch.blank? + + Gitlab::Git.ref_name(@default_branch) end def validate_import_source_enabled! diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb index fc996a063dfad7c5b0ed0206c88107b8a43b77a5..07d03234bf7ce03e2d2362761bc7b9e00aa9a7ff 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -134,6 +134,19 @@ end end + context 'when branch name is fully qualified' do + let(:default_branch) { 'refs/heads/full_name' } + + it 'creates project with provided default branch name without refs/heads prefix' do + expect { request }.to change { Project.count }.by(1) + expect(response).to have_gitlab_http_status(:created) + + project = Project.find(json_response['id']) + expect(project.repository_exists?).to be_truthy + expect(project.default_branch).to eq('full_name') + end + end + context 'when initialize with readme is not set' do let(:params) { super().merge(initialize_with_readme: nil) } diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb index c853bc654f200f23c8bd75cca6aba2d8edf0dadf..6e551bd7c827afd3e0242ef4839af9626ab8cb6d 100644 --- a/spec/services/projects/create_service_spec.rb +++ b/spec/services/projects/create_service_spec.rb @@ -875,6 +875,27 @@ def wiki_repo(project) end end end + + context 'when default branch is a fully qualified ref' do + before do + opts[:default_branch] = 'refs/heads/example_branch' + end + + it 'creates the correct branch' do + expect(project.repository.branch_names).to contain_exactly('example_branch') + end + + it_behaves_like 'a repo with a README.md' do + let(:expected_content) do + <<~MARKDOWN + cd existing_repo + git remote add origin #{project.http_url_to_repo} + git branch -M example_branch + git push -uf origin example_branch + MARKDOWN + end + end + end end context 'when SAST initialization is requested' do