Change Log


  • Fixes a problem in 2.5.7 where deploy:finalize_update had been badly merged.

2.5.6 & 2.5.7

  • 2.5.7 masks a broken 2.5.6 release that was accidentally mirrored via Rubyforge.

  • Clean the cached git repository [Graeme Mathieson]

  • Improved back-tick handling code in relation to the above.

  • Fixes a Git issue when submodules update upstream. (via mailing list) [sneakin]

  • Capify now creates the config directory in directories without one.


  • Make sure role(:foo) actually declares an (empty) role for :foo, even without server arguments [Jamis Buck]


  • When using rsync with the remote_cache strategy include -t switch to preserve file times [Kevin McCarthy]

  • Bump Net::SSH dependency to version 2.0.10 [Jamis Buck]

  • Use 'user' from .ssh/config appropriately [Jamis Buck]

  • Allow respondto?() method to accept optional second parameter (includepriv) [Matthias Marschall]

  • Make sure sudo prompts are retried correctly even if "try again" and the prompt appear in the same text chunk from the server [Jamis Buck]

  • Add supported environment variables to -H output [François Beausoleil]


  • Make previous_release return nil if there is no previous release [Mathias Meyer]

  • Play nice with rubies that don't inspect terminals well (ie. JRuby) by defaulting screen columns to 80 [Bob McWhirter]

  • Rollback of deploy:symlink would explode if there was no previous revision to rollback to [Jamis Buck]

  • Fix bug in transfer.rb that caused get/put/upload/download to ignore blocks passed to them [arika]

  • Fix issue with git SCM that caused "Unable to resolve revision" errors when there was trailing whitespace in git's output [Mark Zuneska, Daniel Berlinger and Evan Closson]


  • Fix issue with git SCM that caused "Unable to resolve revision for 'HEAD'" errors on deploy [Jamis Buck]


  • Add -t (--tools) switch for better task lists for external tools [Jamis Buck]

  • Make the RemoteDependency#try method use invoke_command instead of run, for sudo-ability [Matthias Marschall]

  • Make locally executed commands in Windows more Windows-friendly

  • Added :scm_arguments variable for custom SCM arguments (subversion-only, currently) [David Abdemoulaie]

  • Don't emit -p for sudo when :sudo_prompt is blank [Matthias Marschall]

  • Copy symlinks when using rsync [Paul Paradise]

  • Make sure git query-revision matches on exact branch name

  • Use -T to filter listed tasks by a pattern [Mathias Meyer, Geoffrey Grosenbach]

  • Expose the #scm method on SCM::Base for building custom scm commands [Mathias Meyer]

  • Start logging some locally executed commands [springyweb]

  • Added HOSTFILTER environment variable for constraining tasks so they run only on hosts matching the given list of servers [Walter Smith]

  • Make sure the glob matching for copy excludes does not delete parent directories [Fabio Akita]

  • Ruby 1.9 compatibility [Jamis Buck]


  • Allow :gateway to be set to an array, in which case a chain of tunnels is created [Kerry Buckley]

  • Allow HOSTS spec to override even non-existent roles [Mike Bailey]

  • Sort releases via "ls -xt" instead of "ls -x" to allow for custom release names [Yan Pritzker]

  • Convert arguments to -s and -S into integers, booleans, etc. based on whether the arguments appear to be those types [Jamis Buck]

  • Add descriptions of -n and -d to the verbose help text [Jamis Buck]

  • Make rollbacks work with processes that need the current directory to be valid in order to restart properly (e.g. mongrel_rails) [Jamis Buck]

  • Rename deploy:rollback_code to deploy:rollback:code [Jamis Buck]

  • Added parallel() helper for executing multiple different commands in parallel [Jamis Buck]

  • Make sure a task only uses the last on_rollback block, once, on rollback [Jamis Buck]

  • Add :shared_children variable to customize which subdirectories are created by deploy:setup [Jonathan Share]

  • Allow filename globbing in copy_exclude setting for the copy strategy [Jonathan Share]

  • Allow remotecache strategy to use copyexclude settings (requires rsync) [Lewis Mackenzie]

  • Make None SCM module work in Windows [Carlos Kozuszko]

  • Recognize mingw as a Windows platform [Carlos Kozuszko]

  • Fixed failing tests in Windows [Carlos Kozuszko]

  • Made :scmauthcache control whether password option is emitted in subversion module [Brendan Schwartz]

  • Fixed timestamp bug in CVS module [Jørgen Fjeld]

  • Added -n/--dry-run switch, to display but not execute remote tasks [Paul Gross]


  • Fix gem dependencies so gem actually understands them [Jamis Buck]


  • Specify gem dependencies in rakefile [Jamis Buck]


  • Use Echoe to manage the Rakefile [Jamis Buck]

  • Let Net::SSH manage the default SSH port selection [Ben Lavender]

  • Changed capture() helper to not raise an exception on error, but to warn instead [Jeff Forcier]


  • Added :normalizeassettimestamps option to deployment, defaulting to true, which allows asset timestamping to be disabled [John Trupiano]

