Commit a878fc9b authored by Douwe Maan's avatar Douwe Maan

Fix bug causing 'Import in progress' to be shown while a mirror is updating

parent 5626a5fb
...@@ -104,8 +104,7 @@ class ProjectsController < Projects::ApplicationController ...@@ -104,8 +104,7 @@ class ProjectsController < Projects::ApplicationController
end end
def show def show
# If we're importing while we do have a repository, we're simply updating the mirror. if @project.import_in_progress?
if @project.import_in_progress? && !@project.updating_mirror?
redirect_to project_import_path(@project) redirect_to project_import_path(@project)
return return
end end
......
...@@ -120,16 +120,22 @@ module EE ...@@ -120,16 +120,22 @@ module EE
mirror? && !empty_repo? mirror? && !empty_repo?
end end
def scheduled_mirror? override :import_in_progress?
def import_in_progress?
# If we're importing while we do have a repository, we're simply updating the mirror.
super && !mirror_with_content?
end
def mirror_about_to_update?
return false unless mirror_with_content? return false unless mirror_with_content?
return false if mirror_hard_failed? return false if mirror_hard_failed?
return true if import_scheduled? return false if updating_mirror?
self.mirror_data.next_execution_timestamp <= Time.now self.mirror_data.next_execution_timestamp <= Time.now
end end
def updating_mirror? def updating_mirror?
mirror_with_content? && import_started? (import_scheduled? || import_started?) && mirror_with_content?
end end
def mirror_last_update_status def mirror_last_update_status
...@@ -232,7 +238,7 @@ module EE ...@@ -232,7 +238,7 @@ module EE
end end
def force_import_job! def force_import_job!
return if scheduled_mirror? || updating_mirror? return if mirror_about_to_update? || updating_mirror?
mirror_data = self.mirror_data mirror_data = self.mirror_data
......
- if @project.mirror? && can?(current_user, :push_code, @project) - if @project.mirror? && can?(current_user, :push_code, @project)
.append-bottom-default .append-bottom-default
- if @project.scheduled_mirror? - if @project.mirror_about_to_update?
%span.btn.disabled %span.btn.disabled
= icon("refresh spin") = icon("refresh spin")
Update Scheduled&hellip; Update Scheduled&hellip;
......
---
title: Fix bug causing 'Import in progress' to be shown while a mirror is updating
merge_request:
author:
type: fixed
...@@ -349,7 +349,7 @@ describe Project do ...@@ -349,7 +349,7 @@ describe Project do
end end
end end
describe '#scheduled_mirror?' do describe '#mirror_about_to_update?' do
context 'when mirror is expected to run soon' do context 'when mirror is expected to run soon' do
it 'returns true' do it 'returns true' do
timestamp = Time.now timestamp = Time.now
...@@ -357,15 +357,15 @@ describe Project do ...@@ -357,15 +357,15 @@ describe Project do
project.mirror_last_update_at = timestamp - 3.minutes project.mirror_last_update_at = timestamp - 3.minutes
project.mirror_data.next_execution_timestamp = timestamp - 2.minutes project.mirror_data.next_execution_timestamp = timestamp - 2.minutes
expect(project.scheduled_mirror?).to be true expect(project.mirror_about_to_update?).to be true
end end
end end
context 'when mirror was scheduled' do context 'when mirror was scheduled' do
it 'returns true' do it 'returns false' do
project = create(:project, :mirror, :import_scheduled, :repository) project = create(:project, :mirror, :import_scheduled, :repository)
expect(project.scheduled_mirror?).to be true expect(project.mirror_about_to_update?).to be false
end end
end end
...@@ -373,7 +373,68 @@ describe Project do ...@@ -373,7 +373,68 @@ describe Project do
it 'returns false' do it 'returns false' do
project = create(:project, :mirror, :import_hard_failed) project = create(:project, :mirror, :import_hard_failed)
expect(project.scheduled_mirror?).to be false expect(project.mirror_about_to_update?).to be false
end
end
end
describe '#import_in_progress?' do
let(:traits) { [] }
let(:project) { create(:project, *traits, import_url: Project::UNKNOWN_IMPORT_URL) }
shared_examples 'import in progress' do
context 'when project is a mirror' do
before do
traits << :mirror
end
context 'when repository is empty' do
it 'returns true' do
expect(project.import_in_progress?).to be_truthy
end
end
context 'when repository is not empty' do
before do
traits << :repository
end
it 'returns false' do
expect(project.import_in_progress?).to be_falsey
end
end
end
context 'when project is not a mirror' do
it 'returns true' do
expect(project.import_in_progress?).to be_truthy
end
end
end
context 'when import status is scheduled' do
before do
traits << :import_scheduled
end
it_behaves_like 'import in progress'
end
context 'when import status is started' do
before do
traits << :import_started
end
it_behaves_like 'import in progress'
end
context 'when import status is finished' do
before do
traits << :import_finished
end
it 'returns false' do
expect(project.import_in_progress?).to be_falsey
end end
end end
end end
...@@ -395,13 +456,21 @@ describe Project do ...@@ -395,13 +456,21 @@ describe Project do
end end
end end
context 'when mirror is in progress' do context 'when mirror is started' do
it 'returns true' do it 'returns true' do
project = create(:project, :mirror, :import_started, :repository) project = create(:project, :mirror, :import_started, :repository)
expect(project.updating_mirror?).to be true expect(project.updating_mirror?).to be true
end end
end end
context 'when mirror is scheduled' do
it 'returns true' do
project = create(:project, :mirror, :import_scheduled, :repository)
expect(project.updating_mirror?).to be true
end
end
end end
describe '#mirror_last_update_status' do describe '#mirror_last_update_status' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment