class RailsPwnerer::App::Svn
Public Instance Methods
checkout(remote_path, app_name, instance_name)
click to toggle source
# File lib/rails_pwnerer/app/vcs/svn.rb 62 def checkout(remote_path, app_name, instance_name) 63 app_path = RailsPwnerer::Config[app_name, instance_name][:app_path] 64 return :next unless remote_path =~ /svn.*\:\/\// or remote_path =~ /http.*\:\/\/.*svn/ 65 66 print "Doing SVN checkout, please enter your password if prompted...\n" 67 system "svn co #{remote_path} #{app_path}" 68 69 # check that we really checked out a Rails app 70 return check_rails_root(app_path) ? :ok : false 71 end
cleanup_app_caches(app_name, instance_name, app_name_is_dir = false)
click to toggle source
clean up the application directory by removing caches
# File lib/rails_pwnerer/app/vcs/svn.rb 28 def cleanup_app_caches(app_name, instance_name, app_name_is_dir = false) 29 # TODO: this is almost-duplicated in git.rb -- pull up somewhere 30 app_path = app_name_is_dir ? app_name : RailsPwnerer::Config[app_name, instance_name][:app_path] 31 return unless File.exists?(File.join(app_path, '.svn')) 32 33 # TODO: learn how Rails caches work and kill those too 34 ['app', 'db', 'lib', 'public/images', 35 'public/javascripts', 'public/stylesheets', 'script', 36 'test', 'tmp', 'vendor' 37 ].each { |dir| cleanup_app_dir app_name, instance_name, dir, app_name_is_dir } 38 end
cleanup_app_dir(app_name, instance_name, target_dir, app_name_is_dir = false)
click to toggle source
remove any files not in SVN in the application dir
# File lib/rails_pwnerer/app/vcs/svn.rb 12 def cleanup_app_dir(app_name, instance_name, target_dir, app_name_is_dir = false) 13 Dir.chdir(app_name_is_dir ? app_name : RailsPwnerer::Config[app_name, instance_name][:app_path]) do 14 # get a listing of what happened in that directory 15 xml_status = `svn status --xml #{target_dir}` 16 xsdoc = REXML::Document.new xml_status 17 18 xsdoc.root.elements['target'].each_element do |e| 19 next unless e.name == 'entry' 20 next unless e.elements['wc-status'].attribute('item').value == 'unversioned' 21 22 FileUtils.rm_r e.attribute('path').value 23 end 24 end 25 end
revert_config_changes(app_name, instance_name)
click to toggle source
reverts the config changes made by rpwn, so svn update doesn’t get confused
# File lib/rails_pwnerer/app/vcs/svn.rb 41 def revert_config_changes(app_name, instance_name) 42 Dir.chdir RailsPwnerer::Config[app_name, instance_name][:app_path] do 43 ['config', 'Gemfile'].each do |dir| 44 Kernel.system "svn revert --recursive #{dir}" 45 end 46 end 47 end
svn_update(app_name, instance_name)
click to toggle source
# File lib/rails_pwnerer/app/vcs/svn.rb 49 def svn_update(app_name, instance_name) 50 Dir.chdir RailsPwnerer::Config[app_name, instance_name][:app_path] do 51 print "Doing SVN update, please enter your password if prompted...\n" 52 success = Kernel.system 'svn update' 53 unless success 54 print "Update failed, performing svn cleanup and re-trying\n" 55 Kernel.system 'svn cleanup' 56 print "Doing SVN update, please enter your password if prompted...\n" 57 Kernel.system 'svn update' 58 end 59 end 60 end
update(app_name, instance_name)
click to toggle source
# File lib/rails_pwnerer/app/vcs/svn.rb 73 def update(app_name, instance_name) 74 app_path = RailsPwnerer::Config[app_name, instance_name][:app_path] 75 return unless File.exists?(File.join(app_path, '.svn')) 76 77 # TODO: maybe backup old version before issuing the svn update? 78 79 cleanup_app_caches app_name, instance_name 80 revert_config_changes app_name, instance_name 81 svn_update app_name, instance_name 82 end
update_prefetch(app_name, instance_name)
click to toggle source
# File lib/rails_pwnerer/app/vcs/svn.rb 84 def update_prefetch(app_name, instance_name) 85 app_path = RailsPwnerer::Config[app_name, instance_name][:app_path] 86 return unless File.exists?(File.join(app_path, '.svn')) 87 88 # TODO: figure out a way to prefetch using SVN (hidden local repo mirror?) 89 end