capistrano 2.15.11 → 3.0.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +17 -8
  3. data/Gemfile +1 -12
  4. data/LICENSE.txt +18 -0
  5. data/README.md +65 -68
  6. data/Rakefile +4 -10
  7. data/bin/cap +2 -3
  8. data/bin/capify +7 -91
  9. data/capistrano.gemspec +20 -34
  10. data/lib/Capfile +2 -0
  11. data/lib/capistrano/application.rb +28 -0
  12. data/lib/capistrano/bundler.rb +1 -0
  13. data/lib/capistrano/configuration/question.rb +42 -0
  14. data/lib/capistrano/configuration/server.rb +24 -0
  15. data/lib/capistrano/configuration/servers.rb +43 -95
  16. data/lib/capistrano/configuration.rb +81 -44
  17. data/lib/capistrano/console.rb +1 -0
  18. data/lib/capistrano/defaults.rb +11 -0
  19. data/lib/capistrano/deploy.rb +3 -0
  20. data/lib/capistrano/dotfile.rb +3 -0
  21. data/lib/capistrano/dsl/env.rb +57 -0
  22. data/lib/capistrano/dsl/paths.rb +74 -0
  23. data/lib/capistrano/dsl/stages.rb +15 -0
  24. data/lib/capistrano/dsl/task_enhancements.rb +15 -0
  25. data/lib/capistrano/dsl.rb +38 -0
  26. data/lib/capistrano/git.rb +1 -0
  27. data/lib/capistrano/i18n.rb +33 -0
  28. data/lib/capistrano/install.rb +1 -0
  29. data/lib/capistrano/setup.rb +17 -0
  30. data/lib/capistrano/tasks/bundler.rake +13 -0
  31. data/lib/capistrano/tasks/console.rake +21 -0
  32. data/lib/capistrano/tasks/deploy.rake +153 -0
  33. data/lib/capistrano/tasks/framework.rake +45 -0
  34. data/lib/capistrano/tasks/git.rake +65 -0
  35. data/lib/capistrano/tasks/install.rake +39 -0
  36. data/lib/capistrano/templates/Capfile +43 -0
  37. data/lib/capistrano/templates/deploy.rb.erb +17 -0
  38. data/lib/capistrano/templates/stage.rb.erb +20 -0
  39. data/lib/capistrano/version.rb +1 -11
  40. data/lib/capistrano.rb +9 -3
  41. data/spec/lib/capistrano/configuration/question_spec.rb +54 -0
  42. data/spec/lib/capistrano/configuration/server_spec.rb +48 -0
  43. data/spec/lib/capistrano/configuration/servers_spec.rb +79 -0
  44. data/spec/lib/capistrano/configuration_spec.rb +80 -0
  45. data/spec/lib/capistrano/dsl/env_spec.rb +83 -0
  46. data/spec/lib/capistrano/dsl/paths_spec.rb +69 -0
  47. data/spec/lib/capistrano/dsl_spec.rb +51 -0
  48. data/spec/lib/capistrano_spec.rb +8 -0
  49. data/spec/spec_helper.rb +14 -0
  50. metadata +89 -215
  51. data/.travis.yml +0 -9
  52. data/CHANGELOG +0 -1203
  53. data/lib/capistrano/callback.rb +0 -45
  54. data/lib/capistrano/cli/execute.rb +0 -85
  55. data/lib/capistrano/cli/help.rb +0 -125
  56. data/lib/capistrano/cli/help.txt +0 -81
  57. data/lib/capistrano/cli/options.rb +0 -243
  58. data/lib/capistrano/cli/ui.rb +0 -40
  59. data/lib/capistrano/cli.rb +0 -47
  60. data/lib/capistrano/command.rb +0 -303
  61. data/lib/capistrano/configuration/actions/file_transfer.rb +0 -50
  62. data/lib/capistrano/configuration/actions/inspect.rb +0 -46
  63. data/lib/capistrano/configuration/actions/invocation.rb +0 -329
  64. data/lib/capistrano/configuration/alias_task.rb +0 -26
  65. data/lib/capistrano/configuration/callbacks.rb +0 -147
  66. data/lib/capistrano/configuration/connections.rb +0 -237
  67. data/lib/capistrano/configuration/execution.rb +0 -142
  68. data/lib/capistrano/configuration/loading.rb +0 -205
  69. data/lib/capistrano/configuration/log_formatters.rb +0 -75
  70. data/lib/capistrano/configuration/namespaces.rb +0 -223
  71. data/lib/capistrano/configuration/roles.rb +0 -83
  72. data/lib/capistrano/configuration/variables.rb +0 -127
  73. data/lib/capistrano/errors.rb +0 -19
  74. data/lib/capistrano/ext/multistage.rb +0 -67
  75. data/lib/capistrano/ext/string.rb +0 -5
  76. data/lib/capistrano/extensions.rb +0 -57
  77. data/lib/capistrano/fix_rake_deprecated_dsl.rb +0 -8
  78. data/lib/capistrano/logger.rb +0 -166
  79. data/lib/capistrano/processable.rb +0 -55
  80. data/lib/capistrano/recipes/compat.rb +0 -32
  81. data/lib/capistrano/recipes/deploy/assets.rb +0 -202
  82. data/lib/capistrano/recipes/deploy/dependencies.rb +0 -44
  83. data/lib/capistrano/recipes/deploy/local_dependency.rb +0 -54
  84. data/lib/capistrano/recipes/deploy/remote_dependency.rb +0 -117
  85. data/lib/capistrano/recipes/deploy/scm/accurev.rb +0 -169
  86. data/lib/capistrano/recipes/deploy/scm/base.rb +0 -200
  87. data/lib/capistrano/recipes/deploy/scm/bzr.rb +0 -86
  88. data/lib/capistrano/recipes/deploy/scm/cvs.rb +0 -153
  89. data/lib/capistrano/recipes/deploy/scm/darcs.rb +0 -96
  90. data/lib/capistrano/recipes/deploy/scm/git.rb +0 -299
  91. data/lib/capistrano/recipes/deploy/scm/mercurial.rb +0 -137
  92. data/lib/capistrano/recipes/deploy/scm/none.rb +0 -55
  93. data/lib/capistrano/recipes/deploy/scm/perforce.rb +0 -152
  94. data/lib/capistrano/recipes/deploy/scm/subversion.rb +0 -121
  95. data/lib/capistrano/recipes/deploy/scm.rb +0 -19
  96. data/lib/capistrano/recipes/deploy/strategy/base.rb +0 -92
  97. data/lib/capistrano/recipes/deploy/strategy/checkout.rb +0 -20
  98. data/lib/capistrano/recipes/deploy/strategy/copy.rb +0 -338
  99. data/lib/capistrano/recipes/deploy/strategy/export.rb +0 -20
  100. data/lib/capistrano/recipes/deploy/strategy/remote.rb +0 -52
  101. data/lib/capistrano/recipes/deploy/strategy/remote_cache.rb +0 -57
  102. data/lib/capistrano/recipes/deploy/strategy/unshared_remote_cache.rb +0 -21
  103. data/lib/capistrano/recipes/deploy/strategy.rb +0 -20
  104. data/lib/capistrano/recipes/deploy.rb +0 -625
  105. data/lib/capistrano/recipes/standard.rb +0 -37
  106. data/lib/capistrano/recipes/templates/maintenance.rhtml +0 -53
  107. data/lib/capistrano/role.rb +0 -102
  108. data/lib/capistrano/server_definition.rb +0 -56
  109. data/lib/capistrano/shell.rb +0 -265
  110. data/lib/capistrano/ssh.rb +0 -95
  111. data/lib/capistrano/task_definition.rb +0 -77
  112. data/lib/capistrano/transfer.rb +0 -218
  113. data/test/cli/execute_test.rb +0 -132
  114. data/test/cli/help_test.rb +0 -165
  115. data/test/cli/options_test.rb +0 -329
  116. data/test/cli/ui_test.rb +0 -28
  117. data/test/cli_test.rb +0 -17
  118. data/test/command_test.rb +0 -322
  119. data/test/configuration/actions/file_transfer_test.rb +0 -61
  120. data/test/configuration/actions/inspect_test.rb +0 -76
  121. data/test/configuration/actions/invocation_test.rb +0 -306
  122. data/test/configuration/alias_task_test.rb +0 -118
  123. data/test/configuration/callbacks_test.rb +0 -201
  124. data/test/configuration/connections_test.rb +0 -439
  125. data/test/configuration/execution_test.rb +0 -175
  126. data/test/configuration/loading_test.rb +0 -148
  127. data/test/configuration/namespace_dsl_test.rb +0 -332
  128. data/test/configuration/roles_test.rb +0 -157
  129. data/test/configuration/servers_test.rb +0 -183
  130. data/test/configuration/variables_test.rb +0 -190
  131. data/test/configuration_test.rb +0 -77
  132. data/test/deploy/local_dependency_test.rb +0 -76
  133. data/test/deploy/remote_dependency_test.rb +0 -146
  134. data/test/deploy/scm/accurev_test.rb +0 -23
  135. data/test/deploy/scm/base_test.rb +0 -55
  136. data/test/deploy/scm/bzr_test.rb +0 -51
  137. data/test/deploy/scm/darcs_test.rb +0 -37
  138. data/test/deploy/scm/git_test.rb +0 -274
  139. data/test/deploy/scm/mercurial_test.rb +0 -134
  140. data/test/deploy/scm/none_test.rb +0 -35
  141. data/test/deploy/scm/perforce_test.rb +0 -23
  142. data/test/deploy/scm/subversion_test.rb +0 -68
  143. data/test/deploy/strategy/copy_test.rb +0 -360
  144. data/test/extensions_test.rb +0 -69
  145. data/test/fixtures/cli_integration.rb +0 -5
  146. data/test/fixtures/config.rb +0 -5
  147. data/test/fixtures/custom.rb +0 -3
  148. data/test/logger_formatting_test.rb +0 -149
  149. data/test/logger_test.rb +0 -134
  150. data/test/recipes_test.rb +0 -25
  151. data/test/role_test.rb +0 -11
  152. data/test/server_definition_test.rb +0 -121
  153. data/test/shell_test.rb +0 -96
  154. data/test/ssh_test.rb +0 -113
  155. data/test/task_definition_test.rb +0 -117
  156. data/test/transfer_test.rb +0 -168
  157. data/test/utils.rb +0 -37
  158. data/test/version_test.rb +0 -11
