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

Fix host filter regression

This commit is contained in:
Chad Shaffer 2016-02-04 20:59:01 -08:00
parent 7c061dbab0
commit 5388442ea0
4 changed files with 33 additions and 25 deletions

View file

@ -1,10 +1,6 @@
require 'capistrano/configuration/regex_filter'
module Capistrano
class Configuration
class HostFilter
include RegexFilter
def initialize values
av = Array(values).dup
av.map! { |v| (v.is_a?(String) && v =~ /^(?<name>[-A-Za-z0-9.]+)(,\g<name>)*$/) ? v.split(',') : v }
@ -15,6 +11,20 @@ module Capistrano
def filter servers
Array(servers).select { |s| @rex.match s.to_s }
end
private
def regex_matcher(values)
values.map! do |v|
case v
when Regexp then v
else
vs = v.to_s
vs =~ /^[-A-Za-z0-9.]+$/ ? vs : Regexp.new(vs)
end
end
Regexp.union values
end
end
end
end

View file

@ -1,17 +0,0 @@
module Capistrano
class Configuration
module RegexFilter
def regex_matcher values
av = values.map do |v|
case v
when Regexp then v
else
vs = v.to_s
vs =~ %r{^/(.+)/$} ? Regexp.new($1) : %r{^#{vs}$}
end
end
Regexp.union av
end
end
end
end

View file

@ -1,10 +1,6 @@
require 'capistrano/configuration/regex_filter'
module Capistrano
class Configuration
class RoleFilter
include RegexFilter
def initialize values
av = Array(values).dup
av.map! { |v| v.is_a?(String) ? v.split(',') : v }
@ -15,6 +11,20 @@ module Capistrano
def filter servers
Array(servers).select { |s| s.is_a?(String) ? false : s.roles.any? { |r| @rex.match r } }
end
private
def regex_matcher(values)
values.map! do |v|
case v
when Regexp then v
else
vs = v.to_s
vs =~ %r{^/(.+)/$} ? Regexp.new($1) : %r{^#{vs}$}
end
end
Regexp.union values
end
end
end
end

View file

@ -44,6 +44,11 @@ module Capistrano
it_behaves_like 'it filters hosts correctly', %w{server1 server3}
end
context 'with a regexp with line boundaries' do
let(:values) { '^server' }
it_behaves_like 'it filters hosts correctly', %w{server1 server2 server3 server4 server5}
end
context 'with a regexp with a comma' do
let(:values) { 'server\d{1,3}$' }
it_behaves_like 'it filters hosts correctly', %w{server1 server2 server3 server4 server5}