capistrano 2.5.19 → 2.5.20
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +60 -42
- data/Gemfile +17 -0
- data/README.mdown +65 -0
- data/Rakefile +10 -14
- data/VERSION +1 -1
- data/bin/capify +3 -3
- data/lib/capistrano/command.rb +6 -3
- data/lib/capistrano/recipes/deploy.rb +27 -19
- data/lib/capistrano/recipes/deploy/remote_dependency.rb +6 -0
- data/lib/capistrano/recipes/deploy/scm/cvs.rb +2 -1
- data/lib/capistrano/recipes/deploy/scm/git.rb +1 -1
- data/lib/capistrano/recipes/deploy/scm/subversion.rb +1 -1
- data/lib/capistrano/recipes/deploy/strategy/base.rb +11 -2
- data/lib/capistrano/recipes/deploy/strategy/copy.rb +13 -8
- data/lib/capistrano/recipes/deploy/strategy/remote_cache.rb +1 -0
- data/test/deploy/remote_dependency_test.rb +22 -1
- data/test/deploy/scm/git_test.rb +2 -2
- data/test/deploy/strategy/copy_test.rb +16 -16
- metadata +120 -33
- data/.gitignore +0 -9
- data/README +0 -102
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.5.
|
1
|
+
2.5.20
|
data/bin/capify
CHANGED
@@ -38,7 +38,7 @@ end
|
|
38
38
|
files = {
|
39
39
|
"Capfile" => unindent(<<-FILE),
|
40
40
|
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
|
41
|
-
Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
|
41
|
+
Dir['vendor/gems/*/recipes/*.rb','vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
|
42
42
|
|
43
43
|
load 'config/deploy' # remove this line to skip loading any of the default tasks
|
44
44
|
FILE
|
@@ -54,10 +54,10 @@ role :app, "your app-server here" # This may be the sam
|
|
54
54
|
role :db, "your primary db-server here", :primary => true # This is where Rails migrations will run
|
55
55
|
role :db, "your slave db-server here"
|
56
56
|
|
57
|
-
#
|
58
|
-
# if you\'re still using the script/reapear helper you will need
|
57
|
+
# if you\'re still using the script/reaper helper you will need
|
59
58
|
# these http://github.com/rails/irs_process_scripts
|
60
59
|
|
60
|
+
# If you are using Passenger mod_rails uncomment this:
|
61
61
|
# namespace :deploy do
|
62
62
|
# task :start do ; end
|
63
63
|
# task :stop do ; end
|
data/lib/capistrano/command.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'benchmark'
|
1
2
|
require 'capistrano/errors'
|
2
3
|
require 'capistrano/processable'
|
3
4
|
|
@@ -159,11 +160,13 @@ module Capistrano
|
|
159
160
|
# fails (non-zero return code) on any of the hosts, this will raise a
|
160
161
|
# Capistrano::CommandError.
|
161
162
|
def process!
|
162
|
-
|
163
|
-
|
163
|
+
elapsed = Benchmark.realtime do
|
164
|
+
loop do
|
165
|
+
break unless process_iteration { @channels.any? { |ch| !ch[:closed] } }
|
166
|
+
end
|
164
167
|
end
|
165
168
|
|
166
|
-
logger.trace "command finished" if logger
|
169
|
+
logger.trace "command finished in #{(elapsed * 1000).round}ms" if logger
|
167
170
|
|
168
171
|
if (failed = @channels.select { |ch| ch[:status] != 0 }).any?
|
169
172
|
commands = failed.inject({}) { |map, ch| (map[ch[:command]] ||= []) << ch[:server]; map }
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'benchmark'
|
1
2
|
require 'yaml'
|
2
3
|
require 'capistrano/recipes/deploy/scm'
|
3
4
|
require 'capistrano/recipes/deploy/strategy'
|
@@ -27,6 +28,9 @@ _cset :deploy_via, :checkout
|
|
27
28
|
_cset(:deploy_to) { "/u/apps/#{application}" }
|
28
29
|
_cset(:revision) { source.head }
|
29
30
|
|
31
|
+
# Maintenance base filename
|
32
|
+
_cset :maintenance_basename, "maintenance"
|
33
|
+
|
30
34
|
# =========================================================================
|
31
35
|
# These variables should NOT be changed unless you are very confident in
|
32
36
|
# what you are doing. Make sure you understand all the implications of your
|
@@ -51,13 +55,13 @@ _cset(:shared_path) { File.join(deploy_to, shared_dir) }
|
|
51
55
|
_cset(:current_path) { File.join(deploy_to, current_dir) }
|
52
56
|
_cset(:release_path) { File.join(releases_path, release_name) }
|
53
57
|
|
54
|
-
_cset(:releases) { capture("ls -x #{releases_path}").split.sort }
|
58
|
+
_cset(:releases) { capture("ls -x #{releases_path}", :except => { :no_release => true }).split.sort }
|
55
59
|
_cset(:current_release) { File.join(releases_path, releases.last) }
|
56
60
|
_cset(:previous_release) { releases.length > 1 ? File.join(releases_path, releases[-2]) : nil }
|
57
61
|
|
58
|
-
_cset(:current_revision) { capture("cat #{current_path}/REVISION").chomp }
|
59
|
-
_cset(:latest_revision) { capture("cat #{current_release}/REVISION").chomp }
|
60
|
-
_cset(:previous_revision) { capture("cat #{previous_release}/REVISION").chomp }
|
62
|
+
_cset(:current_revision) { capture("cat #{current_path}/REVISION", :except => { :no_release => true }).chomp }
|
63
|
+
_cset(:latest_revision) { capture("cat #{current_release}/REVISION", :except => { :no_release => true }).chomp }
|
64
|
+
_cset(:previous_revision) { capture("cat #{previous_release}/REVISION", :except => { :no_release => true }).chomp if previous_release }
|
61
65
|
|
62
66
|
_cset(:run_method) { fetch(:use_sudo, true) ? :sudo : :run }
|
63
67
|
|
@@ -95,10 +99,14 @@ end
|
|
95
99
|
# returns the command output as a string
|
96
100
|
def run_locally(cmd)
|
97
101
|
logger.trace "executing locally: #{cmd.inspect}" if logger
|
98
|
-
output_on_stdout =
|
102
|
+
output_on_stdout = nil
|
103
|
+
elapsed = Benchmark.realtime do
|
104
|
+
output_on_stdout = `#{cmd}`
|
105
|
+
end
|
99
106
|
if $?.to_i > 0 # $? is command exit code (posix style)
|
100
107
|
raise Capistrano::LocalArgumentError, "Command #{cmd} returned status code #{$?}"
|
101
108
|
end
|
109
|
+
logger.trace "command finished in #{(elapsed * 1000).round}ms" if logger
|
102
110
|
output_on_stdout
|
103
111
|
end
|
104
112
|
|
@@ -224,7 +232,8 @@ namespace :deploy do
|
|
224
232
|
public/stylesheets, and public/javascripts so that the times are \
|
225
233
|
consistent (so that asset timestamping works). This touch process \
|
226
234
|
is only carried out if the :normalize_asset_timestamps variable is \
|
227
|
-
set to true, which is the default
|
235
|
+
set to true, which is the default The asset directories can be overridden \
|
236
|
+
using the :public_children variable.
|
228
237
|
DESC
|
229
238
|
task :finalize_update, :except => { :no_release => true } do
|
230
239
|
run "chmod -R g+w #{latest_release}" if fetch(:group_writable, true)
|
@@ -242,7 +251,7 @@ namespace :deploy do
|
|
242
251
|
|
243
252
|
if fetch(:normalize_asset_timestamps, true)
|
244
253
|
stamp = Time.now.utc.strftime("%Y%m%d%H%M.%S")
|
245
|
-
asset_paths = %w(images stylesheets javascripts).map { |p| "#{latest_release}/public/#{p}" }.join(" ")
|
254
|
+
asset_paths = fetch(:public_children, %w(images stylesheets javascripts)).map { |p| "#{latest_release}/public/#{p}" }.join(" ")
|
246
255
|
run "find #{asset_paths} -exec touch -t #{stamp} {} ';'; true", :env => { "TZ" => "UTC" }
|
247
256
|
end
|
248
257
|
end
|
@@ -382,11 +391,10 @@ namespace :deploy do
|
|
382
391
|
|
383
392
|
directory = case migrate_target.to_sym
|
384
393
|
when :current then current_path
|
385
|
-
when :latest then
|
394
|
+
when :latest then latest_release
|
386
395
|
else raise ArgumentError, "unknown migration target #{migrate_target.inspect}"
|
387
396
|
end
|
388
397
|
|
389
|
-
puts "#{migrate_target} => #{directory}"
|
390
398
|
run "cd #{directory}; #{rake} RAILS_ENV=#{rails_env} #{migrate_env} db:migrate"
|
391
399
|
end
|
392
400
|
|
@@ -536,7 +544,7 @@ namespace :deploy do
|
|
536
544
|
namespace :web do
|
537
545
|
desc <<-DESC
|
538
546
|
Present a maintenance page to visitors. Disables your application's web \
|
539
|
-
interface by writing a "
|
547
|
+
interface by writing a "#{maintenance_basename}.html" file to each web server. The \
|
540
548
|
servers must be configured to detect the presence of this file, and if \
|
541
549
|
it is present, always display it instead of performing the request.
|
542
550
|
|
@@ -552,18 +560,18 @@ namespace :deploy do
|
|
552
560
|
DESC
|
553
561
|
task :disable, :roles => :web, :except => { :no_release => true } do
|
554
562
|
require 'erb'
|
555
|
-
on_rollback { run "rm #{shared_path}/system
|
563
|
+
on_rollback { run "rm #{shared_path}/system/#{maintenance_basename}.html" }
|
556
564
|
|
557
565
|
warn <<-EOHTACCESS
|
558
|
-
|
566
|
+
|
559
567
|
# Please add something like this to your site's htaccess to redirect users to the maintenance page.
|
560
568
|
# More Info: http://www.shiftcommathree.com/articles/make-your-rails-maintenance-page-respond-with-a-503
|
561
|
-
|
562
|
-
ErrorDocument 503 /system
|
569
|
+
|
570
|
+
ErrorDocument 503 /system/#{maintenance_basename}.html
|
563
571
|
RewriteEngine On
|
564
572
|
RewriteCond %{REQUEST_URI} !\.(css|gif|jpg|png)$
|
565
|
-
RewriteCond %{DOCUMENT_ROOT}/system
|
566
|
-
RewriteCond %{SCRIPT_FILENAME}
|
573
|
+
RewriteCond %{DOCUMENT_ROOT}/system/#{maintenance_basename}.html -f
|
574
|
+
RewriteCond %{SCRIPT_FILENAME} !#{maintenance_basename}.html
|
567
575
|
RewriteRule ^.*$ - [redirect=503,last]
|
568
576
|
EOHTACCESS
|
569
577
|
|
@@ -573,17 +581,17 @@ namespace :deploy do
|
|
573
581
|
template = File.read(File.join(File.dirname(__FILE__), "templates", "maintenance.rhtml"))
|
574
582
|
result = ERB.new(template).result(binding)
|
575
583
|
|
576
|
-
put result, "#{shared_path}/system
|
584
|
+
put result, "#{shared_path}/system/#{maintenance_basename}.html", :mode => 0644
|
577
585
|
end
|
578
586
|
|
579
587
|
desc <<-DESC
|
580
588
|
Makes the application web-accessible again. Removes the \
|
581
|
-
"
|
589
|
+
"#{maintenance_basename}.html" page generated by deploy:web:disable, which (if your \
|
582
590
|
web servers are configured correctly) will make your application \
|
583
591
|
web-accessible again.
|
584
592
|
DESC
|
585
593
|
task :enable, :roles => :web, :except => { :no_release => true } do
|
586
|
-
run "rm #{shared_path}/system
|
594
|
+
run "rm #{shared_path}/system/#{maintenance_basename}.html"
|
587
595
|
end
|
588
596
|
end
|
589
597
|
end
|
@@ -43,6 +43,12 @@ module Capistrano
|
|
43
43
|
self
|
44
44
|
end
|
45
45
|
|
46
|
+
def deb(name, version, options={})
|
47
|
+
@message ||= "package `#{name}' #{version} could not be found"
|
48
|
+
try("dpkg -s #{name} | grep '^Version: #{version}'", options)
|
49
|
+
self
|
50
|
+
end
|
51
|
+
|
46
52
|
def match(command, expect, options={})
|
47
53
|
expect = Regexp.new(Regexp.escape(expect.to_s)) unless expect.is_a?(Regexp)
|
48
54
|
|
@@ -69,7 +69,8 @@ module Capistrano
|
|
69
69
|
def query_revision(revision)
|
70
70
|
return revision if revision_type(revision) == :date
|
71
71
|
revision = yield(scm(cvs_root, :log, "-r#{revision}")).
|
72
|
-
|
72
|
+
split("\n").
|
73
|
+
select { |line| line =~ /^date:/ }.
|
73
74
|
map { |line| line[/^date: (.*?);/, 1] }.
|
74
75
|
sort.last + " UTC"
|
75
76
|
return revision
|
@@ -152,7 +152,7 @@ module Capistrano
|
|
152
152
|
if variable(:git_enable_submodules)
|
153
153
|
execute << "#{git} submodule #{verbose} init"
|
154
154
|
execute << "#{git} submodule #{verbose} sync"
|
155
|
-
execute << "#{git} submodule #{verbose} update"
|
155
|
+
execute << "#{git} submodule #{verbose} update --recursive"
|
156
156
|
end
|
157
157
|
|
158
158
|
execute.join(" && ")
|
@@ -52,7 +52,7 @@ module Capistrano
|
|
52
52
|
# executed (svn info), and will extract the revision from the response.
|
53
53
|
def query_revision(revision)
|
54
54
|
return revision if revision =~ /^\d+$/
|
55
|
-
command = scm(:info, repository, authentication, "-r#{revision}")
|
55
|
+
command = scm(:info, arguments, repository, authentication, "-r#{revision}")
|
56
56
|
result = yield(command)
|
57
57
|
yaml = YAML.load(result)
|
58
58
|
raise "tried to run `#{command}' and got unexpected result #{result.inspect}" unless Hash === yaml
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'benchmark'
|
1
2
|
require 'capistrano/recipes/deploy/dependencies'
|
2
3
|
|
3
4
|
module Capistrano
|
@@ -49,16 +50,24 @@ module Capistrano
|
|
49
50
|
# A wrapper for Kernel#system that logs the command being executed.
|
50
51
|
def system(*args)
|
51
52
|
cmd = args.join(' ')
|
53
|
+
result = nil
|
52
54
|
if RUBY_PLATFORM =~ /win32/
|
53
55
|
cmd = cmd.split(/\s+/).collect {|w| w.match(/^[\w+]+:\/\//) ? w : w.gsub('/', '\\') }.join(' ') # Split command by spaces, change / by \\ unless element is a some+thing://
|
54
56
|
cmd.gsub!(/^cd /,'cd /D ') # Replace cd with cd /D
|
55
57
|
cmd.gsub!(/&& cd /,'&& cd /D ') # Replace cd with cd /D
|
56
58
|
logger.trace "executing locally: #{cmd}"
|
57
|
-
|
59
|
+
elapsed = Benchmark.realtime do
|
60
|
+
result = super(cmd)
|
61
|
+
end
|
58
62
|
else
|
59
63
|
logger.trace "executing locally: #{cmd}"
|
60
|
-
|
64
|
+
elapsed = Benchmark.realtime do
|
65
|
+
result = super
|
66
|
+
end
|
61
67
|
end
|
68
|
+
|
69
|
+
logger.trace "command finished in #{(elapsed * 1000).round}ms"
|
70
|
+
result
|
62
71
|
end
|
63
72
|
|
64
73
|
private
|
@@ -86,7 +86,7 @@ module Capistrano
|
|
86
86
|
if copy_exclude.any?
|
87
87
|
logger.debug "processing exclusions..."
|
88
88
|
if copy_exclude.any?
|
89
|
-
copy_exclude.each do |pattern|
|
89
|
+
copy_exclude.each do |pattern|
|
90
90
|
delete_list = Dir.glob(File.join(destination, pattern), File::FNM_DOTMATCH)
|
91
91
|
# avoid the /.. trap that deletes the parent directories
|
92
92
|
delete_list.delete_if { |dir| dir =~ /\/\.\.$/ }
|
@@ -101,8 +101,7 @@ module Capistrano
|
|
101
101
|
logger.trace "compressing #{destination} to #{filename}"
|
102
102
|
Dir.chdir(tmpdir) { system(compress(File.basename(destination), File.basename(filename)).join(" ")) }
|
103
103
|
|
104
|
-
|
105
|
-
run "cd #{configuration[:releases_path]} && #{decompress(remote_filename).join(" ")} && rm #{remote_filename}"
|
104
|
+
distribute!
|
106
105
|
ensure
|
107
106
|
FileUtils.rm filename rescue nil
|
108
107
|
FileUtils.rm_rf destination rescue nil
|
@@ -184,21 +183,21 @@ module Capistrano
|
|
184
183
|
# Commands are arrays, where the first element is the utility to be
|
185
184
|
# used to perform the compression or decompression.
|
186
185
|
Compression = Struct.new(:extension, :compress_command, :decompress_command)
|
187
|
-
|
186
|
+
|
188
187
|
# The compression method to use, defaults to :gzip.
|
189
188
|
def compression
|
190
189
|
remote_tar = configuration[:copy_remote_tar] || 'tar'
|
191
190
|
local_tar = configuration[:copy_local_tar] || 'tar'
|
192
|
-
|
191
|
+
|
193
192
|
type = configuration[:copy_compression] || :gzip
|
194
193
|
case type
|
195
|
-
when :gzip, :gz then Compression.new("tar.gz", [local_tar, '
|
196
|
-
when :bzip2, :bz2 then Compression.new("tar.bz2", [local_tar, '
|
194
|
+
when :gzip, :gz then Compression.new("tar.gz", [local_tar, 'chzf'], [remote_tar, 'xzf'])
|
195
|
+
when :bzip2, :bz2 then Compression.new("tar.bz2", [local_tar, 'chjf'], [remote_tar, 'xjf'])
|
197
196
|
when :zip then Compression.new("zip", %w(zip -qr), %w(unzip -q))
|
198
197
|
else raise ArgumentError, "invalid compression type #{type.inspect}"
|
199
198
|
end
|
200
199
|
end
|
201
|
-
|
200
|
+
|
202
201
|
# Returns the command necessary to compress the given directory
|
203
202
|
# into the given file.
|
204
203
|
def compress(directory, file)
|
@@ -211,6 +210,12 @@ module Capistrano
|
|
211
210
|
def decompress(file)
|
212
211
|
compression.decompress_command + [file]
|
213
212
|
end
|
213
|
+
|
214
|
+
# Distributes the file to the remote servers
|
215
|
+
def distribute!
|
216
|
+
upload(filename, remote_filename)
|
217
|
+
run "cd #{configuration[:releases_path]} && #{decompress(remote_filename).join(" ")} && rm #{remote_filename}"
|
218
|
+
end
|
214
219
|
end
|
215
220
|
|
216
221
|
end
|
@@ -37,6 +37,12 @@ class RemoteDependencyTest < Test::Unit::TestCase
|
|
37
37
|
assert_equal "gem `capistrano' 9.9 could not be found (host)", @dependency.message
|
38
38
|
end
|
39
39
|
|
40
|
+
def test_should_use_standard_error_message_for_deb
|
41
|
+
setup_for_a_configuration_deb_run("dpkg", "1.15", false)
|
42
|
+
@dependency.deb("dpkg", "1.15")
|
43
|
+
assert_equal "package `dpkg' 1.15 could not be found (host)", @dependency.message
|
44
|
+
end
|
45
|
+
|
40
46
|
def test_should_fail_if_directory_not_found
|
41
47
|
setup_for_a_configuration_run("test -d /data", false)
|
42
48
|
assert !@dependency.directory("/data").pass?
|
@@ -52,7 +58,7 @@ class RemoteDependencyTest < Test::Unit::TestCase
|
|
52
58
|
assert !@dependency.file("/data/foo.txt").pass?
|
53
59
|
end
|
54
60
|
|
55
|
-
def
|
61
|
+
def test_should_pass_if_file_found
|
56
62
|
setup_for_a_configuration_run("test -f /data/foo.txt", true)
|
57
63
|
assert @dependency.file("/data/foo.txt").pass?
|
58
64
|
end
|
@@ -87,6 +93,16 @@ class RemoteDependencyTest < Test::Unit::TestCase
|
|
87
93
|
assert @dependency.gem("capistrano", 9.9).pass?
|
88
94
|
end
|
89
95
|
|
96
|
+
def test_should_pass_if_deb_found
|
97
|
+
setup_for_a_configuration_deb_run("dpkg", "1.15", true)
|
98
|
+
assert @dependency.deb("dpkg", "1.15").pass?
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_should_fail_if_deb_not_found
|
102
|
+
setup_for_a_configuration_deb_run("dpkg", "1.15", false)
|
103
|
+
assert !@dependency.deb("dpkg", "1.15").pass?
|
104
|
+
end
|
105
|
+
|
90
106
|
def test_should_use_alternative_message_if_provided
|
91
107
|
setup_for_a_configuration_run("which cat", false)
|
92
108
|
@dependency.command("cat").or("Sorry")
|
@@ -111,4 +127,9 @@ class RemoteDependencyTest < Test::Unit::TestCase
|
|
111
127
|
find_gem_cmd = "gem specification --version '#{version}' #{name} 2>&1 | awk 'BEGIN { s = 0 } /^name:/ { s = 1; exit }; END { if(s == 0) exit 1 }'"
|
112
128
|
setup_for_a_configuration_run(find_gem_cmd, passing)
|
113
129
|
end
|
130
|
+
|
131
|
+
def setup_for_a_configuration_deb_run(name, version, passing)
|
132
|
+
find_deb_cmd = "dpkg -s #{name} | grep '^Version: #{version}'"
|
133
|
+
setup_for_a_configuration_run(find_deb_cmd, passing)
|
134
|
+
end
|
114
135
|
end
|
data/test/deploy/scm/git_test.rb
CHANGED
@@ -40,7 +40,7 @@ class DeploySCMGitTest < Test::Unit::TestCase
|
|
40
40
|
|
41
41
|
# with submodules
|
42
42
|
@config[:git_enable_submodules] = true
|
43
|
-
assert_equal "#{git} clone -q git@somehost.com:project.git /var/www && cd /var/www && #{git} checkout -q -b deploy #{rev} && #{git} submodule -q init && #{git} submodule -q sync && #{git} submodule -q update", @source.checkout(rev, dest)
|
43
|
+
assert_equal "#{git} clone -q git@somehost.com:project.git /var/www && cd /var/www && #{git} checkout -q -b deploy #{rev} && #{git} submodule -q init && #{git} submodule -q sync && #{git} submodule -q update --recursive", @source.checkout(rev, dest)
|
44
44
|
end
|
45
45
|
|
46
46
|
def test_checkout_with_verbose_should_not_use_q_switch
|
@@ -138,7 +138,7 @@ class DeploySCMGitTest < Test::Unit::TestCase
|
|
138
138
|
@config[:git_enable_submodules] = true
|
139
139
|
dest = "/var/www"
|
140
140
|
rev = 'c2d9e79'
|
141
|
-
assert_equal "git clone -q -o username git@somehost.com:project.git /var/www && cd /var/www && git checkout -q -b deploy #{rev} && git submodule -q init && git submodule -q sync && git submodule -q update", @source.checkout(rev, dest)
|
141
|
+
assert_equal "git clone -q -o username git@somehost.com:project.git /var/www && cd /var/www && git checkout -q -b deploy #{rev} && git submodule -q init && git submodule -q sync && git submodule -q update --recursive", @source.checkout(rev, dest)
|
142
142
|
end
|
143
143
|
|
144
144
|
# Tests from base_test.rb, makin' sure we didn't break anything up there!
|
@@ -14,16 +14,16 @@ class DeployStrategyCopyTest < Test::Unit::TestCase
|
|
14
14
|
@config.stubs(:source).returns(@source)
|
15
15
|
@strategy = Capistrano::Deploy::Strategy::Copy.new(@config)
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
def test_deploy_with_defaults_should_use_remote_gtar
|
19
19
|
@config[:copy_remote_tar] = 'gtar'
|
20
|
-
|
20
|
+
|
21
21
|
Dir.expects(:tmpdir).returns("/temp/dir")
|
22
22
|
@source.expects(:checkout).with("154", "/temp/dir/1234567890").returns(:local_checkout)
|
23
23
|
@strategy.expects(:system).with(:local_checkout)
|
24
24
|
|
25
25
|
Dir.expects(:chdir).with("/temp/dir").yields
|
26
|
-
@strategy.expects(:system).with("tar
|
26
|
+
@strategy.expects(:system).with("tar chzf 1234567890.tar.gz 1234567890")
|
27
27
|
@strategy.expects(:upload).with("/temp/dir/1234567890.tar.gz", "/tmp/1234567890.tar.gz")
|
28
28
|
@strategy.expects(:run).with("cd /u/apps/test/releases && gtar xzf /tmp/1234567890.tar.gz && rm /tmp/1234567890.tar.gz")
|
29
29
|
|
@@ -33,19 +33,19 @@ class DeployStrategyCopyTest < Test::Unit::TestCase
|
|
33
33
|
|
34
34
|
FileUtils.expects(:rm).with("/temp/dir/1234567890.tar.gz")
|
35
35
|
FileUtils.expects(:rm_rf).with("/temp/dir/1234567890")
|
36
|
-
|
36
|
+
|
37
37
|
@strategy.deploy!
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
def test_deploy_with_defaults_should_use_local_gtar
|
41
41
|
@config[:copy_local_tar] = 'gtar'
|
42
|
-
|
42
|
+
|
43
43
|
Dir.expects(:tmpdir).returns("/temp/dir")
|
44
44
|
@source.expects(:checkout).with("154", "/temp/dir/1234567890").returns(:local_checkout)
|
45
45
|
@strategy.expects(:system).with(:local_checkout)
|
46
46
|
|
47
47
|
Dir.expects(:chdir).with("/temp/dir").yields
|
48
|
-
@strategy.expects(:system).with("gtar
|
48
|
+
@strategy.expects(:system).with("gtar chzf 1234567890.tar.gz 1234567890")
|
49
49
|
@strategy.expects(:upload).with("/temp/dir/1234567890.tar.gz", "/tmp/1234567890.tar.gz")
|
50
50
|
@strategy.expects(:run).with("cd /u/apps/test/releases && tar xzf /tmp/1234567890.tar.gz && rm /tmp/1234567890.tar.gz")
|
51
51
|
|
@@ -55,9 +55,9 @@ class DeployStrategyCopyTest < Test::Unit::TestCase
|
|
55
55
|
|
56
56
|
FileUtils.expects(:rm).with("/temp/dir/1234567890.tar.gz")
|
57
57
|
FileUtils.expects(:rm_rf).with("/temp/dir/1234567890")
|
58
|
-
|
58
|
+
|
59
59
|
@strategy.deploy!
|
60
|
-
end
|
60
|
+
end
|
61
61
|
|
62
62
|
def test_deploy_with_defaults_should_use_tar_gz_and_checkout
|
63
63
|
Dir.expects(:tmpdir).returns("/temp/dir")
|
@@ -130,7 +130,7 @@ class DeployStrategyCopyTest < Test::Unit::TestCase
|
|
130
130
|
@source.expects(:checkout).with("154", "/temp/dir/1234567890").returns(:local_checkout)
|
131
131
|
|
132
132
|
@strategy.expects(:system).with(:local_checkout)
|
133
|
-
@strategy.expects(:system).with("tar
|
133
|
+
@strategy.expects(:system).with("tar chjf 1234567890.tar.bz2 1234567890")
|
134
134
|
@strategy.expects(:upload).with("/temp/dir/1234567890.tar.bz2", "/tmp/1234567890.tar.bz2")
|
135
135
|
@strategy.expects(:run).with("cd /u/apps/test/releases && tar xjf /tmp/1234567890.tar.bz2 && rm /tmp/1234567890.tar.bz2")
|
136
136
|
|
@@ -143,17 +143,17 @@ class DeployStrategyCopyTest < Test::Unit::TestCase
|
|
143
143
|
|
144
144
|
@strategy.deploy!
|
145
145
|
end
|
146
|
-
|
146
|
+
|
147
147
|
def test_deploy_with_unknown_compression_type_should_error
|
148
148
|
@config[:copy_compression] = :bogus
|
149
149
|
Dir.expects(:tmpdir).returns("/temp/dir")
|
150
150
|
@source.expects(:checkout).with("154", "/temp/dir/1234567890").returns(:local_checkout)
|
151
151
|
@strategy.stubs(:system)
|
152
152
|
File.stubs(:open)
|
153
|
-
|
153
|
+
|
154
154
|
assert_raises(ArgumentError) { @strategy.deploy! }
|
155
155
|
end
|
156
|
-
|
156
|
+
|
157
157
|
def test_deploy_with_custom_copy_dir_should_use_that_as_tmpdir
|
158
158
|
Dir.expects(:tmpdir).never
|
159
159
|
Dir.expects(:chdir).with("/other/path").yields
|
@@ -161,7 +161,7 @@ class DeployStrategyCopyTest < Test::Unit::TestCase
|
|
161
161
|
@source.expects(:checkout).with("154", "/other/path/1234567890").returns(:local_checkout)
|
162
162
|
|
163
163
|
@strategy.expects(:system).with(:local_checkout)
|
164
|
-
@strategy.expects(:system).with("tar
|
164
|
+
@strategy.expects(:system).with("tar chzf 1234567890.tar.gz 1234567890")
|
165
165
|
@strategy.expects(:upload).with("/other/path/1234567890.tar.gz", "/tmp/1234567890.tar.gz")
|
166
166
|
@strategy.expects(:run).with("cd /u/apps/test/releases && tar xzf /tmp/1234567890.tar.gz && rm /tmp/1234567890.tar.gz")
|
167
167
|
|
@@ -182,7 +182,7 @@ class DeployStrategyCopyTest < Test::Unit::TestCase
|
|
182
182
|
@source.expects(:checkout).returns(:local_checkout)
|
183
183
|
|
184
184
|
@strategy.expects(:system).with(:local_checkout)
|
185
|
-
@strategy.expects(:system).with("tar
|
185
|
+
@strategy.expects(:system).with("tar chzf 1234567890.tar.gz 1234567890")
|
186
186
|
@strategy.expects(:upload).with("/temp/dir/1234567890.tar.gz", "/somewhere/else/1234567890.tar.gz")
|
187
187
|
@strategy.expects(:run).with("cd /u/apps/test/releases && tar xzf /somewhere/else/1234567890.tar.gz && rm /somewhere/else/1234567890.tar.gz")
|
188
188
|
|
@@ -288,7 +288,7 @@ class DeployStrategyCopyTest < Test::Unit::TestCase
|
|
288
288
|
|
289
289
|
def prepare_standard_compress_and_copy!
|
290
290
|
Dir.expects(:chdir).with("/temp/dir").yields
|
291
|
-
@strategy.expects(:system).with("tar
|
291
|
+
@strategy.expects(:system).with("tar chzf 1234567890.tar.gz 1234567890")
|
292
292
|
@strategy.expects(:upload).with("/temp/dir/1234567890.tar.gz", "/tmp/1234567890.tar.gz")
|
293
293
|
@strategy.expects(:run).with("cd /u/apps/test/releases && tar xzf /tmp/1234567890.tar.gz && rm /tmp/1234567890.tar.gz")
|
294
294
|
|