capistrano-edge 2.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.rdoc +770 -0
- data/Manifest +104 -0
- data/README.rdoc +66 -0
- data/Rakefile +35 -0
- data/bin/cap +4 -0
- data/bin/capify +95 -0
- data/capistrano.gemspec +51 -0
- data/examples/sample.rb +14 -0
- data/lib/capistrano.rb +2 -0
- data/lib/capistrano/callback.rb +45 -0
- data/lib/capistrano/cli.rb +47 -0
- data/lib/capistrano/cli/execute.rb +84 -0
- data/lib/capistrano/cli/help.rb +125 -0
- data/lib/capistrano/cli/help.txt +75 -0
- data/lib/capistrano/cli/options.rb +224 -0
- data/lib/capistrano/cli/ui.rb +40 -0
- data/lib/capistrano/command.rb +283 -0
- data/lib/capistrano/configuration.rb +43 -0
- data/lib/capistrano/configuration/actions/file_transfer.rb +47 -0
- data/lib/capistrano/configuration/actions/inspect.rb +46 -0
- data/lib/capistrano/configuration/actions/invocation.rb +293 -0
- data/lib/capistrano/configuration/callbacks.rb +148 -0
- data/lib/capistrano/configuration/connections.rb +204 -0
- data/lib/capistrano/configuration/execution.rb +143 -0
- data/lib/capistrano/configuration/loading.rb +197 -0
- data/lib/capistrano/configuration/namespaces.rb +197 -0
- data/lib/capistrano/configuration/roles.rb +73 -0
- data/lib/capistrano/configuration/servers.rb +85 -0
- data/lib/capistrano/configuration/variables.rb +127 -0
- data/lib/capistrano/errors.rb +15 -0
- data/lib/capistrano/extensions.rb +57 -0
- data/lib/capistrano/logger.rb +59 -0
- data/lib/capistrano/processable.rb +53 -0
- data/lib/capistrano/recipes/compat.rb +32 -0
- data/lib/capistrano/recipes/deploy.rb +438 -0
- data/lib/capistrano/recipes/deploy/dependencies.rb +44 -0
- data/lib/capistrano/recipes/deploy/local_dependency.rb +54 -0
- data/lib/capistrano/recipes/deploy/remote_dependency.rb +105 -0
- data/lib/capistrano/recipes/deploy/scm.rb +19 -0
- data/lib/capistrano/recipes/deploy/scm/accurev.rb +169 -0
- data/lib/capistrano/recipes/deploy/scm/base.rb +196 -0
- data/lib/capistrano/recipes/deploy/scm/bzr.rb +83 -0
- data/lib/capistrano/recipes/deploy/scm/cvs.rb +152 -0
- data/lib/capistrano/recipes/deploy/scm/darcs.rb +85 -0
- data/lib/capistrano/recipes/deploy/scm/git.rb +274 -0
- data/lib/capistrano/recipes/deploy/scm/mercurial.rb +137 -0
- data/lib/capistrano/recipes/deploy/scm/none.rb +44 -0
- data/lib/capistrano/recipes/deploy/scm/perforce.rb +138 -0
- data/lib/capistrano/recipes/deploy/scm/subversion.rb +121 -0
- data/lib/capistrano/recipes/deploy/strategy.rb +19 -0
- data/lib/capistrano/recipes/deploy/strategy/base.rb +79 -0
- data/lib/capistrano/recipes/deploy/strategy/checkout.rb +20 -0
- data/lib/capistrano/recipes/deploy/strategy/copy.rb +210 -0
- data/lib/capistrano/recipes/deploy/strategy/export.rb +20 -0
- data/lib/capistrano/recipes/deploy/strategy/remote.rb +52 -0
- data/lib/capistrano/recipes/deploy/strategy/remote_cache.rb +56 -0
- data/lib/capistrano/recipes/deploy/templates/maintenance.rhtml +53 -0
- data/lib/capistrano/recipes/ext/rails-database-migrations.rb +50 -0
- data/lib/capistrano/recipes/ext/web-disable-enable.rb +40 -0
- data/lib/capistrano/recipes/standard.rb +37 -0
- data/lib/capistrano/recipes/templates/maintenance.rhtml +53 -0
- data/lib/capistrano/recipes/upgrade.rb +33 -0
- data/lib/capistrano/role.rb +102 -0
- data/lib/capistrano/server_definition.rb +56 -0
- data/lib/capistrano/shell.rb +260 -0
- data/lib/capistrano/ssh.rb +99 -0
- data/lib/capistrano/task_definition.rb +70 -0
- data/lib/capistrano/transfer.rb +216 -0
- data/lib/capistrano/version.rb +18 -0
- data/setup.rb +1346 -0
- data/test/cli/execute_test.rb +132 -0
- data/test/cli/help_test.rb +165 -0
- data/test/cli/options_test.rb +317 -0
- data/test/cli/ui_test.rb +28 -0
- data/test/cli_test.rb +17 -0
- data/test/command_test.rb +286 -0
- data/test/configuration/actions/file_transfer_test.rb +61 -0
- data/test/configuration/actions/inspect_test.rb +65 -0
- data/test/configuration/actions/invocation_test.rb +224 -0
- data/test/configuration/callbacks_test.rb +220 -0
- data/test/configuration/connections_test.rb +349 -0
- data/test/configuration/execution_test.rb +175 -0
- data/test/configuration/loading_test.rb +132 -0
- data/test/configuration/namespace_dsl_test.rb +311 -0
- data/test/configuration/roles_test.rb +144 -0
- data/test/configuration/servers_test.rb +121 -0
- data/test/configuration/variables_test.rb +184 -0
- data/test/configuration_test.rb +88 -0
- data/test/deploy/local_dependency_test.rb +76 -0
- data/test/deploy/remote_dependency_test.rb +114 -0
- data/test/deploy/scm/accurev_test.rb +23 -0
- data/test/deploy/scm/base_test.rb +55 -0
- data/test/deploy/scm/git_test.rb +184 -0
- data/test/deploy/scm/mercurial_test.rb +129 -0
- data/test/deploy/scm/none_test.rb +35 -0
- data/test/deploy/strategy/copy_test.rb +258 -0
- data/test/extensions_test.rb +69 -0
- data/test/fixtures/cli_integration.rb +5 -0
- data/test/fixtures/config.rb +5 -0
- data/test/fixtures/custom.rb +3 -0
- data/test/logger_test.rb +123 -0
- data/test/role_test.rb +11 -0
- data/test/server_definition_test.rb +121 -0
- data/test/shell_test.rb +90 -0
- data/test/ssh_test.rb +104 -0
- data/test/task_definition_test.rb +101 -0
- data/test/transfer_test.rb +160 -0
- data/test/utils.rb +38 -0
- metadata +321 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require "utils"
|
|
2
|
+
require 'capistrano/configuration'
|
|
3
|
+
|
|
4
|
+
# These tests are only for testing the integration of the various components
|
|
5
|
+
# of the Configuration class. To test specific features, please look at the
|
|
6
|
+
# tests under test/configuration.
|
|
7
|
+
|
|
8
|
+
class ConfigurationTest < Test::Unit::TestCase
|
|
9
|
+
def setup
|
|
10
|
+
@config = Capistrano::Configuration.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_connections_execution_loading_namespaces_roles_and_variables_modules_should_integrate_correctly
|
|
14
|
+
Capistrano::SSH.expects(:connect).with { |s,c| s.host == "www.capistrano.test" && c == @config }.returns(:session)
|
|
15
|
+
|
|
16
|
+
process_args = Proc.new do |tree, session, opts|
|
|
17
|
+
tree.fallback.command == "echo 'hello world'" &&
|
|
18
|
+
session == [:session] &&
|
|
19
|
+
opts == { :logger => @config.logger }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
Capistrano::Command.expects(:process).with(&process_args)
|
|
23
|
+
|
|
24
|
+
@config.load do
|
|
25
|
+
role :test, "www.capistrano.test"
|
|
26
|
+
set :message, "hello world"
|
|
27
|
+
namespace :testing do
|
|
28
|
+
task :example, :roles => :test do
|
|
29
|
+
run "echo '#{message}'"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
@config.testing.example
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_tasks_in_nested_namespace_should_be_able_to_call_tasks_in_same_namespace
|
|
38
|
+
@config.namespace(:outer) do
|
|
39
|
+
task(:first) { set :called_first, true }
|
|
40
|
+
namespace(:inner) do
|
|
41
|
+
task(:first) { set :called_inner_first, true }
|
|
42
|
+
task(:second) { first }
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
@config.outer.inner.second
|
|
47
|
+
assert !@config[:called_first]
|
|
48
|
+
assert @config[:called_inner_first]
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_tasks_in_nested_namespace_should_be_able_to_call_tasks_in_parent_namespace
|
|
52
|
+
@config.namespace(:outer) do
|
|
53
|
+
task(:first) { set :called_first, true }
|
|
54
|
+
namespace(:inner) do
|
|
55
|
+
task(:second) { first }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
@config.outer.inner.second
|
|
60
|
+
assert @config[:called_first]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_tasks_in_nested_namespace_should_be_able_to_call_shadowed_tasks_in_parent_namespace
|
|
64
|
+
@config.namespace(:outer) do
|
|
65
|
+
task(:first) { set :called_first, true }
|
|
66
|
+
namespace(:inner) do
|
|
67
|
+
task(:first) { set :called_inner_first, true }
|
|
68
|
+
task(:second) { parent.first }
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
@config.outer.inner.second
|
|
73
|
+
assert @config[:called_first]
|
|
74
|
+
assert !@config[:called_inner_first]
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def test_hooks_for_default_task_should_be_found_if_named_after_the_namespace
|
|
78
|
+
@config.namespace(:outer) do
|
|
79
|
+
task(:default) { set :called_default, true }
|
|
80
|
+
task(:before_outer) { set :called_before_outer, true }
|
|
81
|
+
task(:after_outer) { set :called_after_outer, true }
|
|
82
|
+
end
|
|
83
|
+
@config.outer.default
|
|
84
|
+
assert @config[:called_before_outer]
|
|
85
|
+
assert @config[:called_default]
|
|
86
|
+
assert @config[:called_after_outer]
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require "utils"
|
|
2
|
+
require 'capistrano/recipes/deploy/local_dependency'
|
|
3
|
+
|
|
4
|
+
class LocalDependencyTest < Test::Unit::TestCase
|
|
5
|
+
def setup
|
|
6
|
+
@config = { }
|
|
7
|
+
@dependency = Capistrano::Deploy::LocalDependency.new(@config)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_should_use_standard_error_message
|
|
11
|
+
setup_for_one_path_entry(false)
|
|
12
|
+
@dependency.command("cat")
|
|
13
|
+
assert_equal "`cat' could not be found in the path on the local host", @dependency.message
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_should_use_alternative_message_if_provided
|
|
17
|
+
setup_for_one_path_entry(false)
|
|
18
|
+
@dependency.command("cat").or("Sorry")
|
|
19
|
+
assert_equal "Sorry", @dependency.message
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_env_with_no_path_should_never_find_command
|
|
23
|
+
ENV.expects(:[]).with("PATH").returns(nil)
|
|
24
|
+
assert !@dependency.command("cat").pass?
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_env_with_one_path_entry_should_fail_if_command_not_found
|
|
28
|
+
setup_for_one_path_entry(false)
|
|
29
|
+
assert !@dependency.command("cat").pass?
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_env_with_one_path_entry_should_pass_if_command_found
|
|
33
|
+
setup_for_one_path_entry(true)
|
|
34
|
+
assert @dependency.command("cat").pass?
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_env_with_three_path_entries_should_fail_if_command_not_found
|
|
38
|
+
setup_for_three_path_entries(false)
|
|
39
|
+
assert !@dependency.command("cat").pass?
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_env_with_three_path_entries_should_pass_if_command_found
|
|
43
|
+
setup_for_three_path_entries(true)
|
|
44
|
+
assert @dependency.command("cat").pass?
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_env_with_one_path_entry_on_windows_should_pass_if_command_found_with_extension
|
|
48
|
+
setup_for_one_path_entry_on_windows(true)
|
|
49
|
+
assert @dependency.command("cat").pass?
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
private
|
|
53
|
+
|
|
54
|
+
def setup_for_one_path_entry(command_found)
|
|
55
|
+
Capistrano::Deploy::LocalDependency.expects(:on_windows?).returns(false)
|
|
56
|
+
ENV.expects(:[]).with("PATH").returns("/bin")
|
|
57
|
+
File.expects(:executable?).with("/bin/cat").returns(command_found)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def setup_for_three_path_entries(command_found)
|
|
61
|
+
Capistrano::Deploy::LocalDependency.expects(:on_windows?).returns(false)
|
|
62
|
+
path = %w(/bin /usr/bin /usr/local/bin).join(File::PATH_SEPARATOR)
|
|
63
|
+
ENV.expects(:[]).with("PATH").returns(path)
|
|
64
|
+
File.expects(:executable?).with("/usr/bin/cat").returns(command_found)
|
|
65
|
+
File.expects(:executable?).at_most(1).with("/bin/cat").returns(false)
|
|
66
|
+
File.expects(:executable?).at_most(1).with("/usr/local/bin/cat").returns(false)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def setup_for_one_path_entry_on_windows(command_found)
|
|
70
|
+
Capistrano::Deploy::LocalDependency.expects(:on_windows?).returns(true)
|
|
71
|
+
ENV.expects(:[]).with("PATH").returns("/cygwin/bin")
|
|
72
|
+
File.stubs(:executable?).returns(false)
|
|
73
|
+
first_executable_extension = Capistrano::Deploy::LocalDependency.windows_executable_extensions.first
|
|
74
|
+
File.expects(:executable?).with("/cygwin/bin/cat#{first_executable_extension}").returns(command_found)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
require "utils"
|
|
2
|
+
require 'capistrano/recipes/deploy/remote_dependency'
|
|
3
|
+
|
|
4
|
+
class RemoteDependencyTest < Test::Unit::TestCase
|
|
5
|
+
def setup
|
|
6
|
+
@config = { }
|
|
7
|
+
@dependency = Capistrano::Deploy::RemoteDependency.new(@config)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_should_use_standard_error_message_for_directory
|
|
11
|
+
setup_for_a_configuration_run("test -d /data", false)
|
|
12
|
+
@dependency.directory("/data")
|
|
13
|
+
assert_equal "`/data' is not a directory (host)", @dependency.message
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_should_use_standard_error_message_for_file
|
|
17
|
+
setup_for_a_configuration_run("test -f /data/foo.txt", false)
|
|
18
|
+
@dependency.file("/data/foo.txt")
|
|
19
|
+
assert_equal "`/data/foo.txt' is not a file (host)", @dependency.message
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_should_use_standard_error_message_for_writable
|
|
23
|
+
setup_for_a_configuration_run("test -w /data/foo.txt", false)
|
|
24
|
+
@dependency.writable("/data/foo.txt")
|
|
25
|
+
assert_equal "`/data/foo.txt' is not writable (host)", @dependency.message
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_should_use_standard_error_message_for_command
|
|
29
|
+
setup_for_a_configuration_run("which cat", false)
|
|
30
|
+
@dependency.command("cat")
|
|
31
|
+
assert_equal "`cat' could not be found in the path (host)", @dependency.message
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_should_use_standard_error_message_for_gem
|
|
35
|
+
setup_for_a_configuration_gem_run("capistrano", "9.9", false)
|
|
36
|
+
@dependency.gem("capistrano", 9.9)
|
|
37
|
+
assert_equal "gem `capistrano' 9.9 could not be found (host)", @dependency.message
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_should_fail_if_directory_not_found
|
|
41
|
+
setup_for_a_configuration_run("test -d /data", false)
|
|
42
|
+
assert !@dependency.directory("/data").pass?
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_should_pass_if_directory_found
|
|
46
|
+
setup_for_a_configuration_run("test -d /data", true)
|
|
47
|
+
assert @dependency.directory("/data").pass?
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_should_fail_if_file_not_found
|
|
51
|
+
setup_for_a_configuration_run("test -f /data/foo.txt", false)
|
|
52
|
+
assert !@dependency.file("/data/foo.txt").pass?
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_should_pas_if_file_found
|
|
56
|
+
setup_for_a_configuration_run("test -f /data/foo.txt", true)
|
|
57
|
+
assert @dependency.file("/data/foo.txt").pass?
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_should_fail_if_writable_not_found
|
|
61
|
+
setup_for_a_configuration_run("test -w /data/foo.txt", false)
|
|
62
|
+
assert !@dependency.writable("/data/foo.txt").pass?
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def test_should_pass_if_writable_found
|
|
66
|
+
setup_for_a_configuration_run("test -w /data/foo.txt", true)
|
|
67
|
+
assert @dependency.writable("/data/foo.txt").pass?
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_should_fail_if_command_not_found
|
|
71
|
+
setup_for_a_configuration_run("which cat", false)
|
|
72
|
+
assert !@dependency.command("cat").pass?
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_should_pass_if_command_found
|
|
76
|
+
setup_for_a_configuration_run("which cat", true)
|
|
77
|
+
assert @dependency.command("cat").pass?
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_should_fail_if_gem_not_found
|
|
81
|
+
setup_for_a_configuration_gem_run("capistrano", "9.9", false)
|
|
82
|
+
assert !@dependency.gem("capistrano", 9.9).pass?
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def test_should_pass_if_gem_found
|
|
86
|
+
setup_for_a_configuration_gem_run("capistrano", "9.9", true)
|
|
87
|
+
assert @dependency.gem("capistrano", 9.9).pass?
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def test_should_use_alternative_message_if_provided
|
|
91
|
+
setup_for_a_configuration_run("which cat", false)
|
|
92
|
+
@dependency.command("cat").or("Sorry")
|
|
93
|
+
assert_equal "Sorry (host)", @dependency.message
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
private
|
|
97
|
+
|
|
98
|
+
def setup_for_a_configuration_run(command, passing)
|
|
99
|
+
expectation = @config.expects(:invoke_command).with(command, {})
|
|
100
|
+
if passing
|
|
101
|
+
expectation.returns(true)
|
|
102
|
+
else
|
|
103
|
+
error = Capistrano::CommandError.new
|
|
104
|
+
error.expects(:hosts).returns(["host"])
|
|
105
|
+
expectation.raises(error)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def setup_for_a_configuration_gem_run(name, version, passing)
|
|
110
|
+
@config.expects(:fetch).with(:gem_command, "gem").returns("gem")
|
|
111
|
+
find_gem_cmd = "gem specification --version '#{version}' #{name} 2>&1 | awk 'BEGIN { s = 0 } /^name:/ { s = 1; exit }; END { if(s == 0) exit 1 }'"
|
|
112
|
+
setup_for_a_configuration_run(find_gem_cmd, passing)
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require "utils"
|
|
2
|
+
require 'capistrano/recipes/deploy/scm/accurev'
|
|
3
|
+
|
|
4
|
+
class AccurevTest < Test::Unit::TestCase
|
|
5
|
+
include Capistrano::Deploy::SCM
|
|
6
|
+
|
|
7
|
+
def test_internal_revision_to_s
|
|
8
|
+
assert_equal 'foo/1', Accurev::InternalRevision.new('foo', 1).to_s
|
|
9
|
+
assert_equal 'foo/highest', Accurev::InternalRevision.new('foo', 'highest').to_s
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_internal_revision_parse
|
|
13
|
+
revision = Accurev::InternalRevision.parse('foo')
|
|
14
|
+
assert_equal 'foo', revision.stream
|
|
15
|
+
assert_equal 'highest', revision.transaction_id
|
|
16
|
+
assert_equal 'foo/highest', revision.to_s
|
|
17
|
+
|
|
18
|
+
revision = Accurev::InternalRevision.parse('foo/1')
|
|
19
|
+
assert_equal 'foo', revision.stream
|
|
20
|
+
assert_equal '1', revision.transaction_id
|
|
21
|
+
assert_equal 'foo/1', revision.to_s
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require "utils"
|
|
2
|
+
require 'capistrano/recipes/deploy/scm/base'
|
|
3
|
+
|
|
4
|
+
class DeploySCMBaseTest < Test::Unit::TestCase
|
|
5
|
+
class TestSCM < Capistrano::Deploy::SCM::Base
|
|
6
|
+
default_command "floopy"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def setup
|
|
10
|
+
@config = { }
|
|
11
|
+
def @config.exists?(name); key?(name); end
|
|
12
|
+
|
|
13
|
+
@source = TestSCM.new(@config)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_command_should_default_to_default_command
|
|
17
|
+
assert_equal "floopy", @source.command
|
|
18
|
+
@source.local { assert_equal "floopy", @source.command }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_command_should_use_scm_command_if_available
|
|
22
|
+
@config[:scm_command] = "/opt/local/bin/floopy"
|
|
23
|
+
assert_equal "/opt/local/bin/floopy", @source.command
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_command_should_use_scm_command_in_local_mode_if_local_scm_command_not_set
|
|
27
|
+
@config[:scm_command] = "/opt/local/bin/floopy"
|
|
28
|
+
@source.local { assert_equal "/opt/local/bin/floopy", @source.command }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_command_should_use_local_scm_command_in_local_mode_if_local_scm_command_is_set
|
|
32
|
+
@config[:scm_command] = "/opt/local/bin/floopy"
|
|
33
|
+
@config[:local_scm_command] = "/usr/local/bin/floopy"
|
|
34
|
+
assert_equal "/opt/local/bin/floopy", @source.command
|
|
35
|
+
@source.local { assert_equal "/usr/local/bin/floopy", @source.command }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_command_should_use_default_if_scm_command_is_default
|
|
39
|
+
@config[:scm_command] = :default
|
|
40
|
+
assert_equal "floopy", @source.command
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_command_should_use_default_in_local_mode_if_local_scm_command_is_default
|
|
44
|
+
@config[:scm_command] = "/foo/bar/floopy"
|
|
45
|
+
@config[:local_scm_command] = :default
|
|
46
|
+
@source.local { assert_equal "floopy", @source.command }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_local_mode_proxy_should_treat_messages_as_being_in_local_mode
|
|
50
|
+
@config[:scm_command] = "/foo/bar/floopy"
|
|
51
|
+
@config[:local_scm_command] = :default
|
|
52
|
+
assert_equal "floopy", @source.local.command
|
|
53
|
+
assert_equal "/foo/bar/floopy", @source.command
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
require "utils"
|
|
2
|
+
require 'capistrano/recipes/deploy/scm/git'
|
|
3
|
+
|
|
4
|
+
class DeploySCMGitTest < Test::Unit::TestCase
|
|
5
|
+
class TestSCM < Capistrano::Deploy::SCM::Git
|
|
6
|
+
default_command "git"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def setup
|
|
10
|
+
@config = { :repository => "." }
|
|
11
|
+
def @config.exists?(name); key?(name); end
|
|
12
|
+
|
|
13
|
+
@source = TestSCM.new(@config)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_head
|
|
17
|
+
assert_equal "HEAD", @source.head
|
|
18
|
+
|
|
19
|
+
# With :branch
|
|
20
|
+
@config[:branch] = "master"
|
|
21
|
+
assert_equal "master", @source.head
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_origin
|
|
25
|
+
assert_equal "origin", @source.origin
|
|
26
|
+
@config[:remote] = "username"
|
|
27
|
+
assert_equal "username", @source.origin
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_checkout
|
|
31
|
+
@config[:repository] = "git@somehost.com:project.git"
|
|
32
|
+
dest = "/var/www"
|
|
33
|
+
rev = 'c2d9e79'
|
|
34
|
+
assert_equal "git clone -q git@somehost.com:project.git /var/www && cd /var/www && git checkout -q -b deploy #{rev}", @source.checkout(rev, dest)
|
|
35
|
+
|
|
36
|
+
# With :scm_command
|
|
37
|
+
git = "/opt/local/bin/git"
|
|
38
|
+
@config[:scm_command] = git
|
|
39
|
+
assert_equal "#{git} clone -q git@somehost.com:project.git /var/www && cd /var/www && #{git} checkout -q -b deploy #{rev}", @source.checkout(rev, dest)
|
|
40
|
+
|
|
41
|
+
# with submodules
|
|
42
|
+
@config[:git_enable_submodules] = true
|
|
43
|
+
assert_equal "#{git} clone -q git@somehost.com:project.git /var/www && cd /var/www && #{git} checkout -q -b deploy #{rev} && #{git} submodule -q init && #{git} submodule -q sync && #{git} submodule -q update", @source.checkout(rev, dest)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_checkout_with_verbose_should_not_use_q_switch
|
|
47
|
+
@config[:repository] = "git@somehost.com:project.git"
|
|
48
|
+
@config[:scm_verbose] = true
|
|
49
|
+
dest = "/var/www"
|
|
50
|
+
rev = 'c2d9e79'
|
|
51
|
+
assert_equal "git clone git@somehost.com:project.git /var/www && cd /var/www && git checkout -b deploy #{rev}", @source.checkout(rev, dest)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_diff
|
|
55
|
+
assert_equal "git diff master", @source.diff('master')
|
|
56
|
+
assert_equal "git diff master..branch", @source.diff('master', 'branch')
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def test_log
|
|
60
|
+
assert_equal "git log master..", @source.log('master')
|
|
61
|
+
assert_equal "git log master..branch", @source.log('master', 'branch')
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_query_revision
|
|
65
|
+
revision = @source.query_revision('HEAD') do |o|
|
|
66
|
+
assert_equal "git ls-remote . HEAD", o
|
|
67
|
+
"d11006102c07c94e5d54dd0ee63dca825c93ed61\tHEAD"
|
|
68
|
+
end
|
|
69
|
+
assert_equal "d11006102c07c94e5d54dd0ee63dca825c93ed61", revision
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_query_revision_has_whitespace
|
|
73
|
+
revision = @source.query_revision('HEAD') do |o|
|
|
74
|
+
assert_equal "git ls-remote . HEAD", o
|
|
75
|
+
"d11006102c07c94e5d54dd0ee63dca825c93ed61\tHEAD\r"
|
|
76
|
+
end
|
|
77
|
+
assert_equal "d11006102c07c94e5d54dd0ee63dca825c93ed61", revision
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_query_revision_deprecation_error
|
|
81
|
+
assert_raise(ArgumentError) do
|
|
82
|
+
revision = @source.query_revision('origin/release') {}
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def test_command_should_be_backwards_compatible
|
|
87
|
+
# 1.x version of this module used ":git", not ":scm_command"
|
|
88
|
+
@config[:git] = "/srv/bin/git"
|
|
89
|
+
assert_equal "/srv/bin/git", @source.command
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def test_sync
|
|
93
|
+
dest = "/var/www"
|
|
94
|
+
rev = 'c2d9e79'
|
|
95
|
+
assert_equal "cd #{dest} && git fetch -q origin && git reset -q --hard #{rev}", @source.sync(rev, dest)
|
|
96
|
+
|
|
97
|
+
# With :scm_command
|
|
98
|
+
git = "/opt/local/bin/git"
|
|
99
|
+
@config[:scm_command] = git
|
|
100
|
+
assert_equal "cd #{dest} && #{git} fetch -q origin && #{git} reset -q --hard #{rev}", @source.sync(rev, dest)
|
|
101
|
+
|
|
102
|
+
# with submodules
|
|
103
|
+
@config[:git_enable_submodules] = true
|
|
104
|
+
assert_equal "cd #{dest} && #{git} fetch -q origin && #{git} reset -q --hard #{rev} && #{git} submodule -q init && for mod in `#{git} submodule status | awk '{ print $2 }'`; do #{git} config -f .git/config submodule.${mod}.url `#{git} config -f .gitmodules --get submodule.${mod}.url` && echo Synced $mod; done && #{git} submodule -q sync && #{git} submodule -q update", @source.sync(rev, dest)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def test_sync_with_remote
|
|
108
|
+
dest = "/var/www"
|
|
109
|
+
rev = 'c2d9e79'
|
|
110
|
+
remote = "username"
|
|
111
|
+
repository = "git@somehost.com:project.git"
|
|
112
|
+
|
|
113
|
+
@config[:repository] = repository
|
|
114
|
+
@config[:remote] = remote
|
|
115
|
+
|
|
116
|
+
assert_equal "cd #{dest} && git config remote.#{remote}.url #{repository} && git config remote.#{remote}.fetch +refs/heads/*:refs/remotes/#{remote}/* && git fetch -q #{remote} && git reset -q --hard #{rev}", @source.sync(rev, dest)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def test_shallow_clone
|
|
120
|
+
@config[:repository] = "git@somehost.com:project.git"
|
|
121
|
+
@config[:git_shallow_clone] = 1
|
|
122
|
+
dest = "/var/www"
|
|
123
|
+
rev = 'c2d9e79'
|
|
124
|
+
assert_equal "git clone -q --depth 1 git@somehost.com:project.git /var/www && cd /var/www && git checkout -q -b deploy #{rev}", @source.checkout(rev, dest)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_remote_clone
|
|
128
|
+
@config[:repository] = "git@somehost.com:project.git"
|
|
129
|
+
@config[:remote] = "username"
|
|
130
|
+
dest = "/var/www"
|
|
131
|
+
rev = 'c2d9e79'
|
|
132
|
+
assert_equal "git clone -q -o username git@somehost.com:project.git /var/www && cd /var/www && git checkout -q -b deploy #{rev}", @source.checkout(rev, dest)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def test_remote_clone_with_submodules
|
|
136
|
+
@config[:repository] = "git@somehost.com:project.git"
|
|
137
|
+
@config[:remote] = "username"
|
|
138
|
+
@config[:git_enable_submodules] = true
|
|
139
|
+
dest = "/var/www"
|
|
140
|
+
rev = 'c2d9e79'
|
|
141
|
+
assert_equal "git clone -q -o username git@somehost.com:project.git /var/www && cd /var/www && git checkout -q -b deploy #{rev} && git submodule -q init && git submodule -q sync && git submodule -q update", @source.checkout(rev, dest)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Tests from base_test.rb, makin' sure we didn't break anything up there!
|
|
145
|
+
def test_command_should_default_to_default_command
|
|
146
|
+
assert_equal "git", @source.command
|
|
147
|
+
@source.local { assert_equal "git", @source.command }
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def test_command_should_use_scm_command_if_available
|
|
151
|
+
@config[:scm_command] = "/opt/local/bin/git"
|
|
152
|
+
assert_equal "/opt/local/bin/git", @source.command
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def test_command_should_use_scm_command_in_local_mode_if_local_scm_command_not_set
|
|
156
|
+
@config[:scm_command] = "/opt/local/bin/git"
|
|
157
|
+
@source.local { assert_equal "/opt/local/bin/git", @source.command }
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def test_command_should_use_local_scm_command_in_local_mode_if_local_scm_command_is_set
|
|
161
|
+
@config[:scm_command] = "/opt/local/bin/git"
|
|
162
|
+
@config[:local_scm_command] = "/usr/local/bin/git"
|
|
163
|
+
assert_equal "/opt/local/bin/git", @source.command
|
|
164
|
+
@source.local { assert_equal "/usr/local/bin/git", @source.command }
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def test_command_should_use_default_if_scm_command_is_default
|
|
168
|
+
@config[:scm_command] = :default
|
|
169
|
+
assert_equal "git", @source.command
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def test_command_should_use_default_in_local_mode_if_local_scm_command_is_default
|
|
173
|
+
@config[:scm_command] = "/foo/bar/git"
|
|
174
|
+
@config[:local_scm_command] = :default
|
|
175
|
+
@source.local { assert_equal "git", @source.command }
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def test_local_mode_proxy_should_treat_messages_as_being_in_local_mode
|
|
179
|
+
@config[:scm_command] = "/foo/bar/git"
|
|
180
|
+
@config[:local_scm_command] = :default
|
|
181
|
+
assert_equal "git", @source.local.command
|
|
182
|
+
assert_equal "/foo/bar/git", @source.command
|
|
183
|
+
end
|
|
184
|
+
end
|