Class: Capistrano::Deploy::SCM::Cvs
- Defined in:
- lib/capistrano/recipes/deploy/scm/cvs.rb
Overview
Implements the Capistrano SCM interface for the CVS revision control system.
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 an “cvs diff” for the two revisions.
-
#export(revision, destination) ⇒ Object
Returns the command that will do an “cvs export” of the given revision to the given destination.
-
#handle_data(state, stream, text) ⇒ Object
Determines what the response should be for a particular bit of text from the SCM.
-
#head ⇒ Object
CVS understands ‘HEAD’ to refer to the latest revision in the repository.
-
#log(from, to = nil) ⇒ Object
Returns an “cvs log” command for the two revisions.
-
#query_revision(revision) ⇒ Object
Unfortunately, cvs doesn’t support the concept of a revision number like subversion and other SCM’s do.
-
#sync(revision, destination) ⇒ Object
Returns the command that will do an “cvs update” to the given revision, for the working copy at the given destination.
Methods inherited from Base
#command, default_command, #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.
22 23 24 25 26 |
# File 'lib/capistrano/recipes/deploy/scm/cvs.rb', line 22 def checkout(revision, destination) [ prep_destination(destination), scm(verbose, cvs_root, :checkout, cvs_revision(revision), cvs_destination(destination), variable(:scm_module)) ].join(' && ') end |
#diff(from, to = nil) ⇒ Object
Returns the command that will do an “cvs diff” for the two revisions.
45 46 47 48 49 50 51 52 53 |
# File 'lib/capistrano/recipes/deploy/scm/cvs.rb', line 45 def diff(from, to=nil) rev_type = revision_type(from) if rev_type == :date range_args = "-D '#{from}' -D '#{to || 'now'}'" else range_args = "-r '#{from}' -r '#{to || head}'" end scm cvs_root, :diff, range_args end |
#export(revision, destination) ⇒ Object
Returns the command that will do an “cvs export” of the given revision to the given destination.
38 39 40 41 42 |
# File 'lib/capistrano/recipes/deploy/scm/cvs.rb', line 38 def export(revision, destination) [ prep_destination(destination), scm(verbose, cvs_root, :export, cvs_revision(revision), cvs_destination(destination), variable(:scm_module)) ].join(' && ') end |
#handle_data(state, stream, text) ⇒ Object
Determines what the response should be for a particular bit of text from the SCM. Password prompts, connection requests, passphrases, etc. are handled here.
82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/capistrano/recipes/deploy/scm/cvs.rb', line 82 def handle_data(state, stream, text) logger.info "[#{stream}] #{text}" case text when /\bpassword.*:/i # prompting for a password "#{variable(:scm_password) || variable(:password)}\n" when %r{\(yes/no\)} # let's be agreeable... "yes\n" end end |
#head ⇒ Object
CVS understands ‘HEAD’ to refer to the latest revision in the repository.
16 17 18 |
# File 'lib/capistrano/recipes/deploy/scm/cvs.rb', line 16 def head "HEAD" end |
#log(from, to = nil) ⇒ Object
Returns an “cvs log” command for the two revisions.
56 57 58 59 60 61 62 63 64 |
# File 'lib/capistrano/recipes/deploy/scm/cvs.rb', line 56 def log(from, to=nil) rev_type = revision_type(from) if rev_type == :date range_arg = "-d '#{from}<#{to || 'now'}'" else range_arg = "-r '#{from}:#{to || head}'" end scm cvs_root, :log, range_arg end |
#query_revision(revision) ⇒ Object
Unfortunately, cvs doesn’t support the concept of a revision number like subversion and other SCM’s do. For now, we’ll rely on getting the timestamp of the latest checkin under the revision that’s passed to us.
69 70 71 72 73 74 75 76 77 |
# File 'lib/capistrano/recipes/deploy/scm/cvs.rb', line 69 def query_revision(revision) return revision if revision_type(revision) == :date revision = yield(scm(cvs_root, :log, "-r#{revision}")). split("\n"). select { |line| line =~ /^date:/ }. map { |line| line[/^date: (.*?);/, 1] }. sort.last + " UTC" return revision end |
#sync(revision, destination) ⇒ Object
Returns the command that will do an “cvs update” to the given revision, for the working copy at the given destination.
30 31 32 33 34 |
# File 'lib/capistrano/recipes/deploy/scm/cvs.rb', line 30 def sync(revision, destination) [ prep_destination(destination), scm(verbose, cvs_root, :update, cvs_revision(revision), cvs_destination(destination)) ].join(' && ') end |