2.4.0 Preview Release #1 (2.3.101)

  • Only make deploy:start, deploy:stop, and deploy:restart try sudo as :runner. The other sudo-enabled tasks (deploy:setup, deploy:cleanup, etc.) will now use the :admin_runner user (which by default is unset). [Jamis Buck]

  • Make sure triggers defined as a block inherit the scope of the task they are attached to, instead of the task they were called from [Jamis Buck]

  • Make deploy:upload use the upload() helper for more efficient directory processing [Jamis Buck]

  • Make deploy:upload accept globs [Mark Imbriaco]

  • Make sure the host is reported with the output from scm_run [Jamis Buck]

  • Make git SCM honor the :scm_verbose option [Jamis Buck]

  • Don't follow symlinks when using :copy_cache [Jamis Buck]

  • If :mode is given to upload() helper, do a chmod after to set the mode [Jamis Buck]

  • Fix loadfromfile method for windows users [Neil Wilson]

  • Display a deprecation error if a remote git branch is specified [Tim Harper]

  • Fix deployment recipes to use the updated sudo helper [Jamis Buck]

  • Enhance the sudo helper so it can be used to return the command, instead of executing it [Jamis Buck]

  • Revert "make sudo helper play nicely with complex command chains", since it broke stuff [Jamis Buck]

  • Make set(:default_shell, false) work for not using a shell on a per-command basis [Ryan McGeary]

  • Improved test coverage [Ryan McGeary]

  • Fixed "coverage" take task [Ryan McGeary]

  • Use upload() instead of put() with the copy strategy [Jamis Buck]

  • Revert the "git fetch --tags" change, since it didn't work as expected [Jamis Buck]

  • Fix deploy:pending when using git SCM [Ryan McGeary]

  • Make sure deploy:check works with :none scm (which has no default command) [Jamis Buck]

  • Add debug switch for enabling conditional execution of commands [Mark Imbriaco]


  • Make deploy:setup obey the :usesudo and :runner directives, and generalize the :usesudo and :runner options into a try_sudo() helper method [Jamis Buck]

  • Make sudo helper play nicely with complex command chains [Jamis Buck]

  • Expand file-transfer options with new upload() and download() helpers. [Jamis Buck]

  • Allow SCP transfers in addition to SFTP. [Jamis Buck]

  • Use Net::SSH v2 and Net::SSH::Gateway. [Jamis Buck]

  • Added #export method for git SCM [Phillip Goldenburg]

  • For query_revision, git SCM used git-rev-parse on the repo hosting the Capfile, which may NOT be the same tree as the actual source reposistory. Use git-ls-remote instead to resolve the revision for checkout. [Robin H. Johnson]

  • Allow :ssh_options hash to be specified per server [Jesse Newland]

  • Added support for depend :remote, :file to test for existence of a specific file [Andrew Carter]

  • Ensure that the default run options are mixed into the command options when executing a command from the cap shell [Ken Collins]

  • Added :none SCM module for deploying a specific directory's contents [Jamis Buck]

  • Improved "copy" strategy supports local caching and pattern exclusion (via :copycache and :copyexclude variables) [Jamis Buck]


  • Fix git submodule support to init on sync [halorgium]

  • Add alternative server-centric role definition method [James Duncan Davidson]

  • Add support for password prompts from the Mercurial SCM [ches]

  • Distributed git support for better operability with remote_cache strategy [voidlock]

  • Use a default line length in help text if line length is otherwise too small [Jamis Buck]

  • Fix incorrect reference to the 'setup' task in task documentation [rajeshduggal]

  • Don't try to kill the spawner process on deploy:stop if no spawner process exists [Jamis Buck]

  • Dynamic roles (e.g. role(:app) { "" }) [dmasover]

  • Implement Bzr#next_revision so that pending changes can be reported correctly [casret]

  • Use a proper export command for bzr SCM [drudru]

  • Use checkout instead of merge for git SCM [nuttycom]

  • Fix typo in Subversion SCM module, encountered when an update fails [kemiller]

  • Fix documentation typo in upload.rb [evolving_jerk]

  • Added test case to show that the :scm_command is honored by the git SCM module [grempe]

  • Fail gracefully when double-colons are used to delimit namespaces [richie]

  • Add support for :gitenablesubmodules variable, to enable submodules with the git SCM [halorgium]

  • If subversion asks for a password, prompt as a last resort [Jamis Buck]

  • Use checkout --lightweight for bzr checkout, instead of branch [michiels]

  • Make sure bzr SCM works when revision is head (or unspecified) [michiels]

  • Support p4syncflags and p4clientroot variables for Perforce [gseidman]

  • Prepare for Net::SSH v2 by making sure Capistrano only tries to load Net::SSH versions less than 1.99.0 [Jamis Buck]


  • Default to 0664 instead of 0660 on upload [Jamis Buck]

  • Fix deploy:pending to query SCM for the subsequent revision so that it does not include the last deployed change [Jamis Buck]

  • Prefer 'Last Changed Rev' over 'Revision' when querying latest revision via Subversion [Jamis Buck]

  • Explicitly require 'stringio' in copy_test [mislav]

  • When Subversion#query_revision fails, give a more sane error [Jamis Buck]

  • Don't run the upgrade:revisions task on non-release servers [Jamis Buck]

  • Fix cap shell to properly recognize sudo prompt [Mark Imbriaco, barnaby, Jamis Buck]

  • Git SCM module [Garry Dolley, Geoffrey Grosenbach, Scott Chacon]

  • Use the --password switch for subversion by default, but add :scmpreferprompt variable (defaults to false) [Jamis Buck]

