From 9c8075c4b95f090fc6f00c897f6bf097d29ee8bf Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Thu, 29 Jun 2017 23:26:23 -0700 Subject: Make Project#ensure_repository force create a repo In Geo, Project#ensure_repository is used to make sure that a Git repo is available to be fetched on a secondary. If a project were a fork, this directory would never be created. Closes gitlab-org/gitlab-ee#2800 --- app/models/project.rb | 20 ++++++++++---------- changelogs/unreleased/sh-allow-force-repo-create.yml | 4 ++++ spec/models/project_spec.rb | 13 +++++++++++++ 3 files changed, 27 insertions(+), 10 deletions(-) create mode 100644 changelogs/unreleased/sh-allow-force-repo-create.yml diff --git a/app/models/project.rb b/app/models/project.rb index a75c5209955..21f4a18ec4a 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1073,21 +1073,21 @@ class Project < ActiveRecord::Base merge_requests.where(source_project_id: self.id) end - def create_repository + def create_repository(force = false) # Forked import is handled asynchronously - unless forked? - if gitlab_shell.add_repository(repository_storage_path, path_with_namespace) - repository.after_create - true - else - errors.add(:base, 'Failed to create repository via gitlab-shell') - false - end + return if forked? && !force + + if gitlab_shell.add_repository(repository_storage_path, path_with_namespace) + repository.after_create + true + else + errors.add(:base, 'Failed to create repository via gitlab-shell') + false end end def ensure_repository - create_repository unless repository_exists? + create_repository(true) unless repository_exists? end def repository_exists? diff --git a/changelogs/unreleased/sh-allow-force-repo-create.yml b/changelogs/unreleased/sh-allow-force-repo-create.yml new file mode 100644 index 00000000000..2a65ba807bb --- /dev/null +++ b/changelogs/unreleased/sh-allow-force-repo-create.yml @@ -0,0 +1,4 @@ +--- +title: Make Project#ensure_repository force create a repo +merge_request: +author: diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 1390848ff4a..0eeaf68a02a 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -1357,6 +1357,19 @@ describe Project, models: true do project.ensure_repository end + + it 'creates the repository if it is a fork' do + expect(project).to receive(:forked?).and_return(true) + + allow(project).to receive(:repository_exists?) + .and_return(false) + + expect(shell).to receive(:add_repository) + .with(project.repository_storage_path, project.path_with_namespace) + .and_return(true) + + project.ensure_repository + end end describe '#user_can_push_to_empty_repo?' do -- cgit v1.2.1