Skip to content
Snippets Groups Projects
Commit cad63649 authored by James Lopez's avatar James Lopez
Browse files

fix remote mirror issue to do with missing project and updated specs

parent 963ef398
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -39,9 +39,15 @@ class RemoteMirror < ActiveRecord::Base
transition failed: :started
end
 
state :started
state :started do
validates_presence_of :project
end
state :finished
state :failed
state :failed do
validates_presence_of :project
end
 
after_transition any => :started, do: :schedule_update_job
 
Loading
Loading
@@ -80,8 +86,9 @@ class RemoteMirror < ActiveRecord::Base
end
 
def mark_as_failed(error_message)
update_fail
update_column(:last_error, Gitlab::UrlSanitizer.sanitize(error_message))
error_message = errors.full_messages.first unless update_fail
update_columns(last_error: Gitlab::UrlSanitizer.sanitize(error_message), update_status: 'failed')
end
 
def url=(value)
Loading
Loading
@@ -109,7 +116,7 @@ class RemoteMirror < ActiveRecord::Base
private
 
def url_availability
if project.import_url == url && project.mirror?
if project && project.import_url == url && project.mirror?
errors.add(:url, 'is already in use')
end
end
Loading
Loading
Loading
Loading
@@ -10,6 +10,9 @@ class RepositoryUpdateRemoteMirrorWorker
begin
remote_mirror = RemoteMirror.find(remote_mirror_id)
project = remote_mirror.project
return unless project
current_user = project.creator
result = Projects::UpdateRemoteMirrorService.new(project, current_user).execute(remote_mirror)
 
Loading
Loading
@@ -18,10 +21,10 @@ class RepositoryUpdateRemoteMirrorWorker
else
remote_mirror.update_finish
end
# rescue => ex
# remote_mirror.mark_as_failed("We're sorry, a temporary error occurred, please try again.")
rescue => ex
remote_mirror.mark_as_failed("We're sorry, a temporary error occurred, please try again.")
 
# raise UpdateRemoteMirrorError, "#{ex.class}: #{Gitlab::UrlSanitizer.sanitize(ex.message)}"
raise UpdateRemoteMirrorError, "#{ex.class}: #{Gitlab::UrlSanitizer.sanitize(ex.message)}"
end
end
end
Loading
Loading
@@ -85,13 +85,20 @@ describe RemoteMirror do
end
 
context 'with missing project' do
it 'can be marked as failed' do
mirror = create(:remote_mirror)
mirror.update!(enabled: true, project_id: nil)
let(:mirror) { create(:remote_mirror, update_status: 'started') }
before do
mirror.update_columns(enabled: true, project_id: nil)
 
mirror.reload.mark_as_failed('missing project')
end
it 'sets the last error' do
expect(mirror.reload.last_error).to include("Project can't be blank")
end
 
expect(mirror.reload.last_error).to eq 'missing project'
it 'is marked as failed' do
expect(mirror.reload.update_status).to eq('failed')
end
end
 
Loading
Loading
Loading
Loading
@@ -10,15 +10,15 @@ describe UpdateAllRemoteMirrorsWorker do
it 'are transitioned to failure state' do
worker.perform
 
expect(mirror.reload.update_status).to eq 'failed'
expect(mirror.reload.update_status).to eq('failed')
end
 
it 'handles enabled mirrors with missing project' do
mirror.update!(project: nil, enabled: true)
mirror.update_attributes(project_id: nil, enabled: true)
 
worker.perform
 
expect(mirror.reload.update_status).to eq 'failed'
expect(mirror.reload.update_status).to eq('failed')
end
end
end
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment