Skip to content

Commit

Permalink
Fix ProcessCommitWorker when upstream project is deleted
Browse files Browse the repository at this point in the history
  • Loading branch information
smcgivern committed Jul 10, 2018
1 parent 49d7f92 commit 5b0210a
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 8 deletions.
5 changes: 3 additions & 2 deletions app/workers/process_commit_worker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,10 @@ def build_commit(project, hash)
# Avoid reprocessing commits that already exist in the upstream
# when project is forked. This will also prevent duplicated system notes.
def commit_exists_in_upstream?(project, commit_hash)
return false unless project.forked?
upstream_project = project.fork_source

return false unless upstream_project

upstream_project = project.forked_from_project
commit_id = commit_hash.with_indifferent_access[:id]
upstream_project.commit(commit_id).present?
end
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
title: Process commits as normal in forks when the upstream project is deleted
merge_request: 20534
author:
type: fixed
40 changes: 34 additions & 6 deletions spec/workers/process_commit_worker_spec.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
require 'spec_helper'

describe ProcessCommitWorker do
include ProjectForksHelper

let(:worker) { described_class.new }
let(:user) { create(:user) }
let(:project) { create(:project, :public, :repository) }
Expand Down Expand Up @@ -32,15 +34,41 @@
worker.perform(project.id, user.id, commit.to_hash)
end

context 'when commit already exists in upstream project' do
let(:forked) { create(:project, :public, :repository) }
context 'when the project is forked' do
context 'when commit already exists in the upstream project' do
it 'does not process the commit message' do
forked = fork_project(project, user, repository: true)

expect(worker).not_to receive(:process_commit_message)

worker.perform(forked.id, user.id, forked.commit.to_hash)
end
end

context 'when the commit does not exist in the upstream project' do
it 'processes the commit message' do
empty_project = create(:project, :public)
forked = fork_project(empty_project, user, repository: true)

TestEnv.copy_repo(forked,
bare_repo: TestEnv.factory_repo_path_bare,
refs: TestEnv::BRANCH_SHA)

expect(worker).to receive(:process_commit_message)

worker.perform(forked.id, user.id, forked.commit.to_hash)
end
end

it 'does not process commit message' do
create(:forked_project_link, forked_to_project: forked, forked_from_project: project)
context 'when the upstream project no longer exists' do
it 'processes the commit message' do
forked = fork_project(project, user, repository: true)
project.destroy!

expect(worker).not_to receive(:process_commit_message)
expect(worker).to receive(:process_commit_message)

worker.perform(forked.id, user.id, forked.commit.to_hash)
worker.perform(forked.id, user.id, forked.commit.to_hash)
end
end
end
end
Expand Down

0 comments on commit 5b0210a

Please sign in to comment.