capistrano 3.6.0 → 3.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -1
- data/lib/capistrano/configuration/validated_variables.rb +49 -13
- data/lib/capistrano/configuration/variables.rb +0 -8
- data/lib/capistrano/dsl.rb +2 -1
- data/lib/capistrano/tasks/git.rake +1 -1
- data/lib/capistrano/version.rb +1 -1
- data/spec/lib/capistrano/configuration_spec.rb +12 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1948ef0e60f92eb2ca3eee3f5a67e96e5c0e0612
|
4
|
+
data.tar.gz: 8b16bda549777df3faadb59ed76cebc58dec095d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2f8bdbc484772a5d54a40449dd4f2b5480fb76c906d55d57c1dbe593072487a0f717dfc00702b16aa308ada41d9df3543601179a5bc4c9cd53abe55e4de355c
|
7
|
+
data.tar.gz: c7312872efddec76244ee17dffa32da76108a7073c326654f207437806f86693bacac9fd0a55546e13f5004ac13046f4b26a11af3e7c17ad57ad87a8895130da
|
data/CHANGELOG.md
CHANGED
@@ -4,10 +4,20 @@ Reverse Chronological Order:
|
|
4
4
|
|
5
5
|
## master
|
6
6
|
|
7
|
-
https://github.com/capistrano/capistrano/compare/v3.6.
|
7
|
+
https://github.com/capistrano/capistrano/compare/v3.6.1...HEAD
|
8
8
|
|
9
9
|
* Your contribution here!
|
10
10
|
|
11
|
+
## `3.6.1` (2016-08-23)
|
12
|
+
|
13
|
+
https://github.com/capistrano/capistrano/compare/v3.6.0...v3.6.1
|
14
|
+
|
15
|
+
### Fixes:
|
16
|
+
|
17
|
+
* Restore compatibility with older versions of Rake (< 11.0.0) (@troelskn)
|
18
|
+
* Fix `NoMethodError: undefined method gsub` when setting `:application` to a Proc. The original fix released in 3.6.0 worked for values specified with blocks, but not for those specified with procs or lambdas (the latter syntax is much more common). [#1681](https://github.com/capistrano/capistrano/issues/1681)
|
19
|
+
* Fix a bug where deploy would fail if `:local_user` contained a space; spaces are now replaced with dashes when computing the git-ssh suffix. (@will_in_wi)
|
20
|
+
|
11
21
|
## `3.6.0` (2016-07-26)
|
12
22
|
|
13
23
|
https://github.com/capistrano/capistrano/compare/v3.5.0...v3.6.0
|
@@ -7,9 +7,9 @@ module Capistrano
|
|
7
7
|
# user-supplied validation rules. Each rule for a given key is invoked
|
8
8
|
# immediately whenever `set` is called with a value for that key.
|
9
9
|
#
|
10
|
-
# If `set` is called with a block, validation is not
|
11
|
-
# Instead, the validation rules are invoked the first
|
12
|
-
# to access the value.
|
10
|
+
# If `set` is called with a callable value or a block, validation is not
|
11
|
+
# performed immediately. Instead, the validation rules are invoked the first
|
12
|
+
# time `fetch` is used to access the value.
|
13
13
|
#
|
14
14
|
# A rule is simply a block that accepts two arguments: key and value. It is
|
15
15
|
# up to the rule to raise an exception when it deems the value is invalid
|
@@ -31,10 +31,17 @@ module Capistrano
|
|
31
31
|
|
32
32
|
# Decorate Variables#set to add validation behavior.
|
33
33
|
def set(key, value=nil, &block)
|
34
|
-
|
35
|
-
|
34
|
+
assert_value_or_block_not_both(value, block)
|
35
|
+
|
36
|
+
# Skip validation behavior if no validators are registered for this key
|
37
|
+
return super unless validators.key?(key)
|
38
|
+
|
39
|
+
value_to_evaluate = block || value
|
40
|
+
|
41
|
+
if callable_without_parameters?(value_to_evaluate)
|
42
|
+
super(key, assert_valid_later(key, value_to_evaluate), &nil)
|
36
43
|
else
|
37
|
-
assert_valid_now(key,
|
44
|
+
assert_valid_now(key, value_to_evaluate)
|
38
45
|
super
|
39
46
|
end
|
40
47
|
end
|
@@ -50,26 +57,55 @@ module Capistrano
|
|
50
57
|
|
51
58
|
attr_reader :validators
|
52
59
|
|
53
|
-
#
|
54
|
-
#
|
55
|
-
|
56
|
-
|
57
|
-
|
60
|
+
# Given a callable that provides a value, wrap the callable with another
|
61
|
+
# object that responds to `call`. This new object will perform validation
|
62
|
+
# and then return the original callable's value.
|
63
|
+
#
|
64
|
+
# If the callable is a `Question`, the object returned by this method will
|
65
|
+
# also be a `Question` (a `ValidatedQuestion`, to be precise). This
|
66
|
+
# ensures that `is_a?(Question)` remains true even after the validation
|
67
|
+
# wrapper is applied. This is needed so that `Configuration#is_question?`
|
68
|
+
# works as expected.
|
69
|
+
#
|
70
|
+
def assert_valid_later(key, callable)
|
71
|
+
validation_callback = lambda do
|
72
|
+
value = callable.call
|
58
73
|
assert_valid_now(key, value)
|
59
74
|
value
|
60
75
|
end
|
76
|
+
|
77
|
+
if callable.is_a?(Question)
|
78
|
+
ValidatedQuestion.new(validation_callback)
|
79
|
+
else
|
80
|
+
validation_callback
|
81
|
+
end
|
61
82
|
end
|
62
83
|
|
63
84
|
# Runs all validation rules registered for the given key against the
|
64
85
|
# user-supplied value for that variable. If no validator raises an
|
65
86
|
# exception, the value is assumed to be valid.
|
66
87
|
def assert_valid_now(key, value)
|
67
|
-
return unless validators.key?(key)
|
68
|
-
|
69
88
|
validators[key].each do |validator|
|
70
89
|
validator.call(key, value)
|
71
90
|
end
|
72
91
|
end
|
92
|
+
|
93
|
+
def assert_value_or_block_not_both(value, block)
|
94
|
+
unless value.nil? || block.nil?
|
95
|
+
raise Capistrano::ValidationError,
|
96
|
+
"Value and block both passed to Configuration#set"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
class ValidatedQuestion < Question
|
101
|
+
def initialize(validator)
|
102
|
+
@validator = validator
|
103
|
+
end
|
104
|
+
|
105
|
+
def call
|
106
|
+
@validator.call
|
107
|
+
end
|
108
|
+
end
|
73
109
|
end
|
74
110
|
end
|
75
111
|
end
|
@@ -35,7 +35,6 @@ module Capistrano
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def set(key, value=nil, &block)
|
38
|
-
assert_value_or_block_not_both(value, block)
|
39
38
|
@trusted_keys << key if trusted?
|
40
39
|
remember_location(key)
|
41
40
|
values[key] = block || value
|
@@ -104,13 +103,6 @@ module Capistrano
|
|
104
103
|
(locations[key] ||= []) << location
|
105
104
|
end
|
106
105
|
|
107
|
-
def assert_value_or_block_not_both(value, block)
|
108
|
-
unless value.nil? || block.nil?
|
109
|
-
raise Capistrano::ValidationError,
|
110
|
-
"Value and block both passed to Configuration#set"
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
106
|
def trace_set(key)
|
115
107
|
return unless fetch(:print_config_variables, false)
|
116
108
|
puts "Config variable set: #{key.inspect} => #{values[key].inspect}"
|
data/lib/capistrano/dsl.rb
CHANGED
@@ -13,7 +13,8 @@ module Capistrano
|
|
13
13
|
|
14
14
|
def invoke(task_name, *args)
|
15
15
|
task = Rake::Task[task_name]
|
16
|
-
|
16
|
+
# NOTE: We access instance variable since the accessor was only added recently. Once Capistrano depends on rake 11+, we can revert the following line
|
17
|
+
if task && task.instance_variable_get(:@already_invoked)
|
17
18
|
file, line, = caller.first.split(":")
|
18
19
|
colors = SSHKit::Color.new($stderr)
|
19
20
|
$stderr.puts colors.colorize("Skipping task `#{task_name}'.", :yellow)
|
@@ -6,7 +6,7 @@ namespace :git do
|
|
6
6
|
set :git_wrapper_path, lambda {
|
7
7
|
# Try to avoid permissions issues when multiple users deploy the same app
|
8
8
|
# by using different file names in the same dir for each deployer and stage.
|
9
|
-
suffix = [:application, :stage, :local_user].map { |key| fetch(key).to_s }.join("-")
|
9
|
+
suffix = [:application, :stage, :local_user].map { |key| fetch(key).to_s }.join("-").gsub(/\s+/, "-")
|
10
10
|
"#{fetch(:tmp_dir)}/git-ssh-#{suffix}.sh"
|
11
11
|
}
|
12
12
|
|
data/lib/capistrano/version.rb
CHANGED
@@ -154,19 +154,29 @@ module Capistrano
|
|
154
154
|
config.set(:key, "longer_value")
|
155
155
|
end
|
156
156
|
|
157
|
-
it "validates
|
157
|
+
it "validates block without error" do
|
158
158
|
config.set(:key) { "longer_value" }
|
159
159
|
expect(config.fetch(:key)).to eq "longer_value"
|
160
160
|
end
|
161
161
|
|
162
|
+
it "validates lambda without error" do
|
163
|
+
config.set :key, -> { "longer_value" }
|
164
|
+
expect(config.fetch(:key)).to eq "longer_value"
|
165
|
+
end
|
166
|
+
|
162
167
|
it "raises an exception on invalid string" do
|
163
168
|
expect { config.set(:key, "sho") }.to raise_error(Capistrano::ValidationError)
|
164
169
|
end
|
165
170
|
|
166
|
-
it "raises an exception on invalid string provided by
|
171
|
+
it "raises an exception on invalid string provided by block" do
|
167
172
|
config.set(:key) { "sho" }
|
168
173
|
expect { config.fetch(:key) }.to raise_error(Capistrano::ValidationError)
|
169
174
|
end
|
175
|
+
|
176
|
+
it "raises an exception on invalid string provided by lambda" do
|
177
|
+
config.set :key, -> { "sho" }
|
178
|
+
expect { config.fetch(:key) }.to raise_error(Capistrano::ValidationError)
|
179
|
+
end
|
170
180
|
end
|
171
181
|
|
172
182
|
context "appending" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.6.
|
4
|
+
version: 3.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Clements
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-08-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: airbrussh
|