capistrano 1.4.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. data/CHANGELOG +140 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README +22 -14
  4. data/bin/cap +1 -8
  5. data/bin/capify +77 -0
  6. data/examples/sample.rb +10 -109
  7. data/lib/capistrano.rb +1 -0
  8. data/lib/capistrano/callback.rb +41 -0
  9. data/lib/capistrano/cli.rb +17 -317
  10. data/lib/capistrano/cli/execute.rb +82 -0
  11. data/lib/capistrano/cli/help.rb +102 -0
  12. data/lib/capistrano/cli/help.txt +53 -0
  13. data/lib/capistrano/cli/options.rb +183 -0
  14. data/lib/capistrano/cli/ui.rb +28 -0
  15. data/lib/capistrano/command.rb +62 -29
  16. data/lib/capistrano/configuration.rb +25 -226
  17. data/lib/capistrano/configuration/actions/file_transfer.rb +35 -0
  18. data/lib/capistrano/configuration/actions/inspect.rb +46 -0
  19. data/lib/capistrano/configuration/actions/invocation.rb +127 -0
  20. data/lib/capistrano/configuration/callbacks.rb +148 -0
  21. data/lib/capistrano/configuration/connections.rb +159 -0
  22. data/lib/capistrano/configuration/execution.rb +126 -0
  23. data/lib/capistrano/configuration/loading.rb +112 -0
  24. data/lib/capistrano/configuration/namespaces.rb +190 -0
  25. data/lib/capistrano/configuration/roles.rb +51 -0
  26. data/lib/capistrano/configuration/servers.rb +75 -0
  27. data/lib/capistrano/configuration/variables.rb +127 -0
  28. data/lib/capistrano/errors.rb +15 -0
  29. data/lib/capistrano/extensions.rb +27 -8
  30. data/lib/capistrano/gateway.rb +54 -29
  31. data/lib/capistrano/logger.rb +11 -11
  32. data/lib/capistrano/recipes/compat.rb +32 -0
  33. data/lib/capistrano/recipes/deploy.rb +483 -0
  34. data/lib/capistrano/recipes/deploy/dependencies.rb +44 -0
  35. data/lib/capistrano/recipes/deploy/local_dependency.rb +46 -0
  36. data/lib/capistrano/recipes/deploy/remote_dependency.rb +65 -0
  37. data/lib/capistrano/recipes/deploy/scm.rb +19 -0
  38. data/lib/capistrano/recipes/deploy/scm/base.rb +180 -0
  39. data/lib/capistrano/recipes/deploy/scm/bzr.rb +86 -0
  40. data/lib/capistrano/recipes/deploy/scm/cvs.rb +151 -0
  41. data/lib/capistrano/recipes/deploy/scm/darcs.rb +85 -0
  42. data/lib/capistrano/recipes/deploy/scm/mercurial.rb +129 -0
  43. data/lib/capistrano/recipes/deploy/scm/perforce.rb +126 -0
  44. data/lib/capistrano/recipes/deploy/scm/subversion.rb +103 -0
  45. data/lib/capistrano/recipes/deploy/strategy.rb +19 -0
  46. data/lib/capistrano/recipes/deploy/strategy/base.rb +64 -0
  47. data/lib/capistrano/recipes/deploy/strategy/checkout.rb +20 -0
  48. data/lib/capistrano/recipes/deploy/strategy/copy.rb +143 -0
  49. data/lib/capistrano/recipes/deploy/strategy/export.rb +20 -0
  50. data/lib/capistrano/recipes/deploy/strategy/remote.rb +52 -0
  51. data/lib/capistrano/recipes/deploy/strategy/remote_cache.rb +47 -0
  52. data/lib/capistrano/recipes/deploy/templates/maintenance.rhtml +53 -0
  53. data/lib/capistrano/recipes/standard.rb +26 -276
  54. data/lib/capistrano/recipes/templates/maintenance.rhtml +1 -1
  55. data/lib/capistrano/recipes/upgrade.rb +33 -0
  56. data/lib/capistrano/server_definition.rb +51 -0
  57. data/lib/capistrano/shell.rb +125 -81
  58. data/lib/capistrano/ssh.rb +80 -36
  59. data/lib/capistrano/task_definition.rb +69 -0
  60. data/lib/capistrano/upload.rb +146 -0
  61. data/lib/capistrano/version.rb +13 -17
  62. data/test/cli/execute_test.rb +132 -0
  63. data/test/cli/help_test.rb +139 -0
  64. data/test/cli/options_test.rb +226 -0
  65. data/test/cli/ui_test.rb +28 -0
  66. data/test/cli_test.rb +17 -0
  67. data/test/command_test.rb +284 -25
  68. data/test/configuration/actions/file_transfer_test.rb +40 -0
  69. data/test/configuration/actions/inspect_test.rb +62 -0
  70. data/test/configuration/actions/invocation_test.rb +195 -0
  71. data/test/configuration/callbacks_test.rb +206 -0
  72. data/test/configuration/connections_test.rb +288 -0
  73. data/test/configuration/execution_test.rb +159 -0
  74. data/test/configuration/loading_test.rb +119 -0
  75. data/test/configuration/namespace_dsl_test.rb +283 -0
  76. data/test/configuration/roles_test.rb +47 -0
  77. data/test/configuration/servers_test.rb +90 -0
  78. data/test/configuration/variables_test.rb +180 -0
  79. data/test/configuration_test.rb +60 -212
  80. data/test/deploy/scm/base_test.rb +55 -0
  81. data/test/deploy/strategy/copy_test.rb +146 -0
  82. data/test/extensions_test.rb +69 -0
  83. data/test/fixtures/cli_integration.rb +5 -0
  84. data/test/fixtures/custom.rb +2 -2
  85. data/test/gateway_test.rb +167 -0
  86. data/test/logger_test.rb +123 -0
  87. data/test/server_definition_test.rb +108 -0
  88. data/test/shell_test.rb +64 -0
  89. data/test/ssh_test.rb +67 -154
  90. data/test/task_definition_test.rb +101 -0
  91. data/test/upload_test.rb +131 -0
  92. data/test/utils.rb +31 -39
  93. data/test/version_test.rb +24 -0
  94. metadata +145 -98
  95. data/THANKS +0 -4
  96. data/lib/capistrano/actor.rb +0 -567
  97. data/lib/capistrano/generators/rails/deployment/deployment_generator.rb +0 -25
  98. data/lib/capistrano/generators/rails/deployment/templates/capistrano.rake +0 -49
  99. data/lib/capistrano/generators/rails/deployment/templates/deploy.rb +0 -122
  100. data/lib/capistrano/generators/rails/loader.rb +0 -20
  101. data/lib/capistrano/scm/base.rb +0 -61
  102. data/lib/capistrano/scm/baz.rb +0 -118
  103. data/lib/capistrano/scm/bzr.rb +0 -70
  104. data/lib/capistrano/scm/cvs.rb +0 -129
  105. data/lib/capistrano/scm/darcs.rb +0 -27
  106. data/lib/capistrano/scm/mercurial.rb +0 -83
  107. data/lib/capistrano/scm/perforce.rb +0 -139
  108. data/lib/capistrano/scm/subversion.rb +0 -128
  109. data/lib/capistrano/transfer.rb +0 -97
  110. data/lib/capistrano/utils.rb +0 -26
  111. data/test/actor_test.rb +0 -402
  112. data/test/scm/cvs_test.rb +0 -196
  113. data/test/scm/subversion_test.rb +0 -145