2.0.100 (2.1 Preview 1)

  • capify-generated Capfile will autoload all recipes from vendor/plugins//recipes/.rb [Graeme Mathieson]

  • Use sudo -p switch to set sudo password prompt to something predictable [Mike Bailey]

  • Allow independent configurations to require the same recipe file [Jamis Buck]

  • Set :shell to false to run a command without wrapping it in "sh -c" [Jamis Buck]

  • Don't request a pty by default [Jamis Buck]

  • Add a "match" remote dependency method [Adam Greene]

  • Allow auth-caching of subversion credentials to be enabled via :scmauthcache [tsmith]

  • Don't let a task trigger itself when used as the source for an "on" hook [Jamis Buck]

  • Avoid using the --password switch with subversion for security purposes [sentinel]

  • Add versiondir, currentdir, and shared_dir variables for naming the directories used in deployment [drinkingbird]

  • Use Windows-safe binary reads for reading file contents [Ladislav Martincik]

  • Add Accurev SCM support [Doug Barth]

  • Use the :runner variable to determine who to sudo as for deploy:restart [Graham Ashton]

  • Add Namespaces#top to always return a reference to the topmost namespace [Jamis Buck]

  • Change the "-h" output so that it does not say that "-q" is the default [Jamis Buck]


  • Make the "no matching servers" error more sane [halorgium]

  • Make sure the invoke task gives a sane error when the COMMAND value is omitted [halorgium]

  • Make sure variables are conditionally set in the deploy recipes, so as not to clobber values set elsewhere [Jamis Buck]

  • Fix "input stream is empty" errors from HighLine on prompt [Jamis Buck]

  • Added "synchronous_connect" setting to try and work around SFTP hangs for certain users [Jamis Buck]

  • Auto-require the SSH shell service, to avoid race conditions [Jamis Buck]

  • Add a millisecond sleep in upload to reduce CPU impact [Jamis Buck]

  • Allow the logger to be set via Configuration#logger= [Jamis Buck]

  • Allow $CAPISTRANO:HOST$ to be used in filenames to the put command [Jamis Buck]

  • Allow executeonservers to be called without a current task again [Jamis Buck]

  • Put $stdout in sync mode, so that Net::SSH prompts are displayed [Jamis Buck]

  • Make sure deploy:check aborts if it fails [Jamis Buck]

  • Spelling corrections in docs [Tim Carey-Smith, Giles Bowkett]

