1
0
Fork 0
mirror of https://github.com/capistrano/capistrano synced 2023-03-27 23:21:18 -04:00

Add a "match" remote dependency method (closes #9379)

git-svn-id: http://svn.rubyonrails.org/rails/tools/capistrano@7386 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
Jamis Buck 2007-09-01 02:10:45 +00:00
parent d9d46ceb8f
commit 3fdf1e1e1b
2 changed files with 33 additions and 0 deletions

View file

@ -1,5 +1,7 @@
*SVN*
* Add a "match" remote dependency method [Adam Greene]
* Allow auth-caching of subversion credentials to be enabled via :scm_auth_cache [tsmith]
* Don't let a task trigger itself when used as the source for an "on" hook [Jamis Buck]

View file

@ -34,6 +34,36 @@ module Capistrano
self
end
def match(command, expect, options={})
expect = Regexp.new(Regexp.escape(expect.to_s)) unless expect.is_a?(Regexp)
output_per_server = {}
try("#{command} ", options) do |ch, stream, out|
output_per_server[ch[:server]] ||= ''
output_per_server[ch[:server]] += out
end
# It is possible for some of these commands to return a status != 0
# (for example, rake --version exits with a 1). For this check we
# just care if the output matches, so we reset the success flag.
@success = true
errored_hosts = []
output_per_server.each_pair do |server, output|
next if output =~ expect
errored_hosts << server
end
if errored_hosts.any?
@hosts = errored_hosts.join(', ')
output = output_per_server[errored_hosts.first]
@message = "the output #{output.inspect} from #{command.inspect} did not match #{expect.inspect}"
@success = false
end
self
end
def or(message)
@message = message
self
@ -55,6 +85,7 @@ module Capistrano
return unless @success # short-circuit evaluation
configuration.run(command, options) do |ch,stream,out|
warn "#{ch[:server]}: #{out}" if stream == :err
yield ch, stream, out if block_given?
end
rescue Capistrano::CommandError => e
@success = false