@@ -1,196 +0,0 @@
1
- $:.unshift File.dirname(__FILE__) + "/../../lib"
2
-
3
- require File.dirname(__FILE__) + "/../utils"
4
- require 'test/unit'
5
- require 'capistrano/scm/cvs'
6
-
7
- class ScmCvsTest < Test::Unit::TestCase
8
- class CvsTest < Capistrano::SCM::Cvs
9
- attr_accessor :story
10
- attr_reader :last_path
11
-
12
- def cvs_log(path,branch)
13
- @last_path = path
14
- story.shift
15
- end
16
-
17
- def cvs_branch(path)
18
- "deploy-me"
19
- end
20
-
21
- end
22
-
23
- class MockChannel
24
- attr_reader :sent_data
25
-
26
- def send_data(data)
27
- @sent_data ||= []
28
- @sent_data << data
29
- end
30
-
31
- def [](name)
32
- "value"
33
- end
34
- end
35
-
36
- class MockActor
37
- attr_reader :command
38
- attr_reader :channels
39
- attr_accessor :story
40
-
41
- def initialize(config)
42
- @config = config
43
- end
44
-
45
- def run(command)
46
- @command = command
47
- @channels ||= []
48
- @channels << MockChannel.new
49
- story.each { |stream, line| yield @channels.last, stream, line }
50
- end
51
-
52
- def release_path
53
- (@config[:now] || Time.now.utc).strftime("%Y%m%d%H%M%S")
54
- end
55
-
56
- def method_missing(sym, *args)
57
- @config.send(sym, *args)
58
- end
59
- end
60
-
61
- def setup
62
- @config = MockConfiguration.new
63
- @config[:repository] = ":ext:joetester@rubyforge.org:/hello/world"
64
- @config[:cvs] = "/path/to/cvs"
65
- @config[:password] = "chocolatebrownies"
66
- @config[:now] = Time.utc(2005,8,24,12,0,0)
67
- @scm = CvsTest.new(@config)
68
- @actor = MockActor.new(@config)
69
- @log_msg = <<MSG.strip
70
- RCS file: /var/cvs/copland/copland/LICENSE,v
71
- Working file: LICENSE
72
- head: 1.1
73
- branch:
74
- locks: strict
75
- access list:
76
- keyword substitution: kv
77
- total revisions: 1; selected revisions: 1
78
- description:
79
- ----------------------------
80
- revision 1.1
81
- date: 2004/08/29 04:23:36; author: minam; state: Exp;
82
- New implementation.
83
- =============================================================================
84
-
85
- RCS file: /var/cvs/copland/copland/Rakefile,v
86
- Working file: Rakefile
87
- head: 1.7
88
- branch:
89
- locks: strict
90
- access list:
91
- keyword substitution: kv
92
- total revisions: 7; selected revisions: 1
93
- description:
94
- ----------------------------
95
- revision 1.7
96
- date: 2004/09/15 16:35:01; author: minam; state: Exp; lines: +2 -1
97
- Rakefile now publishes package documentation from doc/packages instead of
98
- doc/packrat. Updated "latest updates" in manual.
99
- =============================================================================
100
-
101
- RCS file: /var/cvs/copland/copland/TODO,v
102
- Working file: TODO
103
- head: 1.18
104
- branch:
105
- locks: strict
106
- access list:
107
- keyword substitution: kv
108
- total revisions: 18; selected revisions: 1
109
- description:
110
- ----------------------------
111
- revision 1.18
112
- date: 2004/10/12 02:21:02; author: minam; state: Exp; lines: +4 -1
113
- Added RubyConf 2004 presentation.
114
- =============================================================================
115
-
116
- RCS file: /var/cvs/copland/copland/Attic/build-gemspec.rb,v
117
- Working file: build-gemspec.rb
118
- head: 1.5
119
- branch:
120
- locks: strict
121
- access list:
122
- keyword substitution: kv
123
- total revisions: 5; selected revisions: 1
124
- description:
125
- ----------------------------
126
- revision 1.5
127
- date: 2004/08/29 04:10:17; author: minam; state: dead; lines: +0 -0
128
- Here we go -- point of no return. Deleting existing implementation to make
129
- way for new implementation.
130
- =============================================================================
131
-
132
- RCS file: /var/cvs/copland/copland/copland.gemspec,v
133
- Working file: copland.gemspec
134
- head: 1.12
135
- branch:
136
- locks: strict
137
- access list:
138
- keyword substitution: kv
139
- total revisions: 13; selected revisions: 1
140
- description:
141
- ----------------------------
142
- revision 1.12
143
- date: 2004/09/11 21:45:58; author: minam; state: Exp; lines: +4 -4
144
- Minor change in how version is communicated to gemspec.
145
- =============================================================================
146
- MSG
147
- @scm.story = [ @log_msg ]
148
- end
149
-
150
- def test_latest_revision
151
- @config[:local] = "/hello/world"
152
- @scm.story = [ @log_msg ]
153
- assert_equal "2004-10-12 02:21:02", @scm.latest_revision
154
- assert_equal "/hello/world", @scm.last_path
155
- end
156
-
157
- def test_latest_with_default_local
158
- @config[:local] = nil
159
- @scm.story = [ @log_msg ]
160
- assert_equal "2004-10-12 02:21:02", @scm.latest_revision
161
- assert_equal ".", @scm.last_path
162
- end
163
-
164
- def test_checkout
165
- @actor.story = []
166
- assert_nothing_raised { @scm.checkout(@actor) }
167
- assert_nil @actor.channels.last.sent_data
168
- assert_match %r{/path/to/cvs}, @actor.command
169
- end
170
-
171
- def test_checkout_needs_ssh_password
172
- @actor.story = [[:out, "joetester@rubyforge.org's password: "]]
173
- assert_nothing_raised { @scm.checkout(@actor) }
174
- assert_equal ["chocolatebrownies\n"], @actor.channels.last.sent_data
175
- end
176
-
177
- def test_current_branch
178
- assert_equal "deploy-me", @scm.current_branch
179
- end
180
-
181
- def test_default_current_branch
182
- @config[:branch] = "default-branch"
183
- @scm = CvsTest.new(@config)
184
- assert_equal "default-branch", @scm.current_branch
185
- end
186
-
187
- def test_default_local
188
- @config = MockConfiguration.new
189
- @config[:repository] = ":ext:joetester@rubyforge.org:/hello/world"
190
- @config[:cvs] = "/path/to/cvs"
191
- @config[:password] = "chocolatebrownies"
192
- @config[:now] = Time.utc(2005,8,24,12,0,0)
193
- @scm = CvsTest.new(@config)
194
- assert_equal ".", @scm.configuration.local
195
- end
196
- end
@@ -1,145 +0,0 @@
1
- $:.unshift File.dirname(__FILE__) + "/../../lib"
2
-
3
- require File.dirname(__FILE__) + "/../utils"
4
- require 'test/unit'
5
- require 'capistrano/scm/subversion'
6
-
7
- class ScmSubversionTest < Test::Unit::TestCase
8
- class SubversionTest < Capistrano::SCM::Subversion
9
- attr_accessor :story
10
- attr_reader :last_path
11
-
12
- def svn_log(path)
13
- @last_path = path
14
- story.shift
15
- end
16
- end
17
-
18
- class MockChannel
19
- attr_reader :sent_data
20
-
21
- def send_data(data)
22
- @sent_data ||= []
23
- @sent_data << data
24
- end
25
-
26
- def [](name)
27
- "value"
28
- end
29
- end
30
-
31
- class MockActor
32
- attr_reader :command
33
- attr_reader :channels
34
- attr_accessor :story
35
-
36
- def initialize(config)
37
- @config = config
38
- end
39
-
40
- def run(command)
41
- @command = command
42
- @channels ||= []
43
- @channels << MockChannel.new
44
- story.each { |stream, line| yield @channels.last, stream, line }
45
- end
46
-
47
- def method_missing(sym, *args)
48
- @config.send(sym, *args)
49
- end
50
- end
51
-
52
- def setup
53
- @config = MockConfiguration.new
54
- @config[:current_path] = "/mwa/ha/ha/current"
55
- @config[:repository] = "/hello/world"
56
- @config[:svn] = "/path/to/svn"
57
- @config[:password] = "chocolatebrownies"
58
- @scm = SubversionTest.new(@config)
59
- @actor = MockActor.new(@config)
60
- @log_msg = <<MSG.strip
61
- ------------------------------------------------------------------------
62
- r1967 | minam | 2005-08-03 06:59:03 -0600 (Wed, 03 Aug 2005) | 2 lines
63
-
64
- Initial commit of the new capistrano utility
65
-
66
- ------------------------------------------------------------------------
67
- MSG
68
- @scm.story = [ @log_msg ]
69
- end
70
-
71
- def test_latest_revision
72
- @scm.story = [ @log_msg ]
73
- assert_equal "1967", @scm.latest_revision
74
- assert_equal "/hello/world", @scm.last_path
75
- end
76
-
77
- def test_checkout
78
- @actor.story = []
79
- assert_nothing_raised { @scm.checkout(@actor) }
80
- assert_nil @actor.channels.last.sent_data
81
- assert_match %r{/path/to/svn\b.*\bco\b.* -q}, @actor.command
82
- end
83
-
84
- def test_checkout_via_export
85
- @actor.story = []
86
- @config[:checkout] = "export"
87
- assert_nothing_raised { @scm.checkout(@actor) }
88
- assert_nil @actor.channels.last.sent_data
89
- assert_match %r{/path/to/svn\b.*\bexport\b.* -q}, @actor.command
90
- end
91
-
92
- def test_update
93
- @actor.story = []
94
- assert_nothing_raised { @scm.update(@actor) }
95
- assert_nil @actor.channels.last.sent_data
96
- assert_match %r{/path/to/svn\b.*\bup\b}, @actor.command
97
- end
98
-
99
- def test_checkout_needs_ssh_password
100
- @actor.story = [[:out, "Password: "]]
101
- assert_nothing_raised { @scm.checkout(@actor) }
102
- assert_equal ["chocolatebrownies\n"], @actor.channels.last.sent_data
103
- end
104
-
105
- def test_checkout_needs_http_password
106
- @actor.story = [[:out, "Password for (something): "]]
107
- assert_nothing_raised { @scm.checkout(@actor) }
108
- assert_equal ["chocolatebrownies\n"], @actor.channels.last.sent_data
109
- end
110
-
111
- def test_checkout_needs_https_certificate
112
- @actor.story = [[:out, "(R)eject, accept (t)emporarily or accept (p)ermanently? "]]
113
- assert_nothing_raised { @scm.checkout(@actor) }
114
- assert_equal ["t\n"], @actor.channels.last.sent_data
115
- end
116
-
117
- def test_checkout_needs_alternative_ssh_password
118
- @actor.story = [[:out, "someone's password: "]]
119
- assert_nothing_raised { @scm.checkout(@actor) }
120
- assert_equal ["chocolatebrownies\n"], @actor.channels.last.sent_data
121
- end
122
-
123
- def test_svn_password
124
- @config[:svn_password] = "butterscotchcandies"
125
- @actor.story = [[:out, "Password: "]]
126
- assert_nothing_raised { @scm.checkout(@actor) }
127
- assert_equal ["butterscotchcandies\n"], @actor.channels.last.sent_data
128
- end
129
-
130
- def test_svn_username
131
- @actor.story = []
132
- @config[:svn_username] = "turtledove"
133
- assert_nothing_raised { @scm.checkout(@actor) }
134
- assert_nil @actor.channels.last.sent_data
135
- assert_match %r{/path/to/svn\b.*\bco\b.* --username turtledove}, @actor.command
136
- end
137
-
138
- def test_svn_no_auth_cache
139
- @actor.story = []
140
- @config[:svn_username] = "turtledove"
141
- assert_nothing_raised { @scm.checkout(@actor) }
142
- assert_nil @actor.channels.last.sent_data
143
- assert_match %r{/path/to/svn\b.*\bco\b.* --no-auth-cache --username turtledove}, @actor.command
144
- end
145
- end