Class: Capistrano::Deploy::SCM::Base
- Inherits:
-
Object
- Object
- Capistrano::Deploy::SCM::Base
- Defined in:
- lib/alpha_omega/deploy/scm/base.rb
Overview
The ancestor class for all Capistrano SCM implementations. It provides minimal infrastructure for subclasses to build upon and override.
Note that subclasses that implement this abstract class only return the commands that need to be executed–they do not execute the commands themselves. In this way, the deployment method may execute the commands either locally or remotely, as necessary.
Direct Known Subclasses
Defined Under Namespace
Classes: LocalProxy
Instance Attribute Summary collapse
-
#configuration ⇒ Object
readonly
The options available for this SCM instance to reference.
Class Method Summary collapse
-
.default_command(value = nil) ⇒ Object
If no parameters are given, it returns the current configured name of the command-line utility of this SCM.
Instance Method Summary collapse
-
#checkout(revision, destination) ⇒ Object
Checkout a copy of the repository, at the given
revision
, to the givendestination
. -
#command ⇒ Object
Returns the name of the command-line utility for this SCM.
-
#diff(from, to = nil) ⇒ Object
Compute the difference between the two revisions,
from
andto
. -
#head ⇒ Object
Returns the string used to identify the latest revision in the repository.
-
#initialize(configuration = {}) ⇒ Base
constructor
Creates a new SCM instance with the given configuration options.
-
#local ⇒ Object
Returns a proxy that wraps the SCM instance and forces it to operate in “local” mode, which changes how variables are looked up in the configuration.
-
#local? ⇒ Boolean
Returns true if running in “local” mode.
-
#log(from, to = nil) ⇒ Object
Return a log of all changes between the two specified revisions,
from
andto
, inclusive. -
#next_revision(revision) ⇒ Object
Returns the revision number immediately following revision, if at all possible.
-
#query_revision(revision) ⇒ Object
If the given revision represents a “real” revision, this should simply return the revision value.
-
#scm(*args) ⇒ Object
A helper method that can be used to define SCM commands naturally.
Constructor Details
#initialize(configuration = {}) ⇒ Base
Creates a new SCM instance with the given configuration options.
44 45 46 |
# File 'lib/alpha_omega/deploy/scm/base.rb', line 44 def initialize(configuration={}) @configuration = configuration end |
Instance Attribute Details
#configuration ⇒ Object (readonly)
The options available for this SCM instance to reference. Should be treated like a hash.
41 42 43 |
# File 'lib/alpha_omega/deploy/scm/base.rb', line 41 def configuration @configuration end |
Class Method Details
.default_command(value = nil) ⇒ Object
If no parameters are given, it returns the current configured name of the command-line utility of this SCM. If a parameter is given, the defeault command is set to that value.
17 18 19 20 21 22 23 |
# File 'lib/alpha_omega/deploy/scm/base.rb', line 17 def default_command(value=nil) if value @default_command = value else @default_command end end |
Instance Method Details
#checkout(revision, destination) ⇒ Object
Checkout a copy of the repository, at the given revision
, to the given destination
. The checkout is suitable for doing development work in, e.g. allowing subsequent commits and updates.
87 88 89 |
# File 'lib/alpha_omega/deploy/scm/base.rb', line 87 def checkout(revision, destination) raise NotImplementedError, "`checkout' is not implemented by #{self.class.name}" end |
#command ⇒ Object
Returns the name of the command-line utility for this SCM. It first looks at the :scm_command variable, and if it does not exist, it then falls back to whatever was defined by default_command
.
If scm_command is set to :default, the default_command will be returned.
129 130 131 132 133 |
# File 'lib/alpha_omega/deploy/scm/base.rb', line 129 def command command = variable(:scm_command) command = nil if command == :default command || default_command end |
#diff(from, to = nil) ⇒ Object
Compute the difference between the two revisions, from
and to
.
92 93 94 |
# File 'lib/alpha_omega/deploy/scm/base.rb', line 92 def diff(from, to=nil) raise NotImplementedError, "`diff' is not implemented by #{self.class.name}" end |
#head ⇒ Object
Returns the string used to identify the latest revision in the repository. This will be passed as the “revision” parameter of the methods below.
80 81 82 |
# File 'lib/alpha_omega/deploy/scm/base.rb', line 80 def head raise NotImplementedError, "`head' is not implemented by #{self.class.name}" end |
#local ⇒ Object
Returns a proxy that wraps the SCM instance and forces it to operate in “local” mode, which changes how variables are looked up in the configuration. Normally, if the value of a variable “foo” is needed, it is queried for in the configuration as “foo”. However, in “local” mode, first “local_foo” would be looked for, and only if it is not found would “foo” be used. This allows for both (e.g.) “scm_command” and “local_scm_command” to be set, if the two differ.
Alternatively, it may be called with a block, and for the duration of the block, all requests on this configuration object will be considered local.
59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/alpha_omega/deploy/scm/base.rb', line 59 def local if block_given? begin saved, @local_mode = @local_mode, true yield ensure @local_mode = saved end else LocalProxy.new(self) end end |
#local? ⇒ Boolean
Returns true if running in “local” mode. See #local.
73 74 75 |
# File 'lib/alpha_omega/deploy/scm/base.rb', line 73 def local? @local_mode end |
#log(from, to = nil) ⇒ Object
Return a log of all changes between the two specified revisions, from
and to
, inclusive.
98 99 100 |
# File 'lib/alpha_omega/deploy/scm/base.rb', line 98 def log(from, to=nil) raise NotImplementedError, "`log' is not implemented by #{self.class.name}" end |
#next_revision(revision) ⇒ Object
Returns the revision number immediately following revision, if at all possible. A block should always be passed to this method, which accepts a command to invoke and returns the result, although a particular SCM’s implementation is not required to invoke the block.
By default, this method simply returns the revision itself. If a particular SCM is able to determine a subsequent revision given a revision identifier, it should override this method.
119 120 121 |
# File 'lib/alpha_omega/deploy/scm/base.rb', line 119 def next_revision(revision) revision end |
#query_revision(revision) ⇒ Object
If the given revision represents a “real” revision, this should simply return the revision value. If it represends a pseudo-revision (like Subversions “HEAD” identifier), it should yield a string containing the commands that, when executed will return a string that this method can then extract the real revision from.
107 108 109 |
# File 'lib/alpha_omega/deploy/scm/base.rb', line 107 def query_revision(revision) raise NotImplementedError, "`query_revision' is not implemented by #{self.class.name}" end |
#scm(*args) ⇒ Object
A helper method that can be used to define SCM commands naturally. It returns a single string with all arguments joined by spaces, with the scm command prefixed onto it.
138 139 140 |
# File 'lib/alpha_omega/deploy/scm/base.rb', line 138 def scm(*args) [command, *args].compact.join(" ") end |