diff --git a/lib/redmine/thumbnail.rb b/lib/redmine/thumbnail.rb index 2fa33a13f..c2a2a2eaa 100644 --- a/lib/redmine/thumbnail.rb +++ b/lib/redmine/thumbnail.rb @@ -21,16 +21,18 @@ module Redmine module Thumbnail extend Redmine::Utils::Shell + CONVERT_BIN = (Redmine::Configuration['imagemagick_convert_command'] || 'convert').freeze + # Generates a thumbnail for the source image to target def self.generate(source, target, size) + return nil unless convert_available? unless File.exists?(target) directory = File.dirname(target) unless File.exists?(directory) FileUtils.mkdir_p directory end - bin = Redmine::Configuration['imagemagick_convert_command'] || 'convert' size_option = "#{size}x#{size}>" - cmd = "#{shell_quote bin} #{shell_quote source} -thumbnail #{shell_quote size_option} #{shell_quote target}" + cmd = "#{shell_quote CONVERT_BIN} #{shell_quote source} -thumbnail #{shell_quote size_option} #{shell_quote target}" unless system(cmd) logger.error("Creating thumbnail failed (#{$?}):\nCommand: #{cmd}") return nil @@ -39,6 +41,14 @@ module Redmine target end + def self.convert_available? + return @convert_available if defined?(@convert_available) + logger.warn("testing for convert...") + @convert_available = system("#{shell_quote CONVERT_BIN} -version") rescue false + logger.warn("Imagemagick's convert binary (#{CONVERT_BIN}) not available") unless @convert_available + @convert_available + end + def self.logger Rails.logger end diff --git a/test/test_helper.rb b/test/test_helper.rb index 6f5ab98a4..c4c956953 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -129,10 +129,7 @@ class ActiveSupport::TestCase end def self.convert_installed? - bin = Redmine::Configuration['imagemagick_convert_command'] || 'convert' - system("#{bin} -version") - rescue - false + Redmine::Thumbnail.convert_available? end # Returns the path to the test +vendor+ repository