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.
- checksums.yaml +4 -4
- data/.github/issue_template.md +19 -0
- data/.github/pull_request_template.md +26 -0
- data/.gitignore +1 -0
- data/.travis.yml +5 -1
- data/CHANGELOG.md +27 -1
- data/DEVELOPMENT.md +7 -1
- data/README.md +3 -4
- data/capistrano.gemspec +1 -1
- data/features/support/vagrant_helpers.rb +3 -5
- data/lib/capistrano/all.rb +1 -0
- data/lib/capistrano/configuration.rb +12 -2
- data/lib/capistrano/configuration/host_filter.rb +1 -1
- data/lib/capistrano/configuration/plugin_installer.rb +20 -2
- data/lib/capistrano/configuration/role_filter.rb +1 -1
- data/lib/capistrano/configuration/scm_resolver.rb +144 -0
- data/lib/capistrano/configuration/validated_variables.rb +3 -4
- data/lib/capistrano/defaults.rb +3 -1
- data/lib/capistrano/doctor/variables_doctor.rb +1 -1
- data/lib/capistrano/dsl/env.rb +2 -9
- data/lib/capistrano/dsl/paths.rb +1 -1
- data/lib/capistrano/dsl/task_enhancements.rb +0 -8
- data/lib/capistrano/scm/git.rb +73 -0
- data/lib/capistrano/scm/hg.rb +48 -0
- data/lib/capistrano/scm/plugin.rb +13 -0
- data/lib/capistrano/scm/svn.rb +47 -0
- data/lib/capistrano/{tasks → scm/tasks}/git.rake +9 -24
- data/lib/capistrano/{tasks → scm/tasks}/hg.rake +11 -10
- data/lib/capistrano/{tasks → scm/tasks}/svn.rake +11 -10
- data/lib/capistrano/setup.rb +1 -1
- data/lib/capistrano/tasks/deploy.rake +0 -3
- data/lib/capistrano/templates/Capfile +18 -7
- data/lib/capistrano/templates/deploy.rb.erb +7 -10
- data/lib/capistrano/templates/stage.rb.erb +7 -7
- data/lib/capistrano/version.rb +1 -1
- data/lib/capistrano/version_validator.rb +2 -5
- data/spec/lib/capistrano/configuration/host_filter_spec.rb +5 -0
- data/spec/lib/capistrano/configuration/plugin_installer_spec.rb +98 -0
- data/spec/lib/capistrano/configuration/role_filter_spec.rb +17 -1
- data/spec/lib/capistrano/doctor/variables_doctor_spec.rb +0 -7
- data/spec/lib/capistrano/dsl/task_enhancements_spec.rb +0 -15
- data/spec/lib/capistrano/scm/git_spec.rb +131 -0
- data/spec/lib/capistrano/scm/hg_spec.rb +104 -0
- data/spec/lib/capistrano/scm/svn_spec.rb +116 -0
- data/spec/lib/capistrano/scm_spec.rb +1 -1
- metadata +23 -20
- data/features/remote_file_task.feature +0 -14
- data/issue_template.md +0 -21
- data/lib/capistrano/git.rb +0 -54
- data/lib/capistrano/hg.rb +0 -43
- data/lib/capistrano/svn.rb +0 -42
- data/spec/lib/capistrano/git_spec.rb +0 -109
- data/spec/lib/capistrano/hg_spec.rb +0 -90
- data/spec/lib/capistrano/svn_spec.rb +0 -105
data/lib/capistrano/hg.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
load File.expand_path("../tasks/hg.rake", __FILE__)
|
2
|
-
|
3
|
-
require "capistrano/scm"
|
4
|
-
|
5
|
-
class Capistrano::Hg < Capistrano::SCM
|
6
|
-
# execute hg in context with arguments
|
7
|
-
def hg(*args)
|
8
|
-
args.unshift(:hg)
|
9
|
-
context.execute(*args)
|
10
|
-
end
|
11
|
-
|
12
|
-
module DefaultStrategy
|
13
|
-
def test
|
14
|
-
test! " [ -d #{repo_path}/.hg ] "
|
15
|
-
end
|
16
|
-
|
17
|
-
def check
|
18
|
-
hg "id", repo_url
|
19
|
-
end
|
20
|
-
|
21
|
-
def clone
|
22
|
-
hg "clone", "--noupdate", repo_url, repo_path
|
23
|
-
end
|
24
|
-
|
25
|
-
def update
|
26
|
-
hg "pull"
|
27
|
-
end
|
28
|
-
|
29
|
-
def release
|
30
|
-
if (tree = fetch(:repo_tree))
|
31
|
-
tree = tree.slice %r#^/?(.*?)/?$#, 1
|
32
|
-
components = tree.split("/").size
|
33
|
-
hg "archive --type tgz -p . -I", tree, "--rev", fetch(:branch), "| tar -x --strip-components #{components} -f - -C", release_path
|
34
|
-
else
|
35
|
-
hg "archive", release_path, "--rev", fetch(:branch)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def fetch_revision
|
40
|
-
context.capture(:hg, "log --rev #{fetch(:branch)} --template \"{node}\n\"")
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
data/lib/capistrano/svn.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
load File.expand_path("../tasks/svn.rake", __FILE__)
|
2
|
-
|
3
|
-
require "capistrano/scm"
|
4
|
-
|
5
|
-
class Capistrano::Svn < Capistrano::SCM
|
6
|
-
# execute svn in context with arguments
|
7
|
-
def svn(*args)
|
8
|
-
args.unshift(:svn)
|
9
|
-
args.push "--username #{fetch(:svn_username)}" if fetch(:svn_username)
|
10
|
-
args.push "--password #{fetch(:svn_password)}" if fetch(:svn_password)
|
11
|
-
args.push "--revision #{fetch(:svn_revision)}" if fetch(:svn_revision)
|
12
|
-
context.execute(*args)
|
13
|
-
end
|
14
|
-
|
15
|
-
module DefaultStrategy
|
16
|
-
def test
|
17
|
-
test! " [ -d #{repo_path}/.svn ] "
|
18
|
-
end
|
19
|
-
|
20
|
-
def check
|
21
|
-
svn_username = fetch(:svn_username) ? "--username #{fetch(:svn_username)}" : ""
|
22
|
-
svn_password = fetch(:svn_password) ? "--password #{fetch(:svn_password)}" : ""
|
23
|
-
test! :svn, :info, repo_url, svn_username, svn_password
|
24
|
-
end
|
25
|
-
|
26
|
-
def clone
|
27
|
-
svn :checkout, repo_url, repo_path
|
28
|
-
end
|
29
|
-
|
30
|
-
def update
|
31
|
-
svn :update
|
32
|
-
end
|
33
|
-
|
34
|
-
def release
|
35
|
-
svn :export, "--force", ".", release_path
|
36
|
-
end
|
37
|
-
|
38
|
-
def fetch_revision
|
39
|
-
context.capture(:svnversion, repo_path)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,109 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
require "capistrano/git"
|
4
|
-
|
5
|
-
module Capistrano
|
6
|
-
describe Git do
|
7
|
-
let(:context) { Class.new.new }
|
8
|
-
subject { Capistrano::Git.new(context, Capistrano::Git::DefaultStrategy) }
|
9
|
-
|
10
|
-
describe "#git" do
|
11
|
-
it "should call execute git in the context, with arguments" do
|
12
|
-
context.expects(:execute).with(:git, :init)
|
13
|
-
subject.git(:init)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe Git::DefaultStrategy do
|
19
|
-
let(:context) { Class.new.new }
|
20
|
-
subject { Capistrano::Git.new(context, Capistrano::Git::DefaultStrategy) }
|
21
|
-
|
22
|
-
describe "#test" do
|
23
|
-
it "should call test for repo HEAD" do
|
24
|
-
context.expects(:repo_path).returns("/path/to/repo")
|
25
|
-
context.expects(:test).with " [ -f /path/to/repo/HEAD ] "
|
26
|
-
|
27
|
-
subject.test
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe "#check" do
|
32
|
-
it "should test the repo url" do
|
33
|
-
context.expects(:repo_url).returns(:url)
|
34
|
-
context.expects(:execute).with(:git, :'ls-remote --heads', :url).returns(true)
|
35
|
-
|
36
|
-
subject.check
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "#clone" do
|
41
|
-
it "should run git clone" do
|
42
|
-
context.expects(:fetch).with(:git_shallow_clone).returns(nil)
|
43
|
-
context.expects(:repo_url).returns(:url)
|
44
|
-
context.expects(:repo_path).returns(:path)
|
45
|
-
context.expects(:execute).with(:git, :clone, "--mirror", :url, :path)
|
46
|
-
|
47
|
-
subject.clone
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should run git clone in shallow mode" do
|
51
|
-
context.expects(:fetch).with(:git_shallow_clone).returns("1")
|
52
|
-
context.expects(:repo_url).returns(:url)
|
53
|
-
context.expects(:repo_path).returns(:path)
|
54
|
-
|
55
|
-
context.expects(:execute).with(:git, :clone, "--mirror", "--depth", "1", "--no-single-branch", :url, :path)
|
56
|
-
|
57
|
-
subject.clone
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
describe "#update" do
|
62
|
-
it "should run git update" do
|
63
|
-
context.expects(:fetch).with(:git_shallow_clone).returns(nil)
|
64
|
-
context.expects(:execute).with(:git, :remote, :update, "--prune")
|
65
|
-
|
66
|
-
subject.update
|
67
|
-
end
|
68
|
-
|
69
|
-
it "should run git update in shallow mode" do
|
70
|
-
context.expects(:fetch).with(:git_shallow_clone).returns("1")
|
71
|
-
context.expects(:fetch).with(:branch).returns(:branch)
|
72
|
-
context.expects(:execute).with(:git, :fetch, "--depth", "1", "origin", :branch)
|
73
|
-
|
74
|
-
subject.update
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
describe "#release" do
|
79
|
-
it "should run git archive without a subtree" do
|
80
|
-
context.expects(:fetch).with(:repo_tree).returns(nil)
|
81
|
-
context.expects(:fetch).with(:branch).returns(:branch)
|
82
|
-
context.expects(:release_path).returns(:path)
|
83
|
-
|
84
|
-
context.expects(:execute).with(:git, :archive, :branch, "| tar -x -f - -C", :path)
|
85
|
-
|
86
|
-
subject.release
|
87
|
-
end
|
88
|
-
|
89
|
-
it "should run git archive with a subtree" do
|
90
|
-
context.expects(:fetch).with(:repo_tree).returns("tree")
|
91
|
-
context.expects(:fetch).with(:branch).returns(:branch)
|
92
|
-
context.expects(:release_path).returns(:path)
|
93
|
-
|
94
|
-
context.expects(:execute).with(:git, :archive, :branch, "tree", "| tar -x --strip-components 1 -f - -C", :path)
|
95
|
-
|
96
|
-
subject.release
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
describe "#fetch_revision" do
|
101
|
-
it "should capture git rev-list" do
|
102
|
-
context.expects(:fetch).with(:branch).returns(:branch)
|
103
|
-
context.expects(:capture).with(:git, "rev-list --max-count=1 branch").returns("81cec13b777ff46348693d327fc8e7832f79bf43")
|
104
|
-
revision = subject.fetch_revision
|
105
|
-
expect(revision).to eq("81cec13b777ff46348693d327fc8e7832f79bf43")
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
require "capistrano/hg"
|
4
|
-
|
5
|
-
module Capistrano
|
6
|
-
describe Hg do
|
7
|
-
let(:context) { Class.new.new }
|
8
|
-
subject { Capistrano::Hg.new(context, Capistrano::Hg::DefaultStrategy) }
|
9
|
-
|
10
|
-
describe "#hg" do
|
11
|
-
it "should call execute hg in the context, with arguments" do
|
12
|
-
context.expects(:execute).with(:hg, :init)
|
13
|
-
subject.hg(:init)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe Hg::DefaultStrategy do
|
19
|
-
let(:context) { Class.new.new }
|
20
|
-
subject { Capistrano::Hg.new(context, Capistrano::Hg::DefaultStrategy) }
|
21
|
-
|
22
|
-
describe "#test" do
|
23
|
-
it "should call test for repo HEAD" do
|
24
|
-
context.expects(:repo_path).returns("/path/to/repo")
|
25
|
-
context.expects(:test).with " [ -d /path/to/repo/.hg ] "
|
26
|
-
|
27
|
-
subject.test
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe "#check" do
|
32
|
-
it "should test the repo url" do
|
33
|
-
context.expects(:repo_url).returns(:url)
|
34
|
-
context.expects(:execute).with(:hg, "id", :url)
|
35
|
-
|
36
|
-
subject.check
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "#clone" do
|
41
|
-
it "should run hg clone" do
|
42
|
-
context.expects(:repo_url).returns(:url)
|
43
|
-
context.expects(:repo_path).returns(:path)
|
44
|
-
|
45
|
-
context.expects(:execute).with(:hg, "clone", "--noupdate", :url, :path)
|
46
|
-
|
47
|
-
subject.clone
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe "#update" do
|
52
|
-
it "should run hg update" do
|
53
|
-
context.expects(:execute).with(:hg, "pull")
|
54
|
-
|
55
|
-
subject.update
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
describe "#release" do
|
60
|
-
it "should run hg archive without a subtree" do
|
61
|
-
context.expects(:fetch).with(:repo_tree).returns(nil)
|
62
|
-
context.expects(:fetch).with(:branch).returns(:branch)
|
63
|
-
context.expects(:release_path).returns(:path)
|
64
|
-
|
65
|
-
context.expects(:execute).with(:hg, "archive", :path, "--rev", :branch)
|
66
|
-
|
67
|
-
subject.release
|
68
|
-
end
|
69
|
-
|
70
|
-
it "should run hg archive with a subtree" do
|
71
|
-
context.expects(:fetch).with(:repo_tree).returns("tree")
|
72
|
-
context.expects(:fetch).with(:branch).returns(:branch)
|
73
|
-
context.expects(:release_path).returns(:path)
|
74
|
-
|
75
|
-
context.expects(:execute).with(:hg, "archive --type tgz -p . -I", "tree", "--rev", :branch, "| tar -x --strip-components 1 -f - -C", :path)
|
76
|
-
|
77
|
-
subject.release
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
describe "#fetch_revision" do
|
82
|
-
it "should capture hg log" do
|
83
|
-
context.expects(:fetch).with(:branch).returns(:branch)
|
84
|
-
context.expects(:capture).with(:hg, "log --rev branch --template \"{node}\n\"").returns("01abcde")
|
85
|
-
revision = subject.fetch_revision
|
86
|
-
expect(revision).to eq("01abcde")
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
@@ -1,105 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
require "capistrano/svn"
|
4
|
-
|
5
|
-
module Capistrano
|
6
|
-
describe Svn do
|
7
|
-
let(:context) { Class.new.new }
|
8
|
-
subject { Capistrano::Svn.new(context, Capistrano::Svn::DefaultStrategy) }
|
9
|
-
|
10
|
-
describe "#svn" do
|
11
|
-
it "should call execute svn in the context, with arguments" do
|
12
|
-
context.expects(:execute).with(:svn, :init, "--username someuser", "--password somepassword")
|
13
|
-
context.expects(:fetch).twice.with(:svn_username).returns("someuser")
|
14
|
-
context.expects(:fetch).twice.with(:svn_password).returns("somepassword")
|
15
|
-
context.expects(:fetch).once.with(:svn_revision).returns(nil)
|
16
|
-
subject.svn(:init)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe Svn::DefaultStrategy do
|
22
|
-
let(:context) { Class.new.new }
|
23
|
-
subject { Capistrano::Svn.new(context, Capistrano::Svn::DefaultStrategy) }
|
24
|
-
|
25
|
-
describe "#test" do
|
26
|
-
it "should call test for repo HEAD" do
|
27
|
-
context.expects(:repo_path).returns("/path/to/repo")
|
28
|
-
context.expects(:test).with " [ -d /path/to/repo/.svn ] "
|
29
|
-
|
30
|
-
subject.test
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
describe "#check" do
|
35
|
-
it "should test the repo url" do
|
36
|
-
context.expects(:repo_url).returns(:url)
|
37
|
-
context.expects(:test).with(:svn, :info, :url, "--username someuser", "--password somepassword").returns(true)
|
38
|
-
context.expects(:fetch).twice.with(:svn_username).returns("someuser")
|
39
|
-
context.expects(:fetch).twice.with(:svn_password).returns("somepassword")
|
40
|
-
|
41
|
-
subject.check
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
describe "#clone" do
|
46
|
-
it "should run svn checkout" do
|
47
|
-
context.expects(:repo_url).returns(:url)
|
48
|
-
context.expects(:repo_path).returns(:path)
|
49
|
-
context.expects(:fetch).twice.with(:svn_username).returns("someuser")
|
50
|
-
context.expects(:fetch).twice.with(:svn_password).returns("somepassword")
|
51
|
-
context.expects(:fetch).once.with(:svn_revision).returns(nil)
|
52
|
-
|
53
|
-
context.expects(:execute).with(:svn, :checkout, :url, :path, "--username someuser", "--password somepassword")
|
54
|
-
|
55
|
-
subject.clone
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
describe "#update" do
|
60
|
-
it "should run svn update" do
|
61
|
-
context.expects(:execute).with(:svn, :update, "--username someuser", "--password somepassword")
|
62
|
-
context.expects(:fetch).twice.with(:svn_username).returns("someuser")
|
63
|
-
context.expects(:fetch).twice.with(:svn_password).returns("somepassword")
|
64
|
-
context.expects(:fetch).once.with(:svn_revision).returns(nil)
|
65
|
-
|
66
|
-
subject.update
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe "#update_specific_revision" do
|
71
|
-
it "should run svn update and update to a specific revision" do
|
72
|
-
context.expects(:execute).with(:svn, :update, "--username someuser", "--password somepassword", "--revision 12345")
|
73
|
-
context.expects(:fetch).twice.with(:svn_username).returns("someuser")
|
74
|
-
context.expects(:fetch).twice.with(:svn_password).returns("somepassword")
|
75
|
-
context.expects(:fetch).twice.with(:svn_revision).returns("12345")
|
76
|
-
|
77
|
-
subject.update
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
describe "#release" do
|
82
|
-
it "should run svn export" do
|
83
|
-
context.expects(:release_path).returns(:path)
|
84
|
-
context.expects(:fetch).twice.with(:svn_username).returns("someuser")
|
85
|
-
context.expects(:fetch).twice.with(:svn_password).returns("somepassword")
|
86
|
-
context.expects(:fetch).once.with(:svn_revision).returns(nil)
|
87
|
-
|
88
|
-
context.expects(:execute).with(:svn, :export, "--force", ".", :path, "--username someuser", "--password somepassword")
|
89
|
-
|
90
|
-
subject.release
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe "#fetch_revision" do
|
95
|
-
it "should capture svn version" do
|
96
|
-
context.expects(:repo_path).returns(:path)
|
97
|
-
|
98
|
-
context.expects(:capture).with(:svnversion, :path).returns("12345")
|
99
|
-
|
100
|
-
revision = subject.fetch_revision
|
101
|
-
expect(revision).to eq("12345")
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|