Fix remote mirrors not updating after tag push
Remote mirrors were only being updated after pushes to branches, not tags. This change consolidates the functionality into Git::BaseHooksService so that both tags and branches will now update remote mirrors. Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/51240
This commit is contained in:
parent
04794fb476
commit
6c6e4ca495
7 changed files with 116 additions and 67 deletions
|
@ -17,6 +17,8 @@ module Git
|
|||
# Not a hook, but it needs access to the list of changed commits
|
||||
enqueue_invalidate_cache
|
||||
|
||||
update_remote_mirrors
|
||||
|
||||
push_data
|
||||
end
|
||||
|
||||
|
@ -92,5 +94,12 @@ module Git
|
|||
def pipeline_options
|
||||
{}
|
||||
end
|
||||
|
||||
def update_remote_mirrors
|
||||
return unless project.has_remote_mirror?
|
||||
|
||||
project.mark_stuck_remote_mirrors_as_failed!
|
||||
project.update_remote_mirrors
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -27,7 +27,6 @@ module Git
|
|||
execute_related_hooks
|
||||
perform_housekeeping
|
||||
|
||||
update_remote_mirrors
|
||||
stop_environments
|
||||
|
||||
true
|
||||
|
|
5
changelogs/unreleased/sh-fix-tag-push-remote-mirror.yml
Normal file
5
changelogs/unreleased/sh-fix-tag-push-remote-mirror.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix remote mirrors not updating after tag push
|
||||
merge_request:
|
||||
author:
|
||||
type: fixed
|
90
spec/services/git/base_hooks_service_spec.rb
Normal file
90
spec/services/git/base_hooks_service_spec.rb
Normal file
|
@ -0,0 +1,90 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe Git::BaseHooksService do
|
||||
include RepoHelpers
|
||||
include GitHelpers
|
||||
|
||||
let(:user) { create(:user) }
|
||||
let(:project) { create(:project, :repository) }
|
||||
let(:service) { described_class.new(project, user, oldrev: oldrev, newrev: newrev, ref: ref) }
|
||||
|
||||
let(:oldrev) { Gitlab::Git::BLANK_SHA }
|
||||
let(:newrev) { "8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b" } # gitlab-test: git rev-parse refs/tags/v1.1.0
|
||||
let(:ref) { 'refs/tags/v1.1.0' }
|
||||
|
||||
describe 'with remote mirrors' do
|
||||
class TestService < described_class
|
||||
def commits
|
||||
[]
|
||||
end
|
||||
end
|
||||
|
||||
let(:project) { create(:project, :repository, :remote_mirror) }
|
||||
|
||||
subject { TestService.new(project, user, oldrev: oldrev, newrev: newrev, ref: ref) }
|
||||
|
||||
before do
|
||||
expect(subject).to receive(:execute_project_hooks)
|
||||
end
|
||||
|
||||
context 'when remote mirror feature is enabled' do
|
||||
it 'fails stuck remote mirrors' do
|
||||
allow(project).to receive(:update_remote_mirrors).and_return(project.remote_mirrors)
|
||||
expect(project).to receive(:mark_stuck_remote_mirrors_as_failed!)
|
||||
|
||||
subject.execute
|
||||
end
|
||||
|
||||
it 'updates remote mirrors' do
|
||||
expect(project).to receive(:update_remote_mirrors)
|
||||
|
||||
subject.execute
|
||||
end
|
||||
end
|
||||
|
||||
context 'when remote mirror feature is disabled' do
|
||||
before do
|
||||
stub_application_setting(mirror_available: false)
|
||||
end
|
||||
|
||||
context 'with remote mirrors global setting overridden' do
|
||||
before do
|
||||
project.remote_mirror_available_overridden = true
|
||||
end
|
||||
|
||||
it 'fails stuck remote mirrors' do
|
||||
allow(project).to receive(:update_remote_mirrors).and_return(project.remote_mirrors)
|
||||
expect(project).to receive(:mark_stuck_remote_mirrors_as_failed!)
|
||||
|
||||
subject.execute
|
||||
end
|
||||
|
||||
it 'updates remote mirrors' do
|
||||
expect(project).to receive(:update_remote_mirrors)
|
||||
|
||||
subject.execute
|
||||
end
|
||||
end
|
||||
|
||||
context 'without remote mirrors global setting overridden' do
|
||||
before do
|
||||
project.remote_mirror_available_overridden = false
|
||||
end
|
||||
|
||||
it 'does not fails stuck remote mirrors' do
|
||||
expect(project).not_to receive(:mark_stuck_remote_mirrors_as_failed!)
|
||||
|
||||
subject.execute
|
||||
end
|
||||
|
||||
it 'does not updates remote mirrors' do
|
||||
expect(project).not_to receive(:update_remote_mirrors)
|
||||
|
||||
subject.execute
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -18,6 +18,12 @@ describe Git::BranchHooksService do
|
|||
described_class.new(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
|
||||
end
|
||||
|
||||
it 'update remote mirrors' do
|
||||
expect(service).to receive(:update_remote_mirrors).and_call_original
|
||||
|
||||
service.execute
|
||||
end
|
||||
|
||||
describe "Git Push Data" do
|
||||
subject(:push_data) { service.execute }
|
||||
|
||||
|
|
|
@ -17,72 +17,6 @@ describe Git::BranchPushService, services: true do
|
|||
project.add_maintainer(user)
|
||||
end
|
||||
|
||||
describe 'with remote mirrors' do
|
||||
let(:project) { create(:project, :repository, :remote_mirror) }
|
||||
|
||||
subject do
|
||||
described_class.new(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
|
||||
end
|
||||
|
||||
context 'when remote mirror feature is enabled' do
|
||||
it 'fails stuck remote mirrors' do
|
||||
allow(project).to receive(:update_remote_mirrors).and_return(project.remote_mirrors)
|
||||
expect(project).to receive(:mark_stuck_remote_mirrors_as_failed!)
|
||||
|
||||
subject.execute
|
||||
end
|
||||
|
||||
it 'updates remote mirrors' do
|
||||
expect(project).to receive(:update_remote_mirrors)
|
||||
|
||||
subject.execute
|
||||
end
|
||||
end
|
||||
|
||||
context 'when remote mirror feature is disabled' do
|
||||
before do
|
||||
stub_application_setting(mirror_available: false)
|
||||
end
|
||||
|
||||
context 'with remote mirrors global setting overridden' do
|
||||
before do
|
||||
project.remote_mirror_available_overridden = true
|
||||
end
|
||||
|
||||
it 'fails stuck remote mirrors' do
|
||||
allow(project).to receive(:update_remote_mirrors).and_return(project.remote_mirrors)
|
||||
expect(project).to receive(:mark_stuck_remote_mirrors_as_failed!)
|
||||
|
||||
subject.execute
|
||||
end
|
||||
|
||||
it 'updates remote mirrors' do
|
||||
expect(project).to receive(:update_remote_mirrors)
|
||||
|
||||
subject.execute
|
||||
end
|
||||
end
|
||||
|
||||
context 'without remote mirrors global setting overridden' do
|
||||
before do
|
||||
project.remote_mirror_available_overridden = false
|
||||
end
|
||||
|
||||
it 'does not fails stuck remote mirrors' do
|
||||
expect(project).not_to receive(:mark_stuck_remote_mirrors_as_failed!)
|
||||
|
||||
subject.execute
|
||||
end
|
||||
|
||||
it 'does not updates remote mirrors' do
|
||||
expect(project).not_to receive(:update_remote_mirrors)
|
||||
|
||||
subject.execute
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'Push branches' do
|
||||
subject do
|
||||
execute_service(project, user, oldrev, newrev, ref)
|
||||
|
|
|
@ -18,6 +18,12 @@ describe Git::TagHooksService, :service do
|
|||
described_class.new(project, user, oldrev: oldrev, newrev: newrev, ref: ref)
|
||||
end
|
||||
|
||||
it 'update remote mirrors' do
|
||||
expect(service).to receive(:update_remote_mirrors).and_call_original
|
||||
|
||||
service.execute
|
||||
end
|
||||
|
||||
describe 'System hooks' do
|
||||
it 'Executes system hooks' do
|
||||
push_data = service.execute
|
||||
|
|
Loading…
Reference in a new issue