forked from Lainports/opnsense-ports
189 lines
7.2 KiB
Text
189 lines
7.2 KiB
Text
--- 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
|