Commit c63af942 authored by Sean McGivern's avatar Sean McGivern

Merge branch '42223-squashing-mrs-takes-too-long' into 'master'

Fix an issue where sparse checkout wasn't configured correctly

See merge request gitlab-org/gitlab-ce!16864
parents 8891fbd0 658749dd
...@@ -1519,7 +1519,7 @@ module Gitlab ...@@ -1519,7 +1519,7 @@ module Gitlab
if sparse_checkout_files if sparse_checkout_files
# Create worktree without checking out # Create worktree without checking out
run_git!(base_args + ['--no-checkout', worktree_path], env: env) run_git!(base_args + ['--no-checkout', worktree_path], env: env)
worktree_git_path = run_git!(%w(rev-parse --git-dir), chdir: worktree_path) worktree_git_path = run_git!(%w(rev-parse --git-dir), chdir: worktree_path).chomp
configure_sparse_checkout(worktree_git_path, sparse_checkout_files) configure_sparse_checkout(worktree_git_path, sparse_checkout_files)
......
...@@ -20,6 +20,7 @@ describe Gitlab::Git::Repository, seed_helper: true do ...@@ -20,6 +20,7 @@ describe Gitlab::Git::Repository, seed_helper: true do
let(:repository) { Gitlab::Git::Repository.new('default', TEST_REPO_PATH, '') } let(:repository) { Gitlab::Git::Repository.new('default', TEST_REPO_PATH, '') }
let(:storage_path) { TestEnv.repos_path } let(:storage_path) { TestEnv.repos_path }
let(:user) { build(:user) }
describe '.create_hooks' do describe '.create_hooks' do
let(:repo_path) { File.join(storage_path, 'hook-test.git') } let(:repo_path) { File.join(storage_path, 'hook-test.git') }
...@@ -693,7 +694,6 @@ describe Gitlab::Git::Repository, seed_helper: true do ...@@ -693,7 +694,6 @@ describe Gitlab::Git::Repository, seed_helper: true do
describe '#remote_tags' do describe '#remote_tags' do
let(:remote_name) { 'upstream' } let(:remote_name) { 'upstream' }
let(:target_commit_id) { SeedRepo::Commit::ID } let(:target_commit_id) { SeedRepo::Commit::ID }
let(:user) { create(:user) }
let(:tag_name) { 'v0.0.1' } let(:tag_name) { 'v0.0.1' }
let(:tag_message) { 'My tag' } let(:tag_message) { 'My tag' }
let(:remote_repository) do let(:remote_repository) do
...@@ -1711,7 +1711,6 @@ describe Gitlab::Git::Repository, seed_helper: true do ...@@ -1711,7 +1711,6 @@ describe Gitlab::Git::Repository, seed_helper: true do
shared_examples "user deleting a branch" do shared_examples "user deleting a branch" do
let(:project) { create(:project, :repository) } let(:project) { create(:project, :repository) }
let(:repository) { project.repository.raw } let(:repository) { project.repository.raw }
let(:user) { create(:user) }
let(:branch_name) { "to-be-deleted-soon" } let(:branch_name) { "to-be-deleted-soon" }
before do before do
...@@ -1795,7 +1794,6 @@ describe Gitlab::Git::Repository, seed_helper: true do ...@@ -1795,7 +1794,6 @@ describe Gitlab::Git::Repository, seed_helper: true do
Gitlab::Git::Repository.new('default', TEST_MUTABLE_REPO_PATH, '') Gitlab::Git::Repository.new('default', TEST_MUTABLE_REPO_PATH, '')
end end
let(:source_sha) { '913c66a37b4a45b9769037c55c2d238bd0942d2e' } let(:source_sha) { '913c66a37b4a45b9769037c55c2d238bd0942d2e' }
let(:user) { build(:user) }
let(:target_branch) { 'test-merge-target-branch' } let(:target_branch) { 'test-merge-target-branch' }
before do before do
...@@ -1848,7 +1846,6 @@ describe Gitlab::Git::Repository, seed_helper: true do ...@@ -1848,7 +1846,6 @@ describe Gitlab::Git::Repository, seed_helper: true do
end end
let(:branch_head) { '6d394385cf567f80a8fd85055db1ab4c5295806f' } let(:branch_head) { '6d394385cf567f80a8fd85055db1ab4c5295806f' }
let(:source_sha) { 'cfe32cf61b73a0d5e9f13e774abde7ff789b1660' } let(:source_sha) { 'cfe32cf61b73a0d5e9f13e774abde7ff789b1660' }
let(:user) { build(:user) }
let(:target_branch) { 'test-ff-target-branch' } let(:target_branch) { 'test-ff-target-branch' }
before do before do
...@@ -2167,6 +2164,47 @@ describe Gitlab::Git::Repository, seed_helper: true do ...@@ -2167,6 +2164,47 @@ describe Gitlab::Git::Repository, seed_helper: true do
expect { subject }.to raise_error(Gitlab::Git::CommandError, 'error') expect { subject }.to raise_error(Gitlab::Git::CommandError, 'error')
end end
end end
describe '#squash' do
let(:squash_id) { '1' }
let(:branch_name) { 'fix' }
let(:start_sha) { '4b4918a572fa86f9771e5ba40fbd48e1eb03e2c6' }
let(:end_sha) { '12d65c8dd2b2676fa3ac47d955accc085a37a9c1' }
subject do
opts = {
branch: branch_name,
start_sha: start_sha,
end_sha: end_sha,
author: user,
message: 'Squash commit message'
}
repository.squash(user, squash_id, opts)
end
context 'sparse checkout' do
let(:expected_files) { %w(files files/js files/js/application.js) }
before do
allow(repository).to receive(:with_worktree).and_wrap_original do |m, *args|
m.call(*args) do
worktree_path = args[0]
files_pattern = File.join(worktree_path, '**', '*')
expected = expected_files.map do |path|
File.expand_path(path, worktree_path)
end
expect(Dir[files_pattern]).to eq(expected)
end
end
end
it 'checkouts only the files in the diff' do
subject
end
end
end
end end
def create_remote_branch(repository, remote_name, branch_name, source_branch_name) def create_remote_branch(repository, remote_name, branch_name, source_branch_name)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment