Replaced Rails environment variables with Merb equivalents.
[merb_radiant.git] / lib / tasks / framework.rake
blob14e9ba7498599a986ce04a0cf0a6f379f7180dd0
1 # Only define freeze and unfreeze tasks in instance mode
2 unless File.directory? "#{Merb.root}/app"
3   namespace :radiant do
4     namespace :freeze do
5       desc "Lock this application to the current gems (by unpacking them into vendor/radiant)"
6       task :gems do
7         require 'rubygems'
8         Gem.manage_gems
10         radiant = (version = ENV['VERSION']) ?
11           Gem.cache.search('radiant', "= #{version}").first :
12           Gem.cache.search('radiant').sort_by { |g| g.version }.last
14         version ||= radiant.version
16         unless radiant
17           puts "No radiant gem #{version} is installed.  Do 'gem list radiant' to see what you have available."
18           exit
19         end
21         puts "Freezing to the gems for Radiant #{radiant.version}"
22         rm_rf   "vendor/radiant"
24         chdir("vendor") do
25           Gem::GemRunner.new.run(["unpack", "-v", "=#{version}", "radiant"])
26           FileUtils.mv(Dir.glob("radiant*").first, "radiant")
27         end
28       end
30       desc "Lock to latest Edge Radiant or a specific revision with REVISION=X (ex: REVISION=4021), a tag with TAG=Y (ex: TAG=rel_1-1-0), or a branch with BRANCH=Z (ex: BRANCH=mental)"
31       task :edge do
32         $verbose = false
33         `svn --version` rescue nil
34         unless !$?.nil? && $?.success?
35           $stderr.puts "ERROR: Must have subversion (svn) available in the PATH to lock this application to Edge Radiant"
36           exit 1
37         end
39         rm_rf   "vendor/radiant"
40         mkdir_p "vendor/radiant"
42         svn_root = "http://dev.radiantcms.org/svn/radiant/"
44         case
45         when ENV['TAG']
46           radiant_svn = "#{svn_root}/tags/#{ENV['TAG']}"
47           touch "vendor/radiant/TAG_#{ENV['TAG']}"
48         when ENV['BRANCH']
49           radiant_svn = "#{svn_root}/branches/#{ENV['BRANCH']}"
50           touch "vendor/radiant/BRANCH_#{ENV['BRANCH']}"
51         else
52           radiant_svn = "#{svn_root}/trunk"
54           if ENV['REVISION'].nil?
55             ENV['REVISION'] = /^r(\d+)/.match(%x{svn -qr HEAD log #{svn_root}})[1]
56             puts "REVISION not set. Using HEAD, which is revision #{ENV['REVISION']}."
57           end
59           touch "vendor/radiant/REVISION_#{ENV['REVISION']}"
60         end
61       
62         system "svn export #{radiant_svn}/radiant vendor/radiant" + (ENV['REVISION'] ? " -r #{ENV['REVISION']}" : "") + " --force"
63       end
64     end
66     desc "Unlock this application from freeze of gems or edge and return to a fluid use of system gems"
67     task :unfreeze do
68       rm_rf "vendor/radiant"
69     end
70     
71     desc "Update both configs, scripts and public/javascripts from Radiant"
72     task :update => [ "update:scripts", "update:javascripts", "update:configs", "update:images", "update:stylesheets" ]
74     namespace :update do
75       desc "Add new scripts to the instance script/ directory"
76       task :scripts do
77         local_base = "script"
78         edge_base  = "#{File.dirname(__FILE__)}/../../scripts"
79         
80         local = Dir["#{local_base}/**/*"].reject { |path| File.directory?(path) }
81         edge  = Dir["#{edge_base}/**/*"].reject { |path| File.directory?(path) }
82         edge  = edge.reject { |f| f =~ /(generate|plugin|destroy)$/ }
83         
84         edge.each do |script|
85           base_name = script[(edge_base.length+1)..-1]
86           next if local.detect { |path| base_name == path[(local_base.length+1)..-1] }
87           if !File.directory?("#{local_base}/#{File.dirname(base_name)}")
88             mkdir_p "#{local_base}/#{File.dirname(base_name)}"
89           end
90           install script, "#{local_base}/#{base_name}", :mode => 0755
91         end
92         install "#{File.dirname(__FILE__)}/../generators/instance/templates/instance_generate", "#{local_base}/generate", :mode => 0755
93       end
95       desc "Update your javascripts from your current radiant install"
96       task :javascripts do
97         project_dir = Merb.root + '/public/javascripts/'
98         scripts = Dir["#{File.dirname(__FILE__)}/../../public/javascripts/*.js"]
99         scripts.reject!{|s| File.basename(s) == 'application.js'} if File.exists?(project_dir + 'application.js')
100         FileUtils.cp(scripts, project_dir)
101       end
103       desc "Update config/boot.rb from your current radiant install"
104       task :configs do
105         FileUtils.cp("#{File.dirname(__FILE__)}/../generators/instance/templates/instance_boot.rb", Merb.root + '/config/boot.rb')
106         instance_env = "#{Merb.root}/config/environment.rb"
107         gen_env = "#{File.dirname(__FILE__)}/../generators/instance/templates/instance_environment.rb"
108         backup_env = "#{Merb.root}/config/environment.bak"
109         unless FileUtils.compare_file(instance_env, gen_env)
110           FileUtils.cp(instance_env, backup_env)
111           FileUtils.cp(gen_env, instance_env)
112           puts "** WARNING **
113 config/environment.rb has changed in Radiant 0.6.5. Your original has been
114 backed up to config/environment.bak and replaced with the packaged version.
115 Please copy your customizations to the new file."
116         end
117       end
118       
119       desc "Update admin images from your current radiant install"
120       task :images do
121         project_dir = Merb.root + '/public/images/admin/'
122         images = Dir["#{File.dirname(__FILE__)}/../../public/images/admin/*"]
123         FileUtils.cp(images, project_dir)
124       end
125       
126       desc "Update admin stylesheets from your current radiant install"
127       task :stylesheets do
128         project_dir = Merb.root + '/public/stylesheets/admin/'
129         stylesheets = Dir["#{File.dirname(__FILE__)}/../../public/stylesheets/admin/*.css"]
130         FileUtils.cp(stylesheets, project_dir)
131       end      
132     end
133   end