Commit ac862490 authored by Bob Van Landuyt's avatar Bob Van Landuyt

Don't link LFS-objects multiple times.

If Unlinking a fork would fail somewhere after this, the LFS objects
might still be linked. Which would cause issues when trying to destroy
a project.
parent 7ed3759e
...@@ -5,7 +5,7 @@ module Projects ...@@ -5,7 +5,7 @@ module Projects
if fork_source = @project.fork_source if fork_source = @project.fork_source
fork_source.lfs_objects.find_each do |lfs_object| fork_source.lfs_objects.find_each do |lfs_object|
lfs_object.projects << @project lfs_object.projects << @project unless lfs_object.projects.include?(@project)
end end
refresh_forks_count(fork_source) refresh_forks_count(fork_source)
......
---
title: Don't link LFS objects to a project when unlinking forks when they were already
linked
merge_request: 16006
author:
type: fixed
...@@ -62,6 +62,26 @@ describe Projects::UnlinkForkService do ...@@ -62,6 +62,26 @@ describe Projects::UnlinkForkService do
expect(source.forks_count).to be_zero expect(source.forks_count).to be_zero
end end
context 'when the source has LFS objects' do
let(:lfs_object) { create(:lfs_object) }
before do
lfs_object.projects << project
end
it 'links the fork to the lfs object before unlinking' do
subject.execute
expect(lfs_object.projects).to include(forked_project)
end
it 'does not fail if the lfs objects were already linked' do
lfs_object.projects << forked_project
expect { subject.execute }.not_to raise_error
end
end
context 'when the original project was deleted' do context 'when the original project was deleted' do
it 'does not fail when the original project is deleted' do it 'does not fail when the original project is deleted' do
source = forked_project.forked_from_project source = forked_project.forked_from_project
......
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