capistrano 3.6.1 → 3.7.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.github/issue_template.md +19 -0
  3. data/.github/pull_request_template.md +26 -0
  4. data/.gitignore +1 -0
  5. data/.travis.yml +5 -1
  6. data/CHANGELOG.md +27 -1
  7. data/DEVELOPMENT.md +7 -1
  8. data/README.md +3 -4
  9. data/capistrano.gemspec +1 -1
  10. data/features/support/vagrant_helpers.rb +3 -5
  11. data/lib/capistrano/all.rb +1 -0
  12. data/lib/capistrano/configuration.rb +12 -2
  13. data/lib/capistrano/configuration/host_filter.rb +1 -1
  14. data/lib/capistrano/configuration/plugin_installer.rb +20 -2
  15. data/lib/capistrano/configuration/role_filter.rb +1 -1
  16. data/lib/capistrano/configuration/scm_resolver.rb +144 -0
  17. data/lib/capistrano/configuration/validated_variables.rb +3 -4
  18. data/lib/capistrano/defaults.rb +3 -1
  19. data/lib/capistrano/doctor/variables_doctor.rb +1 -1
  20. data/lib/capistrano/dsl/env.rb +2 -9
  21. data/lib/capistrano/dsl/paths.rb +1 -1
  22. data/lib/capistrano/dsl/task_enhancements.rb +0 -8
  23. data/lib/capistrano/scm/git.rb +73 -0
  24. data/lib/capistrano/scm/hg.rb +48 -0
  25. data/lib/capistrano/scm/plugin.rb +13 -0
  26. data/lib/capistrano/scm/svn.rb +47 -0
  27. data/lib/capistrano/{tasks → scm/tasks}/git.rake +9 -24
  28. data/lib/capistrano/{tasks → scm/tasks}/hg.rake +11 -10
  29. data/lib/capistrano/{tasks → scm/tasks}/svn.rake +11 -10
  30. data/lib/capistrano/setup.rb +1 -1
  31. data/lib/capistrano/tasks/deploy.rake +0 -3
  32. data/lib/capistrano/templates/Capfile +18 -7
  33. data/lib/capistrano/templates/deploy.rb.erb +7 -10
  34. data/lib/capistrano/templates/stage.rb.erb +7 -7
  35. data/lib/capistrano/version.rb +1 -1
  36. data/lib/capistrano/version_validator.rb +2 -5
  37. data/spec/lib/capistrano/configuration/host_filter_spec.rb +5 -0
  38. data/spec/lib/capistrano/configuration/plugin_installer_spec.rb +98 -0
  39. data/spec/lib/capistrano/configuration/role_filter_spec.rb +17 -1
  40. data/spec/lib/capistrano/doctor/variables_doctor_spec.rb +0 -7
  41. data/spec/lib/capistrano/dsl/task_enhancements_spec.rb +0 -15
  42. data/spec/lib/capistrano/scm/git_spec.rb +131 -0
  43. data/spec/lib/capistrano/scm/hg_spec.rb +104 -0
  44. data/spec/lib/capistrano/scm/svn_spec.rb +116 -0
  45. data/spec/lib/capistrano/scm_spec.rb +1 -1
  46. metadata +23 -20
  47. data/features/remote_file_task.feature +0 -14
  48. data/issue_template.md +0 -21
  49. data/lib/capistrano/git.rb +0 -54
  50. data/lib/capistrano/hg.rb +0 -43
  51. data/lib/capistrano/svn.rb +0 -42
  52. data/spec/lib/capistrano/git_spec.rb +0 -109
  53. data/spec/lib/capistrano/hg_spec.rb +0 -90
  54. data/spec/lib/capistrano/svn_spec.rb +0 -105
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1948ef0e60f92eb2ca3eee3f5a67e96e5c0e0612
4
- data.tar.gz: 8b16bda549777df3faadb59ed76cebc58dec095d
3
+ metadata.gz: e931dfadef610b41da34b4f62e12a7a27c811cd0
4
+ data.tar.gz: f50c1a957e6a56af182eefe19025021ec94b8e62
5
5
  SHA512:
