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