1.99.3 (2.0 Preview 4)

  • Don't break task descriptions on a period that appears in the middle of a sentence [Jamis Buck]

  • Added support for :on_error => :continue in task definitions, allowing tasks to effectively ignore connection and execution errors that occur as they run [Rob Holland]

  • Use correct parameters for Logger constructor in the SCM and Strategy base initializers [Jamis Buck]

  • Set LC_ALL=C before querying the revision, to make sure the output is in a predictable locale and can be parsed predictably [via Leandro Nunes dos Santos]

  • Add :copyremotedir variable for the :copy strategy, to indicate where the archive should be copied to on the remote servers [Jamis Buck]

  • Make the awk use in the dependencies code work with POSIX awk [mcornick]

  • Make variable accesses thread safe [via Adrian Danieli]

  • Make user input for yes/no prompts work correctly in the Mercurial module [Matthew Elder]

  • Better quoting of reserved characters in commands [Jamis Buck]

  • Make sure Net::SSH versions prior to 1.1.0 still work [Jamis Buck]

  • Allow the :hosts and :roles keys to accept lambdas, which will be evaluated lazily to allow runtime selection of hosts and roles in tasks [Jamis Buck]

  • Use which' to test whether a command exists in the remote path, instead oftest -p' [Jamis Buck]

  • Make sure the connection factory is established synchronously, to avoid multiple gateway instances being spawned [Jamis Buck]

  • Make sure symlink and finalize_update tasks reference the most recent release when called by themselves [Jamis Buck]

1.99.2 (2.0 Preview 3)

  • CVS SCM module [Brian Phillips]

  • Fix typo in Perforce SCM module [Chris Bailey]

  • ssh_options < server options when connecting [Jamis Buck]

  • Logger defaults to $stderr instead of STDERR [lhartley]

  • Use cp -RPp instead of -a in the remote cache strategy

  • Allow "empty" roles to be declared [Jamis Buck]

  • Mercurial SCM module [Tobias Luetke, Matthew Elder]

  • Invoke all commands via sh (customizable via :default_shell) [Jamis Buck]

  • Make sure all directories exist on each deploy which are necessary for subsequent commands to succeed, since some SCM's won't save empty directories [Matthew Elder]

  • Add :default_environment variable, which is applied to every command

