diff options
Diffstat (limited to 'www/gitlab/files/patch-6130')
-rw-r--r-- | www/gitlab/files/patch-6130 | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/www/gitlab/files/patch-6130 b/www/gitlab/files/patch-6130 new file mode 100644 index 000000000000..64c1d91d7782 --- /dev/null +++ b/www/gitlab/files/patch-6130 @@ -0,0 +1,189 @@ +--- app/models/repository.rb.orig 2017-01-31 15:55:26 UTC ++++ app/models/repository.rb +@@ -176,7 +176,7 @@ class Repository + before_remove_branch + + branch = find_branch(branch_name) +- oldrev = branch.try(:target).try(:id) ++ oldrev = branch.try(:dereferenced_target).try(:id) + newrev = Gitlab::Git::BLANK_SHA + ref = Gitlab::Git::BRANCH_REF_PREFIX + branch_name + +@@ -292,10 +292,10 @@ class Repository + # Rugged seems to throw a `ReferenceError` when given branch_names rather + # than SHA-1 hashes + number_commits_behind = raw_repository. +- count_commits_between(branch.target.sha, root_ref_hash) ++ count_commits_between(branch.dereferenced_target.sha, root_ref_hash) + + number_commits_ahead = raw_repository. +- count_commits_between(root_ref_hash, branch.target.sha) ++ count_commits_between(root_ref_hash, branch.dereferenced_target.sha) + + { behind: number_commits_behind, ahead: number_commits_ahead } + end +@@ -674,11 +674,11 @@ class Repository + branches.sort_by(&:name) + when 'updated_desc' + branches.sort do |a, b| +- commit(b.target).committed_date <=> commit(a.target).committed_date ++ commit(b.dereferenced_target).committed_date <=> commit(a.dereferenced_target).committed_date + end + when 'updated_asc' + branches.sort do |a, b| +- commit(a.target).committed_date <=> commit(b.target).committed_date ++ commit(a.dereferenced_target).committed_date <=> commit(b.dereferenced_target).committed_date + end + else + branches +@@ -884,7 +884,7 @@ class Repository + end + + def revert(user, commit, base_branch, revert_tree_id = nil) +- source_sha = find_branch(base_branch).target.sha ++ source_sha = find_branch(base_branch).dereferenced_target.sha + revert_tree_id ||= check_revert_content(commit, base_branch) + + return false unless revert_tree_id +@@ -901,7 +901,7 @@ class Repository + end + + def cherry_pick(user, commit, base_branch, cherry_pick_tree_id = nil) +- source_sha = find_branch(base_branch).target.sha ++ source_sha = find_branch(base_branch).dereferenced_target.sha + cherry_pick_tree_id ||= check_cherry_pick_content(commit, base_branch) + + return false unless cherry_pick_tree_id +@@ -930,7 +930,7 @@ class Repository + end + + def check_revert_content(commit, base_branch) +- source_sha = find_branch(base_branch).target.sha ++ source_sha = find_branch(base_branch).dereferenced_target.sha + args = [commit.id, source_sha] + args << { mainline: 1 } if commit.merge_commit? + +@@ -944,7 +944,7 @@ class Repository + end + + def check_cherry_pick_content(commit, base_branch) +- source_sha = find_branch(base_branch).target.sha ++ source_sha = find_branch(base_branch).dereferenced_target.sha + args = [commit.id, source_sha] + args << 1 if commit.merge_commit? + +--- lib/gitlab/popen.rb.orig 2016-11-09 05:10:18 UTC ++++ lib/gitlab/popen.rb +@@ -21,9 +21,9 @@ module Gitlab + @cmd_output = "" + @cmd_status = 0 + Open3.popen3(vars, *cmd, options) do |stdin, stdout, stderr, wait_thr| +- # We are not using stdin so we should close it, in case the command we +- # are running waits for input. ++ yield(stdin) if block_given? + stdin.close ++ + @cmd_output << stdout.read + @cmd_output << stderr.read + @cmd_status = wait_thr.value.exitstatus +--- spec/lib/gitlab/popen_spec.rb.orig 2016-11-09 05:10:18 UTC ++++ spec/lib/gitlab/popen_spec.rb +@@ -40,4 +40,13 @@ describe 'Gitlab::Popen', lib: true, no_ + it { expect(@status).to be_zero } + it { expect(@output).to include('spec') } + end ++ ++ context 'use stdin' do ++ before do ++ @output, @status = @klass.new.popen(%w[cat]) { |stdin| stdin.write 'hello' } ++ end ++ ++ it { expect(@status).to be_zero } ++ it { expect(@output).to eq('hello') } ++ end + end +--- spec/models/repository_spec.rb.orig 2016-11-09 05:10:18 UTC ++++ spec/models/repository_spec.rb +@@ -443,31 +443,32 @@ describe Repository, models: true do + + describe '#commit_with_hooks' do + let(:old_rev) { '0b4bc9a49b562e85de7cc9e834518ea6828729b9' } # git rev-parse feature ++ let(:new_rev) { 'a74ae73c1ccde9b974a70e82b901588071dc142a' } # commit whose parent is old_rev + + context 'when pre hooks were successful' do + before do + expect_any_instance_of(GitHooksService).to receive(:execute). +- with(user, repository.path_to_repo, old_rev, sample_commit.id, 'refs/heads/feature'). ++ with(user, repository.path_to_repo, old_rev, new_rev, 'refs/heads/feature'). + and_yield.and_return(true) + end + + it 'runs without errors' do + expect do +- repository.commit_with_hooks(user, 'feature') { sample_commit.id } ++ repository.commit_with_hooks(user, 'feature') { new_rev } + end.not_to raise_error + end + + it 'ensures the autocrlf Git option is set to :input' do + expect(repository).to receive(:update_autocrlf_option) + +- repository.commit_with_hooks(user, 'feature') { sample_commit.id } ++ repository.commit_with_hooks(user, 'feature') { new_rev } + end + + context "when the branch wasn't empty" do + it 'updates the head' do + expect(repository.find_branch('feature').target.id).to eq(old_rev) +- repository.commit_with_hooks(user, 'feature') { sample_commit.id } +- expect(repository.find_branch('feature').target.id).to eq(sample_commit.id) ++ repository.commit_with_hooks(user, 'feature') { new_rev } ++ expect(repository.find_branch('feature').target.id).to eq(new_rev) + end + end + end +@@ -477,7 +478,7 @@ describe Repository, models: true do + allow_any_instance_of(Gitlab::Git::Hook).to receive(:trigger).and_return([false, '']) + + expect do +- repository.commit_with_hooks(user, 'feature') { sample_commit.id } ++ repository.commit_with_hooks(user, 'feature') { new_rev } + end.to raise_error(GitHooksService::PreReceiveError) + end + end +@@ -485,6 +486,7 @@ describe Repository, models: true do + context 'when target branch is different from source branch' do + before do + allow_any_instance_of(Gitlab::Git::Hook).to receive(:trigger).and_return([true, '']) ++ allow(repository).to receive(:update_ref!) + end + + it 'expires branch cache' do +@@ -495,7 +497,7 @@ describe Repository, models: true do + expect(repository).to receive(:expire_has_visible_content_cache) + expect(repository).to receive(:expire_branch_count_cache) + +- repository.commit_with_hooks(user, 'new-feature') { sample_commit.id } ++ repository.commit_with_hooks(user, 'new-feature') { new_rev } + end + end + +@@ -1268,4 +1270,18 @@ describe Repository, models: true do + File.delete(path) + end + end ++ ++ describe '#update_ref!' do ++ it 'can create a ref' do ++ repository.update_ref!('refs/heads/foobar', 'refs/heads/master', Gitlab::Git::BLANK_SHA) ++ ++ expect(repository.find_branch('foobar')).not_to be_nil ++ end ++ ++ it 'raises CommitError when the ref update fails' do ++ expect do ++ repository.update_ref!('refs/heads/master', 'refs/heads/master', Gitlab::Git::BLANK_SHA) ++ end.to raise_error(Repository::CommitError) ++ end ++ end + end |