diff options
author | Stan Hu <stanhu@gmail.com> | 2017-06-29 23:26:23 -0700 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2017-06-30 07:21:01 -0700 |
commit | 9c8075c4b95f090fc6f00c897f6bf097d29ee8bf (patch) | |
tree | 462dc0ec31326675e60b67a7d3bb8351ef73e70f | |
parent | 5a983ac431affc800d5e9db9e83c14710ec29c36 (diff) | |
download | gitlab-ce-9c8075c4b95f090fc6f00c897f6bf097d29ee8bf.tar.gz |
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
-rw-r--r-- | app/models/project.rb | 20 | ||||
-rw-r--r-- | changelogs/unreleased/sh-allow-force-repo-create.yml | 4 | ||||
-rw-r--r-- | spec/models/project_spec.rb | 13 |
3 files changed, 27 insertions, 10 deletions
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 |