6
- metadata.gz: e2f8bdbc484772a5d54a40449dd4f2b5480fb76c906d55d57c1dbe593072487a0f717dfc00702b16aa308ada41d9df3543601179a5bc4c9cd53abe55e4de355c
7
- data.tar.gz: c7312872efddec76244ee17dffa32da76108a7073c326654f207437806f86693bacac9fd0a55546e13f5004ac13046f4b26a11af3e7c17ad57ad87a8895130da
6
+ metadata.gz: f5d746ae4fb0ef00e20856e805587be8d1215f692cbb23d10a24a5df90e078a7f1d901909085824d27e9eafb03b5ce85ccf6099ff540d001dc2aac958761fe79
7
+ data.tar.gz: 491a552e20243bb82c77274d95d726cb0be2e37e6cccb866473b7621cc5549087b3a45cec370957f237c259d6439df77fc0834d71dc7e3fd586639b080dc9fd4
@@ -0,0 +1,19 @@
1
+ **Important:** GitHub issues are for feature requests or bug reports. The Capistrano team recommends you use [Stack Overflow](http://stackoverflow.com/questions/tagged/capistrano) for general questions. For more details, please see our [contribution policy](https://github.com/capistrano/capistrano/blob/master/CONTRIBUTING.md).
2
+
3
+ ---
4
+
5
+ ### Steps to reproduce
6
+ If reasonable, you can help by creating a Capistrano skeleton example project which reproduces the issue you are seeing. You can then upload the individual files to a GitHub Gist or a GitHub project. Others can simply modify the configuration to point at a test server/repository of their own. Often times, an issue is resolved simply by making this test case.
7
+
8
+ An example test case is here: https://gist.github.com/will-in-wi/527327e31af30b3eae2068e2965be05b
9
+
10
+ ### Expected behavior
11
+ Tell us what should happen
12
+
13
+ ### Actual behavior
14
+ Tell us what happens instead
15
+
16
+ ### System configuration
17
+ Please link to the output of `cap <stage> doctor` in a GitHub Gist.
18
+
19
+ Thanks for helping improve Capistrano!
@@ -0,0 +1,26 @@
1
+ ### Summary
2
+
3
+ (Guidelines for creating a bug report are available
4
+ here: https://github.com/capistrano/capistrano/blob/master/DEVELOPMENT.md)
5
+
6
+ Provide a general description of the code changes in your pull
7
+ request... were there any bugs you had fixed? If so, mention them. If
8
+ these bugs have open GitHub issues, be sure to tag them here as well,
9
+ to keep the conversation linked together.
10
+
11
+ ### Short checklist
12
+
13
+ - [ ] Did you run `bundle exec rubocop -a` to fix linter issues?
14
+ - [ ] If relevant, did you create a test?
15
+ - [ ] Did you confirm that the RSpec tests pass?
16
+ - [ ] If you are fixing a bug or introducing a new feature, did you add a CHANGELOG entry?
17
+
18
+ ### Other Information
19
+
20
+ If there's anything else that's important and relevant to your pull
21
+ request, mention that information here.
22
+
23
+ If you are updating any of the CHANGELOG files or are asked to update the
24
+ CHANGELOG files by reviewers, please add the CHANGELOG entry at the top of the file where indicated.
25
+
26
+ Thanks for helping improve Capistrano!
data/.gitignore CHANGED
@@ -21,4 +21,5 @@ tags
21
21
  test/tmp
22
22
  test/version_tmp
23
23
  tmp
24
+ /docs/_site/
24
25
  vendor/
@@ -5,8 +5,12 @@ rvm:
5
5
  - 2.1
6
6
  - 2.0
7
7
  matrix:
8
+ # Rubinius periodically fails in general, and it always segfaults for RuboCop
9
+ # in particular. Until we figure out how to make it work consistently, allow
10
+ # it to fail without breaking the build.
11
+ allow_failures:
12
+ - rvm: rbx-2
8
13
  include:
9
- # Run specs on Rubinius, but not RuboCop, since it seg faults
10
14
  - rvm: rbx-2
11
15
  script: bundle exec rake spec
12
16
  script: bundle exec rake spec rubocop
@@ -4,10 +4,36 @@ Reverse Chronological Order:
4
4
 
5
5
  ## master
6
6
 
7
- https://github.com/capistrano/capistrano/compare/v3.6.1...HEAD
7
+ https://github.com/capistrano/capistrano/compare/v3.7.0.beta1...HEAD
8
8
 
9
9
  * Your contribution here!
10
10
 
11
+ ## `3.7.0.beta1` (2016-11-02)
12
+
13
+ https://github.com/capistrano/capistrano/compare/v3.6.1...v3.7.0.beta1
14
+
15
+ ### Deprecations:
16
+
17
+ * The `set :scm, ...` mechanism is now deprecated in favor of a new SCM plugin
18
+ system. See the [UPGRADING-3.7](UPGRADING-3.7.md) document for details.
19
+
20
+ ### Potentially breaking changes:
21
+
22
+ * The `:git_strategy`, `:hg_strategy`, and `:svn_strategy` settings have been
23
+ removed with no replacement. If you have been using these to customize
24
+ Capistrano's SCM behavior, you will need to rewrite your customization using
25
+ the [new plugin system](http://capistranorb.com/documentation/advanced-features/custom-scm/).
26
+ * `remote_file` feature has been removed and is no longer available to use @SaiVardhan
27
+
28
+ ### New features:
29
+
30
+ * The `tar` used by the Git SCM now honors the SSHKit command map, allowing an alternative tar binary to be used (e.g. gtar) #1787 (@caius)
31
+
32
+ ### Fixes:
33
+
34
+ * Fix test suite to work with Mocha 1.2.0 (@caius)
35
+ * Fix bug where host_filter and role_filter were overly greedy [#1766](https://github.com/capistrano/capistrano/issues/1766) (@cseeger-epages)
36
+
11
37
  ## `3.6.1` (2016-08-23)
12
38
 
13
39
  https://github.com/capistrano/capistrano/compare/v3.6.0...v3.6.1
@@ -1,6 +1,7 @@
1
1
  Thanks for helping build Capistrano! Here are the development practices followed by our community.
2
2
 
3
3
  * [Who can help](#who-can-help)
4
+ * [Contributing documentation](#contributing-documentation)
4
5
  * [Setting up your development environment](#setting-up-your-development-environment)
5
6
  * [Coding guidelines](#coding-guidelines)
6
7
  * [Submitting a pull request](#submitting-a-pull-request)
@@ -17,6 +18,10 @@ Everyone can help improve Capistrano. There are ways to contribute even if you a
17
18
  * reviewing pull requests and suggesting improvements
18
19
  * reporting bugs or suggesting new features (see [CONTRIBUTING.md][])
19
20
 
21
+ ## Contributing documentation
22
+
23
+ Improvements and additions to Capistrano's documentation are very much appreciated. The official documention is stored in the `docs/` directory as Markdown files. These files are used to automatically generate the [capistranorb.com](http://capistranorb.com/) website, which is hosted by GitHub Pages. Feel free to make changes to this documentation as you see fit. Before opening a pull request, make sure your documentation renders correctly by previewing the website in your local environment. Refer to [docs/README.md][] for instructions.
24
+
20
25
  ## Setting up your development environment
21
26
 
22
27
  Capistrano is a Ruby project, so we expect you to have a functioning Ruby environment. To hack on Capistrano you will further need some specialized tools to run its test suite.
@@ -71,7 +76,7 @@ Your code should conform to these guidelines:
71
76
  * We can't merge it without a [good commit message](http://robots.thoughtbot.com/5-useful-tips-for-a-better-commit-message). If you do this right, Github will use the commit message as the body of your pull request, double win.
72
77
  * If you are making an improvement/fix for an existing issue, make sure to mention the issue number (if we have not yet merged it )
73
78
  * Add an entry to the `CHANGELOG` under the `### master` section, but please don't mess with the version.
74
- * If you add a new feature, please make sure to document it, open a corresponding pull request in [the documentation](https://github.com/capistrano/documentation) and mention the code change pull request over there, and Github will link everything up. If it's a simple feature, or a new variable, or something changed, it may be appropriate simply to document it in the generated `Capfile` or `deploy.rb`, or in the `README`
79
+ * If you add a new feature, please make sure to document it by modifying the appropriate Markdown files in `docs/` (see [contributing documentation](#contributing-documentation), above). If it's a simple feature, or a new variable, or something changed, it may be appropriate simply to document it in the generated `Capfile` or `deploy.rb`, or in the `README`.
75
80
  * Take care to squash your commit into one single commit with a good message, it saves us a lot of work in maintaining the CHANGELOG if we can generate it from the commit messages between the release tags!
76
81
  * Tests! It's tricky to test some parts of Capistrano, but do your best, it might just serve as a starting point for us to build a reliable test on top of, and help us understand where you are coming from.
77
82
 
@@ -120,3 +125,4 @@ After a pull request is merged, it is assigned to a GitHub milestone for the upc
120
125
 
121
126
 
122
127
  [CONTRIBUTING.md]: https://github.com/capistrano/capistrano/blob/master/CONTRIBUTING.md
128
+ [docs/README.md]: https://github.com/capistrano/capistrano/blob/master/docs/README.md
data/README.md CHANGED
@@ -58,7 +58,7 @@ Deploying to a fleet of app servers? Capistrano can run each deployment task con
58
58
 
59
59
  #### Server roles
60
60
 
61
- Your application may need many different types of servers: a database server, an app server, two app servers, and a job queue work server, for example. Capistrano lets you tag each server with one or more roles, so you can control what tasks are executed where.
61
+ Your application may need many different types of servers: a database server, an app server, two web servers, and a job queue work server, for example. Capistrano lets you tag each server with one or more roles, so you can control what tasks are executed where.
62
62
 
63
63
  #### Community driven
64
64
 
@@ -141,7 +141,7 @@ To customize the stages that are created, use:
141
141
  $ bundle exec cap install STAGES=local,sandbox,qa,production
142
142
  ```
143
143
 
144
- Note that the files that Capistrano creates are simply templates to get you started. Make sure to edit the `deploy.rb` and stage files so they contain values appropriate for your project and your target servers.
144
+ Note that the files that Capistrano creates are simply templates to get you started. Make sure to edit the `deploy.rb` and stage files so that they contain values appropriate for your project and your target servers.
145
145
 
146
146
  ### Command-line usage
147
147
 
@@ -173,7 +173,7 @@ $ bundle exec cap production deploy --print-config-variables
173
173
 
174
174
  Capistrano is a large project encompassing multiple GitHub repositories and a community of plugins, and it can be overwhelming when you are just getting started. Here are resources that can help:
175
175
 
176
- * **[The Capistrano website](http://capistranorb.com) is the best place for official documentation**
176
+ * **The [docs](docs) directory contains the official documentation**, and is used to generate the [Capistrano website](http://capistranorb.com)
177
177
  * [Stack Overflow](http://stackoverflow.com/questions/tagged/capistrano) has a Capistrano tag with lots of activity
178
178
  * [The Capistrano mailing list](https://groups.google.com/forum/#!forum/capistrano) is low-traffic but is monitored by Capistrano contributors
179
179
  * [CodersClan](http://codersclan.net/?repo_id=325&source=link) has Capistrano experts available to solve problems for bounties
@@ -181,7 +181,6 @@ Capistrano is a large project encompassing multiple GitHub repositories and a co
181
181
  Related GitHub repositories:
182
182
 
183
183
  * [capistrano/sshkit](https://github.com/capistrano/sshkit) provides the SSH behavior that underlies Capistrano (when you use `execute` in a Capistrano task, you are using SSHKit)
184
- * [capistrano/documentation](https://github.com/capistrano/documentation) is what generates the official Capistrano website
185
184
  * [capistrano/rails](https://github.com/capistrano/rails) is a very popular gem that adds Ruby on Rails deployment tasks
186
185
  * [mattbrictson/airbrussh](https://github.com/mattbrictson/airbrussh) provides Capistrano's default log formatting
187
186
 
@@ -12,7 +12,7 @@ Gem::Specification.new do |gem|
12
12
  gem.summary = "Capistrano - Welcome to easy deployment with Ruby over SSH"
13
13
  gem.homepage = "http://capistranorb.com/"
14
14
 
15
- gem.files = `git ls-files -z`.split("\x0")
15
+ gem.files = `git ls-files -z`.split("\x0").reject { |f| f =~ /^docs/ }
16
16
  gem.executables = %w(cap capify)
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
@@ -25,11 +25,9 @@ module VagrantHelpers
25
25
  end
26
26
 
27
27
  def run_vagrant_command(command)
28
- if (status = vagrant_cli_command("ssh -c #{command.inspect}")).success?
29
- true
30
- else
31
- raise VagrantSSHCommandError, status
32
- end
28
+ status = vagrant_cli_command("ssh -c #{command.inspect}")
29
+ return true if status.success?
30
+ raise VagrantSSHCommandError, status
33
31
  end
34
32
  end
35
33
 
@@ -11,6 +11,7 @@ require "capistrano/i18n"
11
11
  require "capistrano/dsl"
12
12
  require "capistrano/application"
13
13
  require "capistrano/configuration"
14
+ require "capistrano/configuration/scm_resolver"
14
15
 
15
16
  module Capistrano
16
17
  end
@@ -102,6 +102,10 @@ module Capistrano
102
102
  end
103
103
  end
104
104
 
105
+ def configure_scm
106
+ Capistrano::Configuration::SCMResolver.new.resolve
107
+ end
108
+
105
109
  def timestamp
106
110
  @timestamp ||= Time.now.utc
107
111
  end
@@ -130,8 +134,14 @@ module Capistrano
130
134
  fetch(:sshkit_backend) == SSHKit::Backend::Printer
131
135
  end
132
136
 
133
- def install_plugin(plugin, load_hooks: true)
134
- installer.install(plugin, load_hooks: load_hooks)
137
+ def install_plugin(plugin, load_hooks: true, load_immediately: false)
138
+ installer.install(plugin,
139
+ load_hooks: load_hooks,
140
+ load_immediately: load_immediately)
141
+ end
142
+
143
+ def scm_plugin_installed?
144
+ installer.scm_installed?
135
145
  end
136
146
 
137
147
  def servers
@@ -20,7 +20,7 @@ module Capistrano
20
20
  when Regexp then v
21
21
  else
22
22
  vs = v.to_s
23
- vs =~ /^[-A-Za-z0-9.]+$/ ? vs : Regexp.new(vs)
23
+ vs =~ /^[-A-Za-z0-9.]+$/ ? /^#{Regexp.quote(vs)}$/ : Regexp.new(vs)
24
24
  end
25
25
  end
26
26
  Regexp.union values
@@ -18,16 +18,34 @@ module Capistrano
18
18
  # install(Capistrano::SCM::Git)
19
19
  # install(Capistrano::SCM::Git.new)
20
20
  #
21
- def install(plugin, load_hooks: true)
21
+ # Note that the :load_immediately flag is for internal use only and will
22
+ # be removed in an upcoming release.
23
+ #
24
+ def install(plugin, load_hooks: true, load_immediately: false)
22
25
  plugin = plugin.is_a?(Class) ? plugin.new : plugin
23
26
 
24
27
  plugin.define_tasks
25
28
  plugin.register_hooks if load_hooks
29
+ @scm_installed ||= provides_scm?(plugin)
26
30
 
27
- Rake::Task.define_task("load:defaults") do
31
+ if load_immediately
28
32
  plugin.set_defaults
33
+ else
34
+ Rake::Task.define_task("load:defaults") do
35
+ plugin.set_defaults
36
+ end
29
37
  end
30
38
  end
39
+
40
+ def scm_installed?
41
+ @scm_installed
42
+ end
43
+
44
+ private
45
+
46
+ def provides_scm?(plugin)
47
+ plugin.respond_to?(:scm?) && plugin.scm?
48
+ end
31
49
  end
32
50
  end
33
51
  end
@@ -20,7 +20,7 @@ module Capistrano
20
20
  when Regexp then v
21
21
  else
22
22
  vs = v.to_s
23
- vs =~ %r{^/(.+)/$} ? Regexp.new($1) : /^#{vs}$/
23
+ vs =~ %r{^/(.+)/$} ? Regexp.new($1) : /^#{Regexp.quote(vs)}$/
24
24
  end
25
25
  end
26
26
  Regexp.union values
@@ -0,0 +1,144 @@
1
+ module Capistrano
2
+ class Configuration
3
+ # In earlier versions of Capistrano, users would specify the desired SCM
4
+ # implementation using `set :scm, :git`, for example. Capistrano would then
5
+ # load the matching .rb file based on this variable.
6
+ #
7
+ # Now we expect users to explicitly `require` and call `new` on the desired
8
+ # SCM implementation in their Capfile. The `set` technique is deprecated.
9
+ #
10
+ # This SCMResolver class takes care of managing the transition from the old
11
+ # to new system. It maintains the legacy behavior, but prints deprecation
12
+ # warnings when it is used.
13
+ #
14
+ # To maintain backwards compatibility, the resolver will load the Git SCM by
15
+ # if default it determines that no SCM has been explicitly specified or
16
+ # loaded. To force no SCM to be used at all, use `set :scm, nil`. This hack
17
+ # won't be necessary once backwards compatibility is removed in a future
18
+ # version.
19
+ #
20
+ # TODO: Remove this class entirely in Capistrano 4.0.
21
+ #
22
+ class SCMResolver
23
+ DEFAULT_GIT = :"default-git"
24
+
25
+ include Capistrano::DSL
26
+
27
+ def resolve
28
+ return if scm_name.nil?
29
+ set(:scm, :git) if using_default_scm?
30
+
31
+ print_deprecation_warnings_if_applicable
32
+ # Note that `scm_plugin_installed?` comes from Capistrano::DSL
33
+ return if scm_plugin_installed?
34
+
35
+ if built_in_scm_name?
36
+ load_built_in_scm
37
+ else
38
+ # Compatibility with existing 3.x third-party SCMs
39
+ register_legacy_scm_hooks
40
+ load_legacy_scm_by_name
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def using_default_scm?
47
+ return @using_default_scm if defined? @using_default_scm
48
+ @using_default_scm = (fetch(:scm) == DEFAULT_GIT)
49
+ end
50
+
51
+ def scm_name
52
+ fetch(:scm)
53
+ end
54
+
55
+ def load_built_in_scm
56
+ require "capistrano/scm/#{scm_name}"
57
+ scm_class = Object.const_get(built_in_scm_plugin_class_name)
58
+ # We use :load_immediately because we are initializing the SCM plugin
59
+ # late in the load process and therefore can't use the standard
60
+ # load:defaults technique.
61
+ install_plugin(scm_class, load_immediately: true)
62
+ end
63
+
64
+ def load_legacy_scm_by_name
65
+ load("capistrano/#{scm_name}.rb")
66
+ end
67
+
68
+ def third_party_scm_name?
69
+ !built_in_scm_name?
70
+ end
71
+
72
+ def built_in_scm_name?
73
+ %w(git hg svn).include?(scm_name.to_s.downcase)
74
+ end
75
+
76
+ def built_in_scm_plugin_class_name
77
+ "Capistrano::SCM::#{scm_name.to_s.capitalize}"
78
+ end
79
+
80
+ # rubocop:disable Style/GuardClause
81
+ def register_legacy_scm_hooks
82
+ if Rake::Task.task_defined?("deploy:new_release_path")
83
+ after "deploy:new_release_path", "#{scm_name}:create_release"
84
+ end
85
+
86
+ if Rake::Task.task_defined?("deploy:check")
87
+ before "deploy:check", "#{scm_name}:check"
88
+ end
89
+
90
+ if Rake::Task.task_defined?("deploy:set_current_revision")
91
+ before "deploy:set_current_revision",
92
+ "#{scm_name}:set_current_revision"
93
+ end
94
+ end
95
+ # rubocop:enable Style/GuardClause
96
+
97
+ def print_deprecation_warnings_if_applicable
98
+ if using_default_scm?
99
+ warn_add_git_to_capfile unless scm_plugin_installed?
100
+ elsif built_in_scm_name?
101
+ warn_set_scm_is_deprecated
102
+ elsif third_party_scm_name?
103
+ warn_third_party_scm_must_be_upgraded
104
+ end
105
+ end
106
+
107
+ def warn_set_scm_is_deprecated
108
+ $stderr.puts(<<-MESSAGE)
109
+ [Deprecation Notice] `set :scm, #{scm_name.inspect}` is deprecated.
110
+ To ensure your project is compatible with future versions of Capistrano,
111
+ remove the :scm setting and instead add these lines to your Capfile:
112
+
113
+ require "capistrano/scm/#{scm_name}"
114
+ install_plugin #{built_in_scm_plugin_class_name}
115
+
116
+ MESSAGE
117
+ end
118
+
119
+ def warn_add_git_to_capfile
120
+ $stderr.puts(<<-MESSAGE)
121
+ [Deprecation Notice] Future versions of Capistrano will not load the Git SCM
122
+ plugin by default. To silence this deprecation warning, add the following to
123
+ your Capfile:
124
+
125
+ require "capistrano/scm/git"
126
+ install_plugin Capistrano::SCM::Git
127
+
128
+ MESSAGE
129
+ end
130
+
131
+ def warn_third_party_scm_must_be_upgraded
132
+ $stderr.puts(<<-MESSAGE)
133
+ [Deprecation Notice] `set :scm, #{scm_name.inspect}` is deprecated.
134
+ To ensure this custom SCM will work with future versions of Capistrano,
135
+ please upgrade it to a version that uses the new SCM plugin mechanism
136
+ documented here:
137
+
138
+ http://capistranorb.com/documentation/advanced-features/custom-scm
139
+
140
+ MESSAGE
141
+ end
142
+ end
143
+ end
144
+ end