#rake tasks for freezing/unfreezing javascript libraries #Written by Brian Samson #http://briansamson.com/b/?p=80 SVN_URL = "http://your.svn/repository" LIBRARY_NAME = "jslib" LOCAL_PATH = "public/javascripts" namespace LIBRARY_NAME.to_sym do require 'rexml/document' desc "Freeze the current #{LIBRARY_NAME} library" task :freeze do puts "Freezing #{LIBRARY_NAME}..." cmd = "svn info #{LOCAL_PATH}/#{LIBRARY_NAME} --xml" info = REXML::Document.new(`#{cmd}`) revision = info.elements['info/entry'].attributes['revision'] cmd = "svn propget svn:externals #{LOCAL_PATH}" props = `#{cmd}` newprops = "" props.split(/\n/).each do |line| next if line[0..4] == LIBRARY_NAME newprops << line newprops << "\n" end newprops << "sfrjs -r #{revision} #{SVN_URL}" cmd = "svn propset svn:externals \"#{newprops}\" #{LOCAL_PATH}" puts "Freezing #{LIBRARY_NAME} to revision #{revision}" system(cmd) puts "#{LIBRARY_NAME} is frozen to r#{revision}. You need to commit to make this permanent" end desc "Unfreeze the current #{LIBRARY_NAME} library" task :unfreeze do cmd = "svn info #{LOCAL_PATH}/#{LIBRARY_NAME} --xml" puts "Unfreezing SFRJS..." info = REXML::Document.new(`#{cmd}`) url = info.elements['info/entry/url'].text cmd = "svn propget svn:externals #{LOCAL_PATH}" puts "Getting properties..." props = `#{cmd}` newprops = "" props.split(/\n/).each do |line| next if line[0..4] == LIBRARY_NAME newprops << line newprops << "\n" end newprops << "sfrjs #{url}" cmd = "svn propset svn:externals \"#{newprops}\" #{LOCAL_PATH}" puts "Unfreezing sfrjs..." system(cmd) puts "Updating...." cmd = "svn update #{LOCAL_PATH}/#{LIBRARY_NAME}" system(cmd) puts "Done. #{LIBRARY_NAME} is unfrozen, but you still need to commit to unfreeze it permanently" end task :check do cmd = "svn propget svn:externals #{LOCAL_PATH}" puts cmd puts `#{cmd}` end task :install do unless (File.exists?("#{LOCAL_PATH}/#{LIBRARY_NAME}")) cmd = "svn propset svn:externals \"#{LIBRARY_NAME} #{SVN_URL}\" #{LOCAL_PATH}" puts "Adding Externals on #{LIBRARY_NAME}..." system(cmd) puts "Updating...." cmd = "svn update #{LOCAL_PATH}" system(cmd) else puts "#{LIBRARY_NAME} is already installed" end end end