@@ -1,223 +0,0 @@
1
- require 'capistrano/task_definition'
2
-
3
- module Capistrano
4
- class Configuration
5
- module Namespaces
6
- DEFAULT_TASK = :default
7
-
8
- def self.included(base) #:nodoc:
9
- base.send :alias_method, :initialize_without_namespaces, :initialize
10
- base.send :alias_method, :initialize, :initialize_with_namespaces
11
- end
12
-
13
- # The name of this namespace. Defaults to +nil+ for the top-level
14
- # namespace.
15
- attr_reader :name
16
-
17
- # The parent namespace of this namespace. Returns +nil+ for the top-level
18
- # namespace.
19
- attr_reader :parent
20
-
21
- # The hash of tasks defined for this namespace.
22
- attr_reader :tasks
23
-
24
- # The hash of namespaces defined for this namespace.
25
- attr_reader :namespaces
26
-
27
- def initialize_with_namespaces(*args) #:nodoc:
28
- @name = @parent = nil
29
- initialize_without_namespaces(*args)
30
- @tasks = {}
31
- @namespaces = {}
32
- end
33
- private :initialize_with_namespaces
34
-
35
- # Returns the top-level namespace (the one with no parent).
36
- def top
37
- return parent.top if parent
38
- return self
39
- end
40
-
41
- # Returns the fully-qualified name of this namespace, or nil if the
42
- # namespace is at the top-level.
43
- def fully_qualified_name
44
- return nil if name.nil?
45
- [parent.fully_qualified_name, name].compact.join(":")
46
- end
47
-
48
- # Describe the next task to be defined. The given text will be attached to
49
- # the next task that is defined and used as its description.
50
- def desc(text)
51
- @next_description = text
52
- end
53
-
54
- # Returns the value set by the last, pending "desc" call. If +reset+ is
55
- # not false, the value will be reset immediately afterwards.
56
- def next_description(reset=false)
57
- @next_description
58
- ensure
59
- @next_description = nil if reset
60
- end
61
-
62
- # Open a namespace in which to define new tasks. If the namespace was
63
- # defined previously, it will be reopened, otherwise a new namespace
64
- # will be created for the given name.
65
- def namespace(name, &block)
66
- name = name.to_sym
67
- raise ArgumentError, "expected a block" unless block_given?
68
-
69
- namespace_already_defined = namespaces.key?(name)
70
- if all_methods.any? { |m| m.to_sym == name } && !namespace_already_defined
71
- thing = tasks.key?(name) ? "task" : "method"
72
- raise ArgumentError, "defining a namespace named `#{name}' would shadow an existing #{thing} with that name"
73
- end
74
-
75
- namespaces[name] ||= Namespace.new(name, self)
76
- namespaces[name].instance_eval(&block)
77
-
78
- # make sure any open description gets terminated
79
- namespaces[name].desc(nil)
80
-
81
- if !namespace_already_defined
82
- metaclass = class << self; self; end
83
- metaclass.send(:define_method, name) { namespaces[name] }
84
- end
85
- end
86
-
87
- # Describe a new task. If a description is active (see #desc), it is added
88
- # to the options under the <tt>:desc</tt> key. The new task is added to
89
- # the namespace.
90
- def task(name, options={}, &block)
91
- name = name.to_sym
92
- raise ArgumentError, "expected a block" unless block_given?
93
-
94
- task_already_defined = tasks.key?(name)
95
- if all_methods.any? { |m| m.to_sym == name } && !task_already_defined
96
- thing = namespaces.key?(name) ? "namespace" : "method"
97
- raise ArgumentError, "defining a task named `#{name}' would shadow an existing #{thing} with that name"
98
- end
99
-
100
-
101
- task = TaskDefinition.new(name, self, {:desc => next_description(:reset)}.merge(options), &block)
102
-
103
- define_task(task)
104
- end
105
-
106
- def define_task(task)
107
- tasks[task.name] = task
108
-
109
- metaclass = class << self; self; end
110
- metaclass.send(:define_method, task.name) { execute_task(tasks[task.name]) }
111
- end
112
-
113
- # Find the task with the given name, where name is the fully-qualified
114
- # name of the task. This will search into the namespaces and return
115
- # the referenced task, or nil if no such task can be found. If the name
116
- # refers to a namespace, the task in that namespace named "default"
117
- # will be returned instead, if one exists.
118
- def find_task(name)
119
- parts = name.to_s.split(/:/)
120
- tail = parts.pop.to_sym
121
-
122
- ns = self
123
- until parts.empty?
124
- next_part = parts.shift
125
- ns = next_part.empty? ? nil : ns.namespaces[next_part.to_sym]
126
- return nil if ns.nil?
127
- end
128
-
129
- if ns.namespaces.key?(tail)
130
- ns = ns.namespaces[tail]
131
- tail = DEFAULT_TASK
132
- end
133
-
134
- ns.tasks[tail]
135
- end
136
-
137
- # Given a task name, this will search the current namespace, and all
138
- # parent namespaces, looking for a task that matches the name, exactly.
139
- # It returns the task, if found, or nil, if not.
140
- def search_task(name)
141
- name = name.to_sym
142
- ns = self
143
-
144
- until ns.nil?
145
- return ns.tasks[name] if ns.tasks.key?(name)
146
- ns = ns.parent
147
- end
148
-
149
- return nil
150
- end
151
-
152
- # Returns the default task for this namespace. This will be +nil+ if
153
- # the namespace is at the top-level, and will otherwise return the
154
- # task named "default". If no such task exists, +nil+ will be returned.
155
- def default_task
156
- return nil if parent.nil?
157
- return tasks[DEFAULT_TASK]
158
- end
159
-
160
- # Returns the tasks in this namespace as an array of TaskDefinition
161
- # objects. If a non-false parameter is given, all tasks in all
162
- # namespaces under this namespace will be returned as well.
163
- def task_list(all=false)
164
- list = tasks.values
165
- namespaces.each { |name,space| list.concat(space.task_list(:all)) } if all
166
- list
167
- end
168
-
169
- private
170
-
171
- def all_methods
172
- public_methods.concat(protected_methods).concat(private_methods)
173
- end
174
-
175
- class Namespace
176
- def initialize(name, parent)
177
- @parent = parent
178
- @name = name
179
- end
180
-
181
- def role(*args)
182
- raise NotImplementedError, "roles cannot be defined in a namespace"
183
- end
184
-
185
- def respond_to?(sym, include_priv=false)
186
- super || parent.respond_to?(sym, include_priv)
187
- end
188
-
189
- def method_missing(sym, *args, &block)
190
- if parent.respond_to?(sym)
191
- parent.send(sym, *args, &block)
192
- else
193
- super
194
- end
195
- end
196
-
197
- include Capistrano::Configuration::AliasTask
198
- include Capistrano::Configuration::Namespaces
199
- undef :desc, :next_description
200
- end
201
- end
202
- end
203
- end
204
-
205
- module Kernel
206
- class << self
207
- alias_method :method_added_without_capistrano, :method_added
208
-
209
- # Detect method additions to Kernel and remove them in the Namespace class
210
- def method_added(name)
211
- result = method_added_without_capistrano(name)
212
- return result if self != Kernel
213
-
214
- namespace = Capistrano::Configuration::Namespaces::Namespace
215
-
216
- if namespace.method_defined?(name) && namespace.instance_method(name).owner == Kernel
217
- namespace.send :undef_method, name
218
- end
219
-
220
- result
221
- end
222
- end
223
- end
@@ -1,83 +0,0 @@
1
- require 'capistrano/server_definition'
2
- require 'capistrano/role'
3
-
4
- module Capistrano
5
- class Configuration
6
- module Roles
7
- def self.included(base) #:nodoc:
8
- base.send :alias_method, :initialize_without_roles, :initialize
9
- base.send :alias_method, :initialize, :initialize_with_roles
10
- end
11
-
12
- # The hash of roles defined for this configuration. Each entry in the
13
- # hash points to an array of server definitions that belong in that
14
- # role.
15
- attr_reader :roles
16
-
17
- def initialize_with_roles(*args) #:nodoc:
18
- initialize_without_roles(*args)
19
- @roles = Hash.new { |h,k| h[k] = Role.new }
20
- end
21
-
22
- # Define a new role and its associated servers. You must specify at least
23
- # one host for each role. Also, you can specify additional information
24
- # (in the form of a Hash) which can be used to more uniquely specify the
25
- # subset of servers specified by this specific role definition.
26
- #
27
- # Usage:
28
- #
29
- # role :db, "db1.example.com", "db2.example.com"
30
- # role :db, "master.example.com", :primary => true
31
- # role :app, "app1.example.com", "app2.example.com"
32
- #
33
- # You can also encode the username and port number for each host in the
34
- # server string, if needed:
35
- #
36
- # role :web, "www@web1.example.com"
37
- # role :file, "files.example.com:4144"
38
- # role :db, "admin@db3.example.com:1234"
39
- #
40
- # Lastly, username and port number may be passed as options, if that is
41
- # preferred; note that the options apply to all servers defined in
42
- # that call to "role":
43
- #
44
- # role :web, "web2", "web3", :user => "www", :port => 2345
45
- def role(which, *args, &block)
46
- options = args.last.is_a?(Hash) ? args.pop : {}
47
- which = which.to_sym
48
-
49
- # The roles Hash is defined so that unrecognized keys always auto-initialize
50
- # to a new Role instance (see the assignment in the initialize_with_roles method,
51
- # above). However, we explicitly assign here so that role declarations will
52
- # vivify the role object even if there are no server arguments. (Otherwise,
53
- # role(:app) won't actually instantiate a Role object for :app.)
54
- roles[which] ||= Role.new
55
-
56
- roles[which].push(block, options) if block_given?
57
- args.each { |host| roles[which] << ServerDefinition.new(host, options) }
58
- end
59
-
60
- # An alternative way to associate servers with roles. If you have a server
61
- # that participates in multiple roles, this can be a DRYer way to describe
62
- # the relationships. Pass the host definition as the first parameter, and
63
- # the roles as the remaining parameters:
64
- #
65
- # server "master.example.com", :web, :app
66
- #
67
- # Also, you can specify additional information
68
- # (in the form of a Hash) which can be used to more uniquely specify the
69
- # subset of servers specified by this specific definition:
70
- #
71
- # server "master.example.com", :db, :primary => true
72
- def server(host, *roles)
73
- options = roles.last.is_a?(Hash) ? roles.pop : {}
74
- raise ArgumentError, "you must associate a server with at least one role" if roles.empty?
75
- roles.each { |name| role(name, host, options) }
76
- end
77
-
78
- def role_names_for_host(host)
79
- roles.map {|role_name, role| role_name if role.include?(host) }.compact || []
80
- end
81
- end
82
- end
83
- end
@@ -1,127 +0,0 @@
1
- require 'thread'
2
-
3
- module Capistrano
4
- class Configuration
5
- module Variables
6
- def self.included(base) #:nodoc:
7
- %w(initialize respond_to? method_missing).each do |m|
8
- base_name = m[/^\w+/]
9
- punct = m[/\W+$/]
10
- base.send :alias_method, "#{base_name}_without_variables#{punct}", m
11
- base.send :alias_method, m, "#{base_name}_with_variables#{punct}"
12
- end
13
- end
14
-
15
- # The hash of variables that have been defined in this configuration
16
- # instance.
17
- attr_reader :variables
18
-
19
- # Set a variable to the given value.
20
- def set(variable, *args, &block)
21
- if variable.to_s !~ /^[_a-z]/
22
- raise ArgumentError, "invalid variable `#{variable}' (variables must begin with an underscore, or a lower-case letter)"
23
- end
24
-
25
- if !block_given? && args.empty? || block_given? && !args.empty?
26
- raise ArgumentError, "you must specify exactly one of either a value or a block"
27
- end
28
-
29
- if args.length > 1
30
- raise ArgumentError, "wrong number of arguments (#{args.length} for 1)"
31
- end
32
-
33
- value = args.empty? ? block : args.first
34
- sym = variable.to_sym
35
- protect(sym) { @variables[sym] = value }
36
- end
37
-
38
- alias :[]= :set
39
-
40
- # Removes any trace of the given variable.
41
- def unset(variable)
42
- sym = variable.to_sym
43
- protect(sym) do
44
- @original_procs.delete(sym)
45
- @variables.delete(sym)
46
- end
47
- end
48
-
49
- # Returns true if the variable has been defined, and false otherwise.
50
- def exists?(variable)
51
- @variables.key?(variable.to_sym)
52
- end
53
-
54
- # If the variable was originally a proc value, it will be reset to it's
55
- # original proc value. Otherwise, this method does nothing. It returns
56
- # true if the variable was actually reset.
57
- def reset!(variable)
58
- sym = variable.to_sym
59
- protect(sym) do
60
- if @original_procs.key?(sym)
61
- @variables[sym] = @original_procs.delete(sym)
62
- true
63
- else
64
- false
65
- end
66
- end
67
- end
68
-
69
- # Access a named variable. If the value of the variable responds_to? :call,
70
- # #call will be invoked (without parameters) and the return value cached
71
- # and returned.
72
- def fetch(variable, *args)
73
- if !args.empty? && block_given?
74
- raise ArgumentError, "you must specify either a default value or a block, but not both"
75
- end
76
-
77
- sym = variable.to_sym
78
- protect(sym) do
79
- if !@variables.key?(sym)
80
- return args.first unless args.empty?
81
- return yield(variable) if block_given?
82
- raise IndexError, "`#{variable}' not found"
83
- end
84
-
85
- if @variables[sym].respond_to?(:call)
86
- @original_procs[sym] = @variables[sym]
87
- @variables[sym] = @variables[sym].call
88
- end
89
- end
90
-
91
- @variables[sym]
92
- end
93
-
94
- def [](variable)
95
- fetch(variable, nil)
96
- end
97
-
98
- def initialize_with_variables(*args) #:nodoc:
99
- initialize_without_variables(*args)
100
- @variables = {}
101
- @original_procs = {}
102
- @variable_locks = Hash.new { |h,k| h[k] = Mutex.new }
103
-
104
- set :ssh_options, {}
105
- set :logger, logger
106
- end
107
- private :initialize_with_variables
108
-
109
- def protect(variable)
110
- @variable_locks[variable.to_sym].synchronize { yield }
111
- end
112
- private :protect
113
-
114
- def respond_to_with_variables?(sym, include_priv=false) #:nodoc:
115
- @variables.has_key?(sym.to_sym) || respond_to_without_variables?(sym, include_priv)
116
- end
117
-
118
- def method_missing_with_variables(sym, *args, &block) #:nodoc:
119
- if args.length == 0 && block.nil? && @variables.has_key?(sym)
120
- self[sym]
121
- else
122
- method_missing_without_variables(sym, *args, &block)
123
- end
124
- end
125
- end
126
- end
127
- end
@@ -1,19 +0,0 @@
1
- module Capistrano
2
-
3
- Error = Class.new(RuntimeError)
4
-
5
- CaptureError = Class.new(Capistrano::Error)
6
- NoSuchTaskError = Class.new(Capistrano::Error)
7
- NoMatchingServersError = Class.new(Capistrano::Error)
8
-
9
- class RemoteError < Error
10
- attr_accessor :hosts
11
- end
12
-
13
- ConnectionError = Class.new(Capistrano::RemoteError)
14
- TransferError = Class.new(Capistrano::RemoteError)
15
- CommandError = Class.new(Capistrano::RemoteError)
16
-
17
- LocalArgumentError = Class.new(Capistrano::Error)
18
-
19
- end
@@ -1,67 +0,0 @@
1
- require 'fileutils'
2
-
3
- unless Capistrano::Configuration.respond_to?(:instance)
4
- abort "capistrano/ext/multistage requires Capistrano 2"
5
- end
6
-
7
- Capistrano::Configuration.instance.load do
8
- location = fetch(:stage_dir, "config/deploy")
9
-
10
- unless exists?(:stages)
11
- set :stages, Dir["#{location}/*.rb"].map { |f| File.basename(f, ".rb") }
12
- end
13
-
14
- stages.each do |name|
15
- desc "Set the target stage to `#{name}'."
16
- task(name) do
17
- set :stage, name.to_sym
18
-
19
- file = "#{location}/#{stage}"
20
- load file if file_in_load_path?(file)
21
- end
22
- end
23
-
24
- on :load do
25
- # The first non option argument
26
- env = ARGV.detect { |a| a.to_s !~ /\A-/ && a.to_s !~ /=/ }
27
-
28
- if stages.include?(env)
29
- # Execute the specified stage so that recipes required in stage can contribute to task list
30
- find_and_execute_task(env) if ARGV.any?{ |option| option =~ /-T|--tasks|-e|--explain/ }
31
- else
32
- # Execute the default stage so that recipes required in stage can contribute tasks
33
- find_and_execute_task(default_stage) if exists?(:default_stage)
34
- end
35
- end
36
-
37
- namespace :multistage do
38
- desc "[internal] Ensure that a stage has been selected."
39
- task :ensure do
40
- if !exists?(:stage)
41
- if exists?(:default_stage)
42
- logger.important "Defaulting to `#{default_stage}'"
43
- find_and_execute_task(default_stage)
44
- else
45
- abort "No stage specified. Please specify one of: #{stages.join(', ')} (e.g. `cap #{stages.first} #{ARGV.last}')"
46
- end
47
- end
48
- end
49
-
50
- desc "Stub out the staging config files."
51
- task :prepare do
52
- FileUtils.mkdir_p(location)
53
- stages.each do |name|
54
- file = File.join(location, name + ".rb")
55
- unless File.exist?(file)
56
- File.open(file, "w") do |f|
57
- f.puts "# #{name.upcase}-specific deployment configuration"
58
- f.puts "# please put general deployment config in config/deploy.rb"
59
- end
60
- end
61
- end
62
- end
63
- end
64
-
65
- on :start, "multistage:ensure", :except => stages + ['multistage:prepare']
66
-
67
- end
@@ -1,5 +0,0 @@
1
- class String
2
- def compact
3
- self.gsub(/\s+/, ' ')
4
- end
5
- end
@@ -1,57 +0,0 @@
1
- module Capistrano
2
- class ExtensionProxy #:nodoc:
3
- def initialize(config, mod)
4
- @config = config
5
- extend(mod)
6
- end
7
-
8
- def method_missing(sym, *args, &block)
9
- @config.send(sym, *args, &block)
10
- end
11
- end
12
-
13
- # Holds the set of registered plugins, keyed by name (where the name is a
14
- # symbol).
15
- EXTENSIONS = {}
16
-
17
- # Register the given module as a plugin with the given name. It will henceforth
18
- # be available via a proxy object on Configuration instances, accessible by
19
- # a method with the given name.
20
- def self.plugin(name, mod)
21
- name = name.to_sym
22
- return false if EXTENSIONS.has_key?(name)
23
-
24
- methods = Capistrano::Configuration.public_instance_methods +
25
- Capistrano::Configuration.protected_instance_methods +
26
- Capistrano::Configuration.private_instance_methods
27
-
28
- if methods.any? { |m| m.to_sym == name }
29
- raise Capistrano::Error, "registering a plugin named `#{name}' would shadow a method on Capistrano::Configuration with the same name"
30
- end
31
-
32
- Capistrano::Configuration.class_eval <<-STR, __FILE__, __LINE__+1
33
- def #{name}
34
- @__#{name}_proxy ||= Capistrano::ExtensionProxy.new(self, Capistrano::EXTENSIONS[#{name.inspect}])
35
- end
36
- STR
37
-
38
- EXTENSIONS[name] = mod
39
- return true
40
- end
41
-
42
- # Unregister the plugin with the given name.
43
- def self.remove_plugin(name)
44
- name = name.to_sym
45
- if EXTENSIONS.delete(name)
46
- Capistrano::Configuration.send(:remove_method, name)
47
- return true
48
- end
49
-
50
- return false
51
- end
52
-
53
- def self.configuration(*args) #:nodoc:
54
- warn "[DEPRECATION] Capistrano.configuration is deprecated. Use Capistrano::Configuration.instance instead"
55
- Capistrano::Configuration.instance(*args)
56
- end
57
- end
@@ -1,8 +0,0 @@
1
- #
2
- # See https://github.com/jimweirich/rake/issues/81
3
- #
4
- if defined?(Rake::DeprecatedObjectDSL)
5
- Rake::DeprecatedObjectDSL.private_instance_methods.each do |m|
6
- Rake::DeprecatedObjectDSL.send("undef_method", m)
7
- end
8
- end