Class: Capistrano::Deploy::SCM::Darcs
- Defined in:
- lib/capistrano/recipes/deploy/scm/darcs.rb
Overview
Implements the Capistrano SCM interface for the darcs revision control system (www.abridgegame.org/darcs/).
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
-
#checkout(revision, destination) ⇒ Object
Returns the command that will check out the given revision to the given destination.
-
#diff(from, to = nil) ⇒ Object
Returns the command that will do a “darcs diff” for the two revisions.
-
#export(revision, destination) ⇒ Object
Darcs does not have a real ‘export’ option; there is ‘darcs dist’, but that presupposes a utility that can untar and ungzip the dist file.
-
#head ⇒ Object
Because darcs does not have any support for pseudo-ids, we’ll just return something here that we can use in the helpers below for determining whether we need to look up the latest revision.
-
#log(from, to = nil) ⇒ Object
Returns the log of changes between the two revisions.
-
#query_revision(revision) ⇒ Object
Attempts to translate the given revision identifier to a “real” revision.
-
#sync(revision, destination) ⇒ Object
Tries to update the destination repository in-place, to bring it up to the given revision.
- #to_match(revision) ⇒ Object
Methods inherited from Base
#command, default_command, #handle_data, #initialize, #local, #local?, #next_revision, #scm
Constructor Details
This class inherits a constructor from Capistrano::Deploy::SCM::Base
Instance Method Details
#checkout(revision, destination) ⇒ Object
Returns the command that will check out the given revision to the given destination. The ‘revision’ parameter must be the ‘hash’ value for the revision in question, as given by ‘darcs changes –xml-output’.
32 33 34 35 36 37 |
# File 'lib/capistrano/recipes/deploy/scm/darcs.rb', line 32 def checkout(revision, destination) scm :get, *[verbose, "--repo-name=#{destination}", to_match(revision), repository].compact end |
#diff(from, to = nil) ⇒ Object
Returns the command that will do a “darcs diff” for the two revisions. Each revision must be the ‘hash’ identifier of a darcs revision.
57 58 59 |
# File 'lib/capistrano/recipes/deploy/scm/darcs.rb', line 57 def diff(from, to=nil) scm :diff, "--from-match 'hash #{from}'", to && "--to-match 'hash #{to}'" end |
#export(revision, destination) ⇒ Object
Darcs does not have a real ‘export’ option; there is ‘darcs dist’, but that presupposes a utility that can untar and ungzip the dist file. We’ll cheat and just do a get, followed by a deletion of the _darcs metadata directory.
51 52 53 |
# File 'lib/capistrano/recipes/deploy/scm/darcs.rb', line 51 def export(revision, destination) [checkout(revision, destination), "rm -rf #{destination}/_darcs"].join(" && ") end |
#head ⇒ Object
Because darcs does not have any support for pseudo-ids, we’ll just return something here that we can use in the helpers below for determining whether we need to look up the latest revision.
17 18 19 |
# File 'lib/capistrano/recipes/deploy/scm/darcs.rb', line 17 def head :head end |
#log(from, to = nil) ⇒ Object
Returns the log of changes between the two revisions. Each revision must be the ‘hash’ identifier of a darcs revision.
63 64 65 |
# File 'lib/capistrano/recipes/deploy/scm/darcs.rb', line 63 def log(from, to=nil) scm :changes, "--from-match 'hash #{from}'", to && "--to-match 'hash #{to}'", "--repo=#{repository}" end |
#query_revision(revision) ⇒ Object
Attempts to translate the given revision identifier to a “real” revision. If the identifier is a symbol, it is assumed to be a pseudo-id. Otherwise, it will be immediately returned. If it is a pseudo-id, a set of commands to execute will be yielded, and the result of executing those commands must be returned by the block. This method will then extract the actual revision hash from the returned data.
74 75 76 77 78 79 80 81 |
# File 'lib/capistrano/recipes/deploy/scm/darcs.rb', line 74 def query_revision(revision) case revision when :head xml = yield(scm(:changes, "--last 1", "--xml-output", "--repo=#{repository}")) return xml[/hash='(.*?)'/, 1] else return revision end end |
#sync(revision, destination) ⇒ Object
Tries to update the destination repository in-place, to bring it up to the given revision. Note that because darcs’ “pull” operation does not support a “to-match” argument (or similar), this basically nukes the destination directory and re-gets it.
43 44 45 |
# File 'lib/capistrano/recipes/deploy/scm/darcs.rb', line 43 def sync(revision, destination) ["rm -rf #{destination}", checkout(revision, destination)].join(" && ") end |
#to_match(revision) ⇒ Object
21 22 23 24 25 26 27 |
# File 'lib/capistrano/recipes/deploy/scm/darcs.rb', line 21 def to_match(revision) if revision.nil? || revision == self.head nil else "--to-match='hash #{revision}'" end end |