summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2017-06-29 23:26:23 -0700
committerStan Hu <stanhu@gmail.com>2017-06-30 07:21:01 -0700
commit9c8075c4b95f090fc6f00c897f6bf097d29ee8bf (patch)
tree462dc0ec31326675e60b67a7d3bb8351ef73e70f
parent5a983ac431affc800d5e9db9e83c14710ec29c36 (diff)
downloadgitlab-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.rb20
-rw-r--r--changelogs/unreleased/sh-allow-force-repo-create.yml4
-rw-r--r--spec/models/project_spec.rb13
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