1.99.1 (2.0 Preview 2)

  • Fix some documentation typos [eventualbuddha]

  • Don't retry failed connections if an explicit auth_methods list is given [Chris Farms]

  • Added support for load and exit callbacks, which get invoked when all recipes have been loaded and when all requested tasks have been executed [Jamis Buck]

  • Added support for start and finish callbacks, which get invoked when any task is called via the command-line [Jamis Buck]

  • Make `capify' understand simple command-line switches [Jamis Buck]

  • Make the server definition itself available to SSH channels, rather than just the host name [Jamis Buck]

  • Identify servers by their complete credentials in logs, rather than simply by hostname [Jamis Buck]

  • Uniquely identify servers based on hostname, port, and username, instead of merely on hostname [Jamis Buck]

  • Allow (e.g.) scmcommand and localscm_command to be set in the event of different paths to the scm command on local vs. remote hosts. [Jamis Buck]

  • Kill the "deploy:app" namespace and move those tasks into deploy, directly. [Jamis Buck]

  • Make sure 'desc' applies to the next defined task, in any namespace. [Jamis Buck]

  • Fix shell so that servers for a task are correctly discovered. [Jamis Buck]

  • Added before(), after(), and on() callback creation methods. [Jamis Buck]

  • Fix broken check! method for some deployment strategies. [Jamis Buck]

  • deploy:cold should also run migrations before starting the app [Jamis Buck]

  • Make the copy strategy check out to a temporary directory [Jamis Buck]

1.99.0 (2.0 Preview 1)

  • Add `capify' script to make it easier to prepare a project for deployment using cap [Jamis Buck]

  • Make sure the sudo helper understands the SuSE dialect of the sudo password prompt [Steven Wisener]

  • Fix synchronization issue with Gateway initialization [Doug Barth]

  • Added opt-in "compat" and "upgrade" recipes for tasks to aid in the upgrade process to Capistrano 2 [Jamis Buck]

  • The deployment recipes are now opt-in. Just do 'load "deploy"' in your recipe script. [Jamis Buck]

  • Added $CAPISTRANO:HOST$ placeholder in commands, which will be replaced with the name of the host on which the command is executing [Jamis Buck]

  • Added -e switch to explain specific task. Added -X to extend -x. Made -h much briefer. Added -T to list known tasks. [Jamis Buck]

  • Added namespaces for tasks [Jamis Buck]

  • Merged the Configuration and Actor classes, performed various other massive refactorings of the code [Jamis Buck]


  • Use the no-auth-cache option with subversion so that username/password tokens do not get cached by capistrano usage [jonathan]

  • Deprecated upper-cased variables [Jamis Buck]

  • Make sure Actor#get does not close the SFTP channel (so subsequent SFTP operations work) [Dov Murik]

  • Add :env option to 'run' (and friends) so that you can specify environment variables to be injected into the new process' environment [Mathieu Lajugie]


  • Use the auth info for subversion more consistently [Jamis Buck]

  • Add a "capture" helper, for capturing the stdout of a remote command and returning it as a string [Jamis Buck]

  • Add a "get" helper, to pull a file from a remote server to the localhost [bmihelac]

  • Fix gateway to actually increment local_port if a port is in use, so that multiple capistrano instances can run at the same time [Mark Imbriaco]

  • Refactor the permissions tweaking in update_code to a separate task so that people on shared hosts can override it as necessary [jaw6]

  • Set umask during the setup task, so that intermediate directories are created with the proper permissions [NeilW]

  • Removed -c/--caprc switch, since the new load order renders it meaningless (just use -f now) [Mike Bailey]

  • Make sure the standard recipe loads first, so that .caprc and friends can override what it defines. [Mike Bailey]

  • Add support for a system-wide capistrano config file [Mike Bailey]

  • Make cold_deploy call update instead of deploy (to avoid invoking the restart task).

  • Make the touch command run by update_code set the TZ to UTC, for consistent setting of asset timestamps. [NeilW]

  • Fix off-by-one bug in show_tasks width-computation [NeilW]


  • Fix connection problems when using gateways [Ezra Zygmuntowicz]


  • Deprecate rake integration in favor of invoking `cap' directly [Jamis Buck]

  • Make sure the CVS module references the repository explicitly in cvs_log

  • Remove trace messages when loading a file [Jamis Buck]

  • Cleaner error messages for authentication failures and command errors [Jamis Buck]

  • Added support for ~/.caprc, also -x and -c switches. [Jamis Buck]

  • Updated migrate action to use db:migrate task in Rails instead of the deprecated migrate task [DHH]

  • Allow SSH user and port to be encoded in the hostname strings [Ezra Zygmuntowicz]

  • Fixed that new checkouts were not group-writable [DHH, Jamis Buck]

  • Fixed that cap setup would use 755 on the deploy_to and shared directory roots instead of 775 [DHH]

  • Don't run the cleanup task on servers marked no_release [Jamis Buck]

  • Fix typo in defaultioproc so it correctly checks the stream parameter to see if it is the error stream [Stephen Haberman]

  • Make sure assets in images, javascripts, and stylesheets are touched after updating the code, to ensure the asset timestamping feature of rails works correctly [Jamis Buck]

  • Added warning if password is prompted for and termios is not installed [John Labovitz]

  • Added :as option to sudo, so you can specify who the command is executed as [Mark Imbriaco]


  • Add experimental 'shell' task [Jamis Buck]

  • Display file for external configurations, rather than inspected proc. [Jamis Buck]

  • Connect to multiple servers in parallel, rather than serially. [Jamis Buck]

  • Add SCM module for Mercurial (closes #4150) [Matthew Elder]

  • Remove unused line in SCM::Base (closes #5619)

  • More efficient "svn log" usage (closes #5620) [Anatol Pomozov]

  • Better support for key passphrases in the SVN module (closes #5920)

  • Fix missing default for :local in cvs.rb (closes #3645)

  • Fix awkward spacing in gemspec file (closes #3888)

  • Add support for :sudo variable to specify path to sudo (closes #4578)

  • Make previous_release return nil if there are no previous releases (closes #4959)

  • Uncache releases list after update_code is called so that newly released dir is included (closes #3766) [Jamis Buck]

  • Allow the subversion scm to accept HTTPS certificates (closes #4792) [Jamis Buck]

  • Make sure rollbacks occur within the scope of the task that triggered them [Jamis Buck]

  • Fixed the default recipe to work with setups that haven't yet gone pids [DHH]

  • Symlink and setup for shared/pids to tmp/pids [DHH]

  • Fix some incorrect usage text (closes #4507)

  • Added Actor#stream method that makes it easy to create cross-server streams [DHH]. Example:

    desc "Run a tail on multiple log files at the same time" task :tail fcgi, :roles => :app do stream "tail -f #{shared path}/log/fastcgi.crash.log" end

  • Make update_code and symlink a macro task under the name "update" for easy of deploy to servers that does not run fcgis [DHH]

  • Changed setup, updatecode, rollbackcode, and symlink to work on all servers instead of only those in the :app, :web, and :db roles. A server can opt out of being part of the release deployment by setting :no_release => true [DHH]

  • Added support for :except on task declarations as the opposite of :only [DHH]. Example:

    role :app, "" role :file, "", :no_release => true

    task :symlink, :except => { :no release => true } do on rollback { run "ln -nfs #{previousrelease} #{currentpath}" } run "ln -nfs #{currentrelease} #{currentpath}" end

    cap symlink # will not run on

  • Deprecate the -r/--recipe switch in favor of -f/--file (for more make/rake-like semantics) [Jamis Buck]

  • Fix gemspec to include a dependency on rake 0.7 [Jamis Buck]

  • Added respect for ENV["HOSTS"] that'll be used instead of the roles specified in the task definition [DHH]. Example:

    HOSTS= cap setup # one-off setup for that server, doesn't need to be prespecified in the recipes file

  • Added respect for ENV["ROLES"] that'll be used instead of the roles specified in the task definition [DHH]. Example:

    task :setup, :roles => [ :app, :web, :db ] # normally this would run every where end

    ROLES=app cap setup # this will only run for the app role, overwritting the default declaration

  • Added :hosts option to task definition that allows you to specify cross-cutting tasks [DHH]. Example:

    task :setup, :hosts => [ "", "" ] do # this task will happen on 06 and 01 regardless of which roles they belong to end

  • Fix operator precedence problem in script for touching the revisions.log #3223


  • Simplify the generated capistrano.rake file, and make it easier to customize

  • Use rake-like command-line semantics ("cap deploy", in addition to "cap -a deploy")

  • Rename to capistrano

  • Make the generated capistrano.rake file use rake namespaces, and include all default tasks

  • Look for config/deploy.rb, capfile, and Capfile by default


  • Fix broken switchtower_invoke function in switchtower.rake (missing require statement)


  • Make CVS module's :local value default to "."

  • Add "invoke" task for executing one-off commands

  • Make port selection smarter for gateway connections

  • Add extension mechanism for custom ST operations and third-party task libraries

  • Make ST rails rake tasks more configurable

  • Add Actor#current_task and simplify Task#servers

  • Add Actor#connect! method for working around lazy connection establishing

  • Make sure IO::TRUNC is specified for Net::SFTP uploads (#3510)

  • Add branch support to CVS (#3596)

  • Add bazaar-ng SCM module [Damien Merenne]

  • Add optional :svnusername and :svnpassword variables

  • Allow Proc-valued variables to be set more conveniently (set(:foo) { "bar" })

  • Add perforce SCM module [Richard McMahon]

  • Add bazaar (v1) SCM module [Edd Dumbill] (#3533)

  • Fix stftime format string used in CVS module to be Windows-compatible (fixes #3383)

  • Add an better error when a task is run and no servers match the required conditions

  • Add default spinner and colddeploy tasks, and spinneruser variable

  • Changed restartvia variable to (boolean) usesudo

  • Only chmod when the revisions.log file is first created

  • Make UPPERCASE variables work

  • Added railsenv variable (defaults to production) for use by tasks that employ the RAILSENV environment variable

  • Added Actor.defaultioproc

  • Set :actor key on SSH channel instances


  • Handle ssh password prompts like "someone's password:"

  • Make CLI#echo available as a class method.

  • Add CLI#with_echo.

  • Make the default password prompt available as a class method.

Add documentation for the CLI class.

  • Add a sanity check to make sure the correct versions of Net::SSH and Net::SFTP are installed.

  • Added a cleanup task to remove unused releases from the deployment directory

  • Allow password to be reentered on sudo if it was entered incorrectly

  • Use && as the command separator for the checkouts, so that errors are caught early.

  • Ping each SSH connection every 1s during command processing so that long-running commands don't cause the connection to timeout.

  • Add a 0.01s sleep during the command loop so that the CPU doesn't go ballistic while ST is doing its thing.

  • Add :restart_via variable for specifying whether restart ought to use :sudo (default, use sudo)

  • Use SFTP for file transfers (if available).

  • Add an "update_current" task that will do an svn up on the current release

  • Use the :checkout variable to determine what operation to use for svn checkouts (instead of co, like "export").

  • The Rails rake tasks now load ST directly, instead of invoking it via system

  • Added ssh_options variable to configure the SSH connection parameters #2734

  • Require Net::SSH 1.0.5


  • Use process reaper instead of custom reap script for restarting

  • Use -S switch to set variables before reading recipe files #2242

  • Have setup.rb create a switchtower.cmd file on Win32 platforms #2402

  • Add difffromlast_deploy to the rails switchtower rakefile template

  • Add difffromlast_deploy task (currently only works with subversion)

  • Add deploywithmigrations task.

  • Make the migrate task more customizable.

  • If no password is given with the -p switch, prompt for password immediately.

  • Do not install a switchtower stub in the script directory. Assume the switchtower executable is in the path.

  • Remove trailing newlines from commands to prevent trailing backslash #2141

  • Default parameters work correctly with the generator #2218 [Scott Barron]

  • Attempt to require 'rubygems' explicitly when running the switchtower utility #2134

  • Make default tasks work only on app/db/web roles, so that additional roles may be created for boxes with specific needs without needing to (for instance) deploy the app to those boxes

  • Default the application name to "Application" when using --apply-to

  • Show the help screen instead of an error when no arguments are given

  • Make SwitchTower easier to invoke programmatically via SwitchTower::CLI

  • Specify the revision to release via the :revision variable (defaults to latest revision)

  • Allow variables to be set via the cli using the -s switch

  • Log checkouts to a "revisions.log" file

  • Changed behavior of checkout to use the timestamp as the release name, instead of the revision number

  • Added CVS module (very very experimental!)

  • Works with public keys now, for passwordless deployment

  • Subversion module recognizes the password prompt for HTTP authentication

  • Preserve +x on scripts when using darcs #1929 [Scott Barron]

  • When executing multiline commands, use a backslash to escape the newline