Feature #39111 » 0002-Remove-codes-that-is-no-longer-needed-as-a-result-of.patch
app/controllers/admin_controller.rb | ||
---|---|---|
79 | 79 |
@checklist = [ |
80 | 80 |
[:text_default_administrator_account_changed, User.default_admin_account_changed?], |
81 | 81 |
[:text_file_repository_writable, File.writable?(Attachment.storage_path)], |
82 |
["#{l :text_plugin_assets_writable} (./public/plugin_assets)", File.writable?(Redmine::Plugin.public_directory)], |
|
83 | 82 |
[:text_all_migrations_have_been_run, !ActiveRecord::Base.connection.migration_context.needs_migration?], |
84 | 83 |
[:text_minimagick_available, Object.const_defined?(:MiniMagick)], |
85 | 84 |
[:text_convert_available, Redmine::Thumbnail.convert_available?], |
lib/redmine/plugin_loader.rb | ||
---|---|---|
35 | 35 |
@dir |
36 | 36 |
end |
37 | 37 | |
38 |
def mirror_assets |
|
39 |
return unless has_assets_dir? |
|
40 | ||
41 |
destination = File.join(PluginLoader.public_directory, File.basename(@dir)) |
|
42 | ||
43 |
source_files = Dir["#{assets_dir}/**/*"] |
|
44 |
source_dirs = source_files.select { |d| File.directory?(d)} |
|
45 |
source_files -= source_dirs |
|
46 |
unless source_files.empty? |
|
47 |
base_target_dir = File.join(destination, File.dirname(source_files.first).gsub(assets_dir, '')) |
|
48 |
begin |
|
49 |
FileUtils.mkdir_p(base_target_dir) |
|
50 |
rescue => e |
|
51 |
raise "Could not create directory #{base_target_dir}: " + e.message |
|
52 |
end |
|
53 |
end |
|
54 | ||
55 |
source_dirs.each do |dir| |
|
56 |
# strip down these paths so we have simple, relative paths we can |
|
57 |
# add to the destination |
|
58 |
target_dir = File.join(destination, dir.gsub(assets_dir, '')) |
|
59 |
begin |
|
60 |
FileUtils.mkdir_p(target_dir) |
|
61 |
rescue => e |
|
62 |
raise "Could not create directory #{target_dir}: " + e.message |
|
63 |
end |
|
64 |
end |
|
65 |
source_files.each do |file| |
|
66 |
target = File.join(destination, file.gsub(assets_dir, '')) |
|
67 |
unless File.exist?(target) && FileUtils.identical?(file, target) |
|
68 |
FileUtils.cp(file, target) |
|
69 |
end |
|
70 |
rescue => e |
|
71 |
raise "Could not copy #{file} to #{target}: " + e.message |
|
72 |
end |
|
73 |
end |
|
74 | ||
75 | 38 |
def has_assets_dir? |
76 | 39 |
File.directory?(@assets_dir) |
77 | 40 |
end |
... | ... | |
90 | 53 |
cattr_accessor :public_directory |
91 | 54 |
self.public_directory = Rails.public_path.join('plugin_assets') |
92 | 55 | |
93 |
def self.create_assets_reloader |
|
94 |
plugin_assets_dirs = {} |
|
95 |
directories.each do |dir| |
|
96 |
plugin_assets_dirs[dir.assets_dir] = ['*'] |
|
97 |
end |
|
98 |
ActiveSupport::FileUpdateChecker.new([], plugin_assets_dirs) do |
|
99 |
mirror_assets |
|
100 |
end |
|
101 |
end |
|
102 | ||
103 | 56 |
def self.load |
104 | 57 |
setup |
105 | 58 |
add_autoload_paths |
... | ... | |
136 | 89 |
def self.directories |
137 | 90 |
@plugin_directories |
138 | 91 |
end |
139 | ||
140 |
def self.mirror_assets(name=nil) |
|
141 |
if name.present? |
|
142 |
directories.find{|d| d.to_s == File.join(directory, name)}.mirror_assets |
|
143 |
else |
|
144 |
directories.each(&:mirror_assets) |
|
145 |
end |
|
146 |
end |
|
147 | 92 |
end |
148 | 93 |
end |
test/unit/lib/redmine/plugin_loader_test.rb | ||
---|---|---|
25 | 25 | |
26 | 26 |
@klass = Redmine::PluginLoader |
27 | 27 |
@klass.directory = Rails.root.join('test/fixtures/plugins') |
28 |
@klass.public_directory = Rails.root.join('tmp/public/plugin_assets') |
|
29 | 28 |
@klass.load |
30 | 29 |
end |
31 | 30 | |
... | ... | |
33 | 32 |
clear_public |
34 | 33 |
end |
35 | 34 | |
36 |
def test_create_assets_reloader |
|
37 |
plugin_assets = @klass.create_assets_reloader |
|
38 |
plugin_assets.execute.inspect |
|
39 | ||
40 |
assert File.exist?("#{@klass.public_directory}/foo_plugin") |
|
41 |
assert File.exist?("#{@klass.public_directory}/foo_plugin/stylesheets/foo.css") |
|
42 |
end |
|
43 | ||
44 |
def test_mirror_assets |
|
45 |
Redmine::PluginLoader.mirror_assets |
|
46 | ||
47 |
assert File.exist?("#{@klass.public_directory}/foo_plugin") |
|
48 |
assert File.exist?("#{@klass.public_directory}/foo_plugin/stylesheets/foo.css") |
|
49 |
end |
|
50 | ||
51 |
def test_mirror_assets_with_plugin_name |
|
52 |
Redmine::PluginLoader.mirror_assets('foo_plugin') |
|
53 | ||
54 |
assert File.exist?("#{@klass.public_directory}/foo_plugin") |
|
55 |
assert File.exist?("#{@klass.public_directory}/foo_plugin/stylesheets/foo.css") |
|
56 |
end |
|
57 | ||
58 | 35 |
def clear_public |
59 | 36 |
FileUtils.rm_rf 'tmp/public' |
60 | 37 |
end |