aboutsummaryrefslogtreecommitdiff
path: root/www/gitlab/files/patch-6130
diff options
context:
space:
mode:
Diffstat (limited to 'www/gitlab/files/patch-6130')
-rw-r--r--www/gitlab/files/patch-6130189
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