]> source.dussan.org Git - redmine.git/commitdiff
Merged r11698 from trunk (#13541).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 1 May 2013 12:17:31 +0000 (12:17 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 1 May 2013 12:17:31 +0000 (12:17 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/branches/2.3-stable@11747 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/redmine/scm/adapters/abstract_adapter.rb

index 36598732624ee77852316f6d90a8a36aa60271da..3e51f2d4db854d2b152bcec8322ad49eb57b6e4a 100644 (file)
@@ -219,17 +219,38 @@ module Redmine
         end
 
         # Path to the file where scm stderr output is logged
+        # Returns nil if the log file is not writable
         def self.stderr_log_file
-          @stderr_log_path ||=
-            Redmine::Configuration['scm_stderr_log_file'].presence ||
-            Rails.root.join("log/#{Rails.env}.scm.stderr.log").to_s
+          if @stderr_log_file.nil?
+            writable = false
+            path = Redmine::Configuration['scm_stderr_log_file'].presence
+            path ||= Rails.root.join("log/#{Rails.env}.scm.stderr.log").to_s
+            if File.exists?(path)
+              if File.file?(path) && File.writable?(path) 
+                writable = true
+              else
+                logger.warn("SCM log file (#{path}) is not writable")
+              end
+            else
+              begin
+                File.open(path, "w") {}
+                writable = true
+              rescue => e
+                logger.warn("SCM log file (#{path}) cannot be created: #{e.message}")
+              end
+            end
+            @stderr_log_file = writable ? path : false
+          end
+          @stderr_log_file || nil
         end
 
         def self.shellout(cmd, options = {}, &block)
           if logger && logger.debug?
             logger.debug "Shelling out: #{strip_credential(cmd)}"
             # Capture stderr in a log file
-            cmd = "#{cmd} 2>>#{shell_quote(stderr_log_file)}"
+            if stderr_log_file
+              cmd = "#{cmd} 2>>#{shell_quote(stderr_log_file)}"
+            end
           end
           begin
             mode = "r+"