Mercurial > hg > soundsoftware-site
comparison lib/redmine/scm/adapters/abstract_adapter.rb @ 1295:622f24f53b42 redmine-2.3
Update to Redmine SVN revision 11972 on 2.3-stable branch
author | Chris Cannam |
---|---|
date | Fri, 14 Jun 2013 09:02:21 +0100 |
parents | 433d4f72a19b |
children | 4f746d8966dd |
comparison
equal
deleted
inserted
replaced
1294:3e4c3460b6ca | 1295:622f24f53b42 |
---|---|
1 # Redmine - project management software | 1 # Redmine - project management software |
2 # Copyright (C) 2006-2012 Jean-Philippe Lang | 2 # Copyright (C) 2006-2013 Jean-Philippe Lang |
3 # | 3 # |
4 # This program is free software; you can redistribute it and/or | 4 # This program is free software; you can redistribute it and/or |
5 # modify it under the terms of the GNU General Public License | 5 # modify it under the terms of the GNU General Public License |
6 # as published by the Free Software Foundation; either version 2 | 6 # as published by the Free Software Foundation; either version 2 |
7 # of the License, or (at your option) any later version. | 7 # of the License, or (at your option) any later version. |
15 # along with this program; if not, write to the Free Software | 15 # along with this program; if not, write to the Free Software |
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
17 | 17 |
18 require 'cgi' | 18 require 'cgi' |
19 | 19 |
20 if RUBY_VERSION < '1.9' | |
21 require 'iconv' | |
22 end | |
23 | |
20 module Redmine | 24 module Redmine |
21 module Scm | 25 module Scm |
22 module Adapters | 26 module Adapters |
23 class CommandFailed < StandardError #:nodoc: | 27 class CommandFailed < StandardError #:nodoc: |
24 end | 28 end |
212 | 216 |
213 def self.logger | 217 def self.logger |
214 Rails.logger | 218 Rails.logger |
215 end | 219 end |
216 | 220 |
221 # Path to the file where scm stderr output is logged | |
222 # Returns nil if the log file is not writable | |
223 def self.stderr_log_file | |
224 if @stderr_log_file.nil? | |
225 writable = false | |
226 path = Redmine::Configuration['scm_stderr_log_file'].presence | |
227 path ||= Rails.root.join("log/#{Rails.env}.scm.stderr.log").to_s | |
228 if File.exists?(path) | |
229 if File.file?(path) && File.writable?(path) | |
230 writable = true | |
231 else | |
232 logger.warn("SCM log file (#{path}) is not writable") | |
233 end | |
234 else | |
235 begin | |
236 File.open(path, "w") {} | |
237 writable = true | |
238 rescue => e | |
239 logger.warn("SCM log file (#{path}) cannot be created: #{e.message}") | |
240 end | |
241 end | |
242 @stderr_log_file = writable ? path : false | |
243 end | |
244 @stderr_log_file || nil | |
245 end | |
246 | |
217 def self.shellout(cmd, options = {}, &block) | 247 def self.shellout(cmd, options = {}, &block) |
218 if logger && logger.debug? | 248 if logger && logger.debug? |
219 logger.debug "Shelling out: #{strip_credential(cmd)}" | 249 logger.debug "Shelling out: #{strip_credential(cmd)}" |
220 end | 250 # Capture stderr in a log file |
221 if Rails.env == 'development' | 251 if stderr_log_file |
222 # Capture stderr when running in dev environment | 252 cmd = "#{cmd} 2>>#{shell_quote(stderr_log_file)}" |
223 cmd = "#{cmd} 2>>#{shell_quote(Rails.root.join('log/scm.stderr.log').to_s)}" | 253 end |
224 end | 254 end |
225 begin | 255 begin |
226 mode = "r+" | 256 mode = "r+" |
227 IO.popen(cmd, mode) do |io| | 257 IO.popen(cmd, mode) do |io| |
228 io.set_encoding("ASCII-8BIT") if io.respond_to?(:set_encoding) | 258 io.set_encoding("ASCII-8BIT") if io.respond_to?(:set_encoding) |