summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-01-19 11:58:36 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-01-19 11:58:36 +0200
commit569a88a456a5f01fbef6f5280b6982c3db8e2a72 (patch)
tree14a8f480a19ca1f194668fdc6ba48716c70d77e2
parent5c3fdfaacba50edbd6d6d7db65d2aa2e69bb5cad (diff)
downloadgitlab-ce-569a88a456a5f01fbef6f5280b6982c3db8e2a72.tar.gz
raise exception if gitolite is broken
-rw-r--r--app/views/errors/gitolite.html.haml2
-rw-r--r--lib/gitlab/backend/gitolite_config.rb15
2 files changed, 15 insertions, 2 deletions
diff --git a/app/views/errors/gitolite.html.haml b/app/views/errors/gitolite.html.haml
index 590bca71dd4..33ea8c1a8b7 100644
--- a/app/views/errors/gitolite.html.haml
+++ b/app/views/errors/gitolite.html.haml
@@ -15,7 +15,7 @@
%p
Diagnostic tool:
%pre
- bundle exec rake gitlab:app:status RAILS_ENV=production
+ bundle exec rake gitlab:check RAILS_ENV=production
%li
%p
Permissions:
diff --git a/lib/gitlab/backend/gitolite_config.rb b/lib/gitlab/backend/gitolite_config.rb
index 10e527eac73..720ef8d236b 100644
--- a/lib/gitlab/backend/gitolite_config.rb
+++ b/lib/gitlab/backend/gitolite_config.rb
@@ -6,6 +6,7 @@ module Gitlab
class GitoliteConfig
class PullError < StandardError; end
class PushError < StandardError; end
+ class BrokenGitolite < StandardError; end
attr_reader :config_tmp_dir, :ga_repo, :conf
@@ -72,6 +73,10 @@ module Gitlab
log("Push error -> " + " " + ex.message)
raise Gitolite::AccessDenied, ex.message
+ rescue BrokenGitolite => ex
+ log("Gitolite error -> " + " " + ex.message)
+ raise Gitolite::AccessDenied, ex.message
+
rescue Exception => ex
log(ex.class.name + " " + ex.message)
raise Gitolite::AccessDenied.new("gitolite timeout")
@@ -202,7 +207,15 @@ module Gitlab
system('git commit -m "GitLab"') # git commit returns 0 on success, and 1 if there is nothing to commit
raise "Git commit failed." unless [0,1].include? $?.exitstatus
- if system('git push')
+ stdin, stdout, stderr = Open3.popen3('git push')
+ push_output = stderr.read
+ push_status = $?.to_i
+
+ if push_output =~ /remote\: FATAL/
+ raise BrokenGitolite, push_output
+ end
+
+ if push_status.zero?
Dir.chdir(Rails.root)
else
raise PushError, "unable to push gitolite-admin repo"