Merge branch 'port-post-receive-changes' into 'master'
Refactor PostReceive worker to limit merge conflicts See merge request !11916
This commit is contained in:
commit
c28ba5aa72
|
@ -17,34 +17,18 @@ class PostReceive
|
|||
post_received = Gitlab::GitPostReceive.new(project, identifier, changes)
|
||||
|
||||
if is_wiki
|
||||
# Nothing defined here yet.
|
||||
process_wiki_changes(post_received)
|
||||
else
|
||||
process_project_changes(post_received)
|
||||
process_repository_update(post_received)
|
||||
end
|
||||
end
|
||||
|
||||
def process_repository_update(post_received)
|
||||
private
|
||||
|
||||
def process_project_changes(post_received)
|
||||
changes = []
|
||||
refs = Set.new
|
||||
|
||||
post_received.changes_refs do |oldrev, newrev, ref|
|
||||
@user ||= post_received.identify(newrev)
|
||||
|
||||
unless @user
|
||||
log("Triggered hook for non-existing user \"#{post_received.identifier}\"")
|
||||
return false
|
||||
end
|
||||
|
||||
changes << Gitlab::DataBuilder::Repository.single_change(oldrev, newrev, ref)
|
||||
refs << ref
|
||||
end
|
||||
|
||||
hook_data = Gitlab::DataBuilder::Repository.update(post_received.project, @user, changes, refs.to_a)
|
||||
SystemHooksService.new.execute_hooks(hook_data, :repository_update_hooks)
|
||||
end
|
||||
|
||||
def process_project_changes(post_received)
|
||||
post_received.changes_refs do |oldrev, newrev, ref|
|
||||
@user ||= post_received.identify(newrev)
|
||||
|
||||
|
@ -58,10 +42,22 @@ class PostReceive
|
|||
elsif Gitlab::Git.branch_ref?(ref)
|
||||
GitPushService.new(post_received.project, @user, oldrev: oldrev, newrev: newrev, ref: ref).execute
|
||||
end
|
||||
|
||||
changes << Gitlab::DataBuilder::Repository.single_change(oldrev, newrev, ref)
|
||||
refs << ref
|
||||
end
|
||||
|
||||
after_project_changes_hooks(post_received, @user, refs.to_a, changes)
|
||||
end
|
||||
|
||||
private
|
||||
def after_project_changes_hooks(post_received, user, refs, changes)
|
||||
hook_data = Gitlab::DataBuilder::Repository.update(post_received.project, user, changes, refs)
|
||||
SystemHooksService.new.execute_hooks(hook_data, :repository_update_hooks)
|
||||
end
|
||||
|
||||
def process_wiki_changes(post_received)
|
||||
# Nothing defined here yet.
|
||||
end
|
||||
|
||||
# To maintain backwards compatibility, we accept both gl_repository or
|
||||
# repository paths as project identifiers. Our plan is to migrate to
|
||||
|
|
|
@ -94,26 +94,23 @@ describe PostReceive do
|
|||
it { expect{ subject }.not_to change{ Ci::Pipeline.count } }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#process_repository_update' do
|
||||
let(:changes) {'123456 789012 refs/heads/tést'}
|
||||
let(:fake_hook_data) do
|
||||
{ event_name: 'repository_update' }
|
||||
end
|
||||
context 'after project changes hooks' do
|
||||
let(:changes) { '123456 789012 refs/heads/tést' }
|
||||
let(:fake_hook_data) { Hash.new(event_name: 'repository_update') }
|
||||
|
||||
before do
|
||||
allow_any_instance_of(Gitlab::GitPostReceive).to receive(:identify).and_return(project.owner)
|
||||
allow_any_instance_of(Gitlab::DataBuilder::Repository).to receive(:update).and_return(fake_hook_data)
|
||||
# silence hooks so we can isolate
|
||||
allow_any_instance_of(Key).to receive(:post_create_hook).and_return(true)
|
||||
allow(subject).to receive(:process_project_changes).and_return(true)
|
||||
end
|
||||
before do
|
||||
allow_any_instance_of(Gitlab::DataBuilder::Repository).to receive(:update).and_return(fake_hook_data)
|
||||
# silence hooks so we can isolate
|
||||
allow_any_instance_of(Key).to receive(:post_create_hook).and_return(true)
|
||||
allow_any_instance_of(GitPushService).to receive(:execute).and_return(true)
|
||||
end
|
||||
|
||||
it 'calls SystemHooksService' do
|
||||
expect_any_instance_of(SystemHooksService).to receive(:execute_hooks).with(fake_hook_data, :repository_update_hooks).and_return(true)
|
||||
it 'calls SystemHooksService' do
|
||||
expect_any_instance_of(SystemHooksService).to receive(:execute_hooks).with(fake_hook_data, :repository_update_hooks).and_return(true)
|
||||
|
||||
subject.perform(pwd(project), key_id, base64_changes)
|
||||
described_class.new.perform(project_identifier, key_id, base64_changes)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue