diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION index 3cc5d640565cb2b6d5b53681427908f035863984..268778047be1a2ab7b372327c0ad48c5dbd0b189 100644 --- a/GITALY_SERVER_VERSION +++ b/GITALY_SERVER_VERSION @@ -1 +1 @@ -91b69d050acf344c09a9238f24a75c4938001113 +3b00b12130fcaf0a6d52cdad2676520e14d2dd51 diff --git a/app/models/repository.rb b/app/models/repository.rb index e942157993b8dc1d16fbb9cdef4fb73d60fc6121..ebc470cd8c825e559a78b8a243bf5fddc56da605 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -552,6 +552,8 @@ def blobs_at(items, blob_size_limit: Gitlab::Git::Blob::MAX_DATA_DISPLAY_SIZE) end def root_ref + return if empty? + raw_repository&.root_ref end cache_method_asymmetrically :root_ref diff --git a/app/models/snippet.rb b/app/models/snippet.rb index 181130d45bdae96d09d95c92694a11ad9219aaab..2b94a12f55c14dbbafb9c38b14cc81dfa78e182c 100644 --- a/app/models/snippet.rb +++ b/app/models/snippet.rb @@ -334,7 +334,7 @@ def repository_storage def create_repository return if repository_exists? && snippet_repository - repository.create_if_not_exists(default_branch) + repository.create_if_not_exists(default_branch_from_preferences) track_snippet_repository(repository.storage) end diff --git a/app/models/wiki.rb b/app/models/wiki.rb index 39d22ea0e0759421a509579e23007b00111902f9..f67d955703c0f061021a43b903d7949623be6719 100644 --- a/app/models/wiki.rb +++ b/app/models/wiki.rb @@ -170,7 +170,7 @@ def path end def create_wiki_repository - repository.create_if_not_exists(default_branch) + repository.create_if_not_exists(default_branch_from_preferences) raise CouldNotCreateWikiError unless repository_exists? rescue StandardError => e diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb index 80d0fd17568fb4916c7f1b68a5db9c546a449293..9e6a1ba4c200a8dc5fff8d05843031a38bcac3af 100644 --- a/lib/gitlab/git/repository.rb +++ b/lib/gitlab/git/repository.rb @@ -92,6 +92,8 @@ def path # Default branch in the repository def root_ref + return if empty? # TODO: Is this a good idea? + gitaly_ref_client.default_branch_name rescue GRPC::NotFound => e raise NoRepository, e.message @@ -104,6 +106,8 @@ def exists? end def create_repository(default_branch = nil) + default_branch ||= Gitlab::DefaultBranch.value(object: self) + wrapped_gitaly_errors do gitaly_repository_client.create_repository(default_branch) rescue GRPC::AlreadyExists => e diff --git a/spec/factories/projects.rb b/spec/factories/projects.rb index 856f0f6cd055bb17a57720c19b4405959ec47ae4..55bd00648ad3edd3c2c3eda1044f3684c5becf78 100644 --- a/spec/factories/projects.rb +++ b/spec/factories/projects.rb @@ -231,7 +231,7 @@ end after :create do |project, evaluator| - raise "Failed to create repository!" unless project.repository.exists? || project.create_repository + raise "Failed to create repository!" unless project.repository.exists? || project.create_repository(default_branch: 'master') evaluator.files.each do |filename, content| project.repository.create_file( @@ -239,23 +239,17 @@ filename, content, message: "Automatically created file #{filename}", - branch_name: project.default_branch || 'master' + branch_name: 'master' ) end end end - # A basic repository with a single file 'test.txt'. It also has the HEAD as the default branch. + # A basic repository with a single file 'test.txt' in the default branch master trait :small_repo do custom_repo files { { 'test.txt' => 'test' } } - - after(:create) do |project| - Sidekiq::Worker.skipping_transaction_check do - raise "Failed to assign the repository head!" unless project.change_head(project.default_branch_or_main) - end - end end # Test repository - https://gitlab.com/gitlab-org/gitlab-test @@ -340,7 +334,7 @@ trait :empty_repo do after(:create) do |project| - raise "Failed to create repository!" unless project.create_repository + raise "Failed to create repository!" unless project.create_repository(default_branch: 'master') end end diff --git a/spec/features/projects/branches_spec.rb b/spec/features/projects/branches_spec.rb index e1f1a63565c1d9eafd97cac5eaa54788b8e3f3b6..b8598035b6c82b150b5f118254c5e322552e8011 100644 --- a/spec/features/projects/branches_spec.rb +++ b/spec/features/projects/branches_spec.rb @@ -275,11 +275,11 @@ let_it_be(:project) { create(:project, :public, :empty_repo) } before do - sha = create_file(branch_name: "branch") + sha = create_file(branch_name: "master") create(:ci_pipeline, project: project, user: user, - ref: "branch", + ref: "master", sha: sha, status: :success, created_at: 5.months.ago) diff --git a/spec/features/projects/ci/editor_spec.rb b/spec/features/projects/ci/editor_spec.rb index 20c1ef1b21f45c21038e27bf6510957a42a9e65b..7cfe00792da9bbfad122d4df9c35fdab7924bb57 100644 --- a/spec/features/projects/ci/editor_spec.rb +++ b/spec/features/projects/ci/editor_spec.rb @@ -8,7 +8,7 @@ let(:project) { create(:project_empty_repo, :public) } let(:user) { create(:user) } - let(:default_branch) { 'main' } + let(:default_branch) { 'master' } let(:other_branch) { 'test' } before do diff --git a/spec/lib/gitlab/background_migration/backfill_snippet_repositories_spec.rb b/spec/lib/gitlab/background_migration/backfill_snippet_repositories_spec.rb index 4a50d08b2aad5d04f40400343a4861a04f0ac375..b51c046e0f6115bc03fdfb4237282b5441e9fb7f 100644 --- a/spec/lib/gitlab/background_migration/backfill_snippet_repositories_spec.rb +++ b/spec/lib/gitlab/background_migration/backfill_snippet_repositories_spec.rb @@ -49,7 +49,7 @@ allow(snippet_with_repo).to receive(:disk_path).and_return(disk_path(snippet_with_repo)) raw_repository(snippet_with_repo).create_from_bundle(TestEnv.factory_repo_bundle_path) - raw_repository(snippet_with_empty_repo).create_repository + raw_repository(snippet_with_empty_repo).create_repository('main') end after do diff --git a/spec/lib/gitlab/git/repository_spec.rb b/spec/lib/gitlab/git/repository_spec.rb index 06904849ef51d2cef91623abbd01d411c7698312..4b5fe9f14521591813fbf602c24d5733f21a1d6d 100644 --- a/spec/lib/gitlab/git/repository_spec.rb +++ b/spec/lib/gitlab/git/repository_spec.rb @@ -54,6 +54,20 @@ it_behaves_like 'wrapping gRPC errors', Gitlab::GitalyClient::RepositoryService, :create_repository do subject { repository.create_repository } end + + it 'uses the system default branch' do + allow(repository.gitaly_repository_client) + .to receive(:create_repository).with('master') + + repository.create_repository + end + + it 'uses the passed default branch' do + allow(repository.gitaly_repository_client) + .to receive(:create_repository).with('pineapple') + + repository.create_repository('pineapple') + end end describe '#branch_names' do diff --git a/spec/models/snippet_spec.rb b/spec/models/snippet_spec.rb index 6a5456fce3fd9371c097b6427293add758505b84..6315f3e51cfeb5168629fcbb2fe07b2843e02431 100644 --- a/spec/models/snippet_spec.rb +++ b/spec/models/snippet_spec.rb @@ -709,7 +709,7 @@ def to_json(params = {}) end it 'sets the default branch' do - expect(snippet).to receive(:default_branch).and_return('default-branch-1') + expect(snippet).to receive(:default_branch_from_preferences).and_return('default-branch-1') expect(subject).to be_truthy snippet.repository.create_file(snippet.author, 'file', 'content', message: 'initial commit', branch_name: 'default-branch-1') @@ -728,7 +728,7 @@ def to_json(params = {}) expect(snippet).to receive(:repository_storage).and_return('picked') expect(snippet).to receive(:repository_exists?).and_return(false) expect(snippet.repository).to receive(:create_if_not_exists) - allow(snippet).to receive(:default_branch).and_return('picked') + allow(snippet).to receive(:default_branch_from_preferences).and_return('picked') subject