<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -23,6 +23,7 @@ module Capistrano
       def execute!
         config = instantiate_configuration
         config.debug = options[:debug]
+        config.dry_run = options[:dry_run]
         config.logger.level = options[:verbose]
 
         set_pre_vars(config)</diff>
      <filename>lib/capistrano/cli/execute.rb</filename>
    </modified>
    <modified>
      <diff>@@ -31,6 +31,10 @@ module Capistrano
             &quot;Prompts before each remote command execution.&quot;
           ) { |value| options[:debug] = true }
 
+          opts.on(&quot;-n&quot;, &quot;--dry-run&quot;,
+            &quot;Prints out commands without running them.&quot;
+          ) { |value| options[:dry_run] = true }
+
           opts.on(&quot;-e&quot;, &quot;--explain TASK&quot;,
             &quot;Displays help (if available) for the task.&quot;
           ) { |value| options[:explain] = value }</diff>
      <filename>lib/capistrano/cli/options.rb</filename>
    </modified>
    <modified>
      <diff>@@ -19,10 +19,11 @@ module Capistrano
   # define roles, and set configuration variables.
   class Configuration
     # The logger instance defined for this configuration.
-    attr_accessor :debug, :logger
+    attr_accessor :debug, :logger, :dry_run
 
     def initialize #:nodoc:
       @debug = false
+      @dry_run = false
       @logger = Logger.new
     end
 </diff>
      <filename>lib/capistrano/configuration.rb</filename>
    </modified>
    <modified>
      <diff>@@ -46,7 +46,7 @@ module Capistrano
           block ||= self.class.default_io_proc
           logger.debug &quot;executing #{cmd.strip.inspect}&quot;
 
-          return if debug &amp;&amp; continue_execution(cmd) == false
+          return if dry_run || (debug &amp;&amp; continue_execution(cmd) == false)
 
           options = add_default_command_options(options)
 </diff>
      <filename>lib/capistrano/configuration/actions/invocation.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,7 +15,7 @@ class CLIExecuteTest &lt; Test::Unit::TestCase
   def setup
     @cli = MockCLI.new
     @logger = stub_everything
-    @config = stub(:logger =&gt; @logger, :debug= =&gt; nil)
+    @config = stub(:logger =&gt; @logger, :debug= =&gt; nil, :dry_run= =&gt; nil)
     @config.stubs(:set)
     @config.stubs(:load)
     @config.stubs(:trigger)</diff>
      <filename>test/cli/execute_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -30,6 +30,18 @@ class CLIOptionsTest &lt; Test::Unit::TestCase
     assert @cli.options[:debug]
   end
 
+  def test_parse_options_with_n_should_set_dry_run_option
+    @cli.args &lt;&lt; &quot;-n&quot;
+    @cli.parse_options!
+    assert @cli.options[:dry_run]
+  end
+
+  def test_parse_options_with_dry_run_should_set_dry_run_option
+    @cli.args &lt;&lt; &quot;--dry-run&quot;
+    @cli.parse_options!
+    assert @cli.options[:dry_run]
+  end
+
   def test_parse_options_with_e_should_set_explain_option
     @cli.args &lt;&lt; &quot;-e&quot; &lt;&lt; &quot;sample&quot;
     @cli.parse_options!</diff>
      <filename>test/cli/options_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,6 +5,7 @@ class ConfigurationActionsInvocationTest &lt; Test::Unit::TestCase
   class MockConfig
     attr_reader :options
     attr_accessor :debug
+    attr_accessor :dry_run
 
     def initialize
       @options = {}
@@ -40,6 +41,12 @@ class ConfigurationActionsInvocationTest &lt; Test::Unit::TestCase
     @config.run &quot;ls&quot;, :foo =&gt; &quot;bar&quot;
   end
 
+  def test_run_will_return_if_dry_run
+    @config.expects(:dry_run).returns(true)
+    @config.expects(:execute_on_servers).never
+    @config.run &quot;ls&quot;, :foo =&gt; &quot;bar&quot;
+  end
+
   def test_run_without_block_should_use_default_io_proc
     @config.expects(:execute_on_servers).yields(%w(s1 s2 s3).map { |s| server(s) })
     @config.expects(:sessions).returns(Hash.new { |h,k| h[k] = k.host.to_sym }).times(3)</diff>
      <filename>test/configuration/actions/invocation_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>ad0a1c2c8bb4d481f59ce15267db1d9765f81554</id>
    </parent>
  </parents>
  <author>
    <name>Paul Gross</name>
    <email>pgross@gmail.com</email>
  </author>
  <url>http://github.com/jamis/capistrano/commit/7279a3858e2bcebe84735223d5f8b4397c4ad85b</url>
  <id>7279a3858e2bcebe84735223d5f8b4397c4ad85b</id>
  <committed-date>2008-07-19T15:18:05-07:00</committed-date>
  <authored-date>2008-07-19T15:18:05-07:00</authored-date>
  <message>Added a dry-run option to see what commands will be run without actually running them</message>
  <tree>acb1afe9bf0c12fbe29d72a52c47f1bac94f935f</tree>
  <committer>
    <name>Paul Gross</name>
    <email>pgross@gmail.com</email>
  </committer>
</commit>
