From 81a70bf5153bb9470e96dde05102afd397528cf0 Mon Sep 17 00:00:00 2001
From: Wes Gurney <wes_gurney@cable.comcast.com>
Date: Fri, 12 Sep 2014 11:38:14 -0400
Subject: [PATCH] Adding ability to configure webhook timeout via gitlab.yml

---
 CHANGELOG                         | 1 +
 app/models/web_hook.rb            | 2 +-
 config/gitlab.yml.example         | 8 ++++++--
 config/initializers/1_settings.rb | 1 +
 4 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 49bf983eb5e..61c5e707e9e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -27,6 +27,7 @@ v 7.3.0
   - Project wiki search (Ralf Seidler)
   - Enabled Shibboleth authentication support (Matus Banas)
   - Zen mode (fullscreen) for issues/MR/notes (Robert Schilling)
+  - Add ability to configure webhook timeout via gitlab.yml (Wes Gurney)
 
 v 7.2.1
   - Delete orphaned labels during label migration (James Brooks)
diff --git a/app/models/web_hook.rb b/app/models/web_hook.rb
index 6cf0c1f683e..752eb8074ac 100644
--- a/app/models/web_hook.rb
+++ b/app/models/web_hook.rb
@@ -23,7 +23,7 @@ class WebHook < ActiveRecord::Base
   default_value_for :merge_requests_events, false
 
   # HTTParty timeout
-  default_timeout 10
+  default_timeout Gitlab.config.gitlab.webhook_timeout
 
   validates :url, presence: true,
                   format: { with: URI::regexp(%w(http https)), message: "should be a valid url" }
diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example
index 8e85634d054..f041d692f10 100644
--- a/config/gitlab.yml.example
+++ b/config/gitlab.yml.example
@@ -80,6 +80,10 @@ production: &base
       snippets: false
       visibility_level: "private"  # can be "private" | "internal" | "public"
 
+    ## Webhook settings
+    # Number of seconds to wait for HTTP response after sending webhook HTTP POST request (default: 10)
+    # webhook_timeout: 10
+
     ## Repository downloads directory
     # When a user clicks e.g. 'Download zip' on a project, a temporary zip file is created in the following directory.
     # The default is 'tmp/repositories' relative to the root of the Rails app.
@@ -263,9 +267,9 @@ test:
     port: 80
 
     # When you run tests we clone and setup gitlab-shell
-    # In order to setup it correctly you need to specify 
+    # In order to setup it correctly you need to specify
     # your system username you use to run GitLab
-    # user: YOUR_USERNAME 
+    # user: YOUR_USERNAME
   satellites:
     path: tmp/tests/gitlab-satellites/
   gitlab_shell:
diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb
index 136622c65a2..5b7e69fbc6a 100644
--- a/config/initializers/1_settings.rb
+++ b/config/initializers/1_settings.rb
@@ -92,6 +92,7 @@ Settings.gitlab['restricted_visibility_levels'] = Settings.send(:verify_constant
 Settings.gitlab['username_changing_enabled'] = true if Settings.gitlab['username_changing_enabled'].nil?
 Settings.gitlab['issue_closing_pattern'] = '([Cc]lose[sd]|[Ff]ixe[sd]) #(\d+)' if Settings.gitlab['issue_closing_pattern'].nil?
 Settings.gitlab['default_projects_features'] ||= {}
+Settings.gitlab['webhook_timeout'] ||= 10
 Settings.gitlab.default_projects_features['issues']         = true if Settings.gitlab.default_projects_features['issues'].nil?
 Settings.gitlab.default_projects_features['merge_requests'] = true if Settings.gitlab.default_projects_features['merge_requests'].nil?
 Settings.gitlab.default_projects_features['wiki']           = true if Settings.gitlab.default_projects_features['wiki'].nil?
-- 
GitLab