summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2016-09-23 09:42:07 +0200
committerJames Lopez <james@jameslopez.es>2016-09-29 16:58:14 +0200
commit29141ed3ea6157a60d9748921782015626a17f9e (patch)
tree7157204905f0184682528735a282cfa7c76f0dfd /app
parenta8691bda3bb8b2db12f7aabe740a0e064c42fd62 (diff)
downloadgitlab-ce-29141ed3ea6157a60d9748921782015626a17f9e.tar.gz
fix broken repo 500 errors in UI and added relevant specs
Diffstat (limited to 'app')
-rw-r--r--app/controllers/projects_controller.rb7
-rw-r--r--app/services/projects/import_service.rb5
2 files changed, 11 insertions, 1 deletions
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index eaa38fa6c98..c99aeadb5e4 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -324,7 +324,12 @@ class ProjectsController < Projects::ApplicationController
end
def repo_exists?
- project.repository_exists? && !project.empty_repo?
+ project.repository_exists? && !project.empty_repo? && project.repo
+
+ rescue Gitlab::Git::Repository::NoRepository
+ project.repository.expire_exists_cache
+
+ false
end
def project_view_files?
diff --git a/app/services/projects/import_service.rb b/app/services/projects/import_service.rb
index cdad0426b02..e466ffa60eb 100644
--- a/app/services/projects/import_service.rb
+++ b/app/services/projects/import_service.rb
@@ -44,6 +44,11 @@ module Projects
begin
gitlab_shell.import_repository(project.repository_storage_path, project.path_with_namespace, project.import_url)
rescue => e
+ # Expire cache to prevent scenarios such as:
+ # 1. First import failed, but the repo was imported successfully, so +exists?+ returns true
+ # 2. Retried import, repo is broken or not imported but +exists?+ still returns true
+ project.repository.before_import if project.repository_exists?
+
raise Error, "Error importing repository #{project.import_url} into #{project.path_with_namespace} - #{e.message}"
end
end