dco 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +6 -0
- data/.travis.yml +15 -0
- data/.yardopts +3 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +19 -0
- data/LICENSE +202 -0
- data/README.md +88 -0
- data/Rakefile +32 -0
- data/appveyor.yml +25 -0
- data/bin/dco +25 -0
- data/dco.gemspec +47 -0
- data/gemfiles/master.gemfile +21 -0
- data/gemfiles/release.gemfile +17 -0
- data/lib/dco.rb +24 -0
- data/lib/dco/cli.rb +402 -0
- data/lib/dco/version.rb +21 -0
- data/spec/baseline_spec.rb +34 -0
- data/spec/check_spec.rb +172 -0
- data/spec/disable_spec.rb +61 -0
- data/spec/enable_spec.rb +104 -0
- data/spec/process_commit_message_spec.rb +132 -0
- data/spec/sign_spec.rb +230 -0
- data/spec/spec_helper.rb +91 -0
- metadata +221 -0
data/lib/dco/version.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2016, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
|
18
|
+
module Dco
|
19
|
+
# dco gem version.
|
20
|
+
VERSION = '1.0.0'
|
21
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2016, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'spec_helper'
|
18
|
+
|
19
|
+
describe 'baseline' do
|
20
|
+
# The most recent commit object.
|
21
|
+
subject { repo.log.first }
|
22
|
+
|
23
|
+
# Check that the test harness is working.
|
24
|
+
git_init
|
25
|
+
file 'testing'
|
26
|
+
before do
|
27
|
+
command 'git add testing'
|
28
|
+
command 'git commit -m "harness test"'
|
29
|
+
end
|
30
|
+
|
31
|
+
its(:message) { is_expected.to eq 'harness test' }
|
32
|
+
its('author.name') { is_expected.to eq 'Alan Smithee' }
|
33
|
+
its('author.email') { is_expected.to eq 'asmithee@example.com' }
|
34
|
+
end
|
data/spec/check_spec.rb
ADDED
@@ -0,0 +1,172 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2016, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'spec_helper'
|
18
|
+
|
19
|
+
describe 'dco check' do
|
20
|
+
# Create a branch structure for all tests.
|
21
|
+
git_init
|
22
|
+
file 'testing', 'one'
|
23
|
+
before do
|
24
|
+
cmds = [
|
25
|
+
'git add testing',
|
26
|
+
'git commit -s -m "first commit"',
|
27
|
+
'echo two > testing',
|
28
|
+
'git commit -s -a -m "second commit"',
|
29
|
+
'git checkout -b mybranch',
|
30
|
+
]
|
31
|
+
command cmds.join(' && ')
|
32
|
+
end
|
33
|
+
dco_command 'check mybranch'
|
34
|
+
|
35
|
+
context 'with no commits in the branch' do
|
36
|
+
it do
|
37
|
+
expect(subject.exitstatus).to eq 0
|
38
|
+
expect(subject.stdout).to eq "All commits are signed off\n"
|
39
|
+
end
|
40
|
+
end # /context with no commits in the branch
|
41
|
+
|
42
|
+
context 'with one signed commit in the branch' do
|
43
|
+
before do
|
44
|
+
command 'echo three > testing && git commit -s -a -m "first branch commit"'
|
45
|
+
end
|
46
|
+
|
47
|
+
it do
|
48
|
+
expect(subject.exitstatus).to eq 0
|
49
|
+
expect(subject.stdout).to eq "All commits are signed off\n"
|
50
|
+
end
|
51
|
+
end # /context with one signed commit in the branch
|
52
|
+
|
53
|
+
context 'with one unsigned commit in the branch' do
|
54
|
+
before do
|
55
|
+
command 'echo three > testing && git commit -a -m "first branch commit" && echo four > testing && git commit -s -a -m "second branch commit"'
|
56
|
+
end
|
57
|
+
|
58
|
+
it do
|
59
|
+
expect(subject.exitstatus).to eq 1
|
60
|
+
expect(subject.stdout).to match /^N \h{7} Alan Smithee <asmithee@example.com> first branch commit$/
|
61
|
+
end
|
62
|
+
end # /context with one unsigned commit in the branch
|
63
|
+
|
64
|
+
context 'with two signed commits in the branch' do
|
65
|
+
before do
|
66
|
+
command 'echo three > testing && git commit -s -a -m "first branch commit" && echo four > testing && git commit -s -a -m "second branch commit"'
|
67
|
+
end
|
68
|
+
|
69
|
+
it do
|
70
|
+
expect(subject.exitstatus).to eq 0
|
71
|
+
expect(subject.stdout).to eq "All commits are signed off\n"
|
72
|
+
end
|
73
|
+
end # /context with two signed commits in the branch
|
74
|
+
|
75
|
+
context 'with an implicit branch' do
|
76
|
+
before do
|
77
|
+
command 'echo three > testing && git commit -a -m "first branch commit" && echo four > testing && git commit -s -a -m "second branch commit"'
|
78
|
+
end
|
79
|
+
dco_command 'check'
|
80
|
+
|
81
|
+
it do
|
82
|
+
expect(subject.exitstatus).to eq 1
|
83
|
+
expect(subject.stdout).to match /^N \h{7} Alan Smithee <asmithee@example.com> first branch commit$/
|
84
|
+
end
|
85
|
+
end # /context with an implicit branch
|
86
|
+
|
87
|
+
context 'with a branch that has a merge commit' do
|
88
|
+
before do
|
89
|
+
command('echo three > other && ' \
|
90
|
+
'git add other && ' \
|
91
|
+
'git commit -s -a -m "first branch commit" && ' \
|
92
|
+
'git checkout master && ' \
|
93
|
+
'echo three > testing && ' \
|
94
|
+
'git commit -a -m "third commit" && ' \
|
95
|
+
'git checkout mybranch && ' \
|
96
|
+
'git merge master && ' \
|
97
|
+
'echo four > other && ' \
|
98
|
+
'git commit -a -m "second branch commit"')
|
99
|
+
end
|
100
|
+
|
101
|
+
it do
|
102
|
+
expect(subject.exitstatus).to eq 1
|
103
|
+
expect(subject.stdout).to match /^N \h{7} Alan Smithee <asmithee@example.com> second branch commit$/
|
104
|
+
expect(subject.stdout).to_not match /^N \h{7} Alan Smithee <asmithee@example.com> third commit$/
|
105
|
+
# TODO What should the check behavior on merge commits be? https://github.com/coderanger/dco/issues/1
|
106
|
+
end
|
107
|
+
end # /context with a branch that has a merge commit
|
108
|
+
|
109
|
+
context 'with --quiet' do
|
110
|
+
dco_command 'check --quiet'
|
111
|
+
|
112
|
+
context 'with no bad commits' do
|
113
|
+
before { command 'echo three > testing && git commit -s -a -m "first branch commit"' }
|
114
|
+
|
115
|
+
it do
|
116
|
+
expect(subject.exitstatus).to eq 0
|
117
|
+
expect(subject.stdout).to eq ''
|
118
|
+
expect(subject.stderr).to eq ''
|
119
|
+
end
|
120
|
+
end # /context with no bad commits
|
121
|
+
|
122
|
+
context 'with bad commits' do
|
123
|
+
before { command 'echo three > testing && git commit -a -m "first branch commit"' }
|
124
|
+
|
125
|
+
it do
|
126
|
+
expect(subject.exitstatus).to eq 1
|
127
|
+
expect(subject.stdout).to eq ''
|
128
|
+
expect(subject.stderr).to eq ''
|
129
|
+
end
|
130
|
+
end # /context with bad commits
|
131
|
+
end # /context with --quiet
|
132
|
+
|
133
|
+
context 'with the master branch' do
|
134
|
+
before do
|
135
|
+
command('echo three > other && ' \
|
136
|
+
'git add other && ' \
|
137
|
+
'git commit -s -a -m "first branch commit" && ' \
|
138
|
+
'git checkout master && ' \
|
139
|
+
'echo three > testing && ' \
|
140
|
+
'git commit -a -m "third commit"')
|
141
|
+
end
|
142
|
+
dco_command 'check master'
|
143
|
+
|
144
|
+
it do
|
145
|
+
expect(subject.exitstatus).to eq 1
|
146
|
+
expect(subject.stdout).to match /^N \h{7} Alan Smithee <asmithee@example.com> third commit$/
|
147
|
+
expect(subject.stdout).to_not match /^N \h{7} Alan Smithee <asmithee@example.com> first branch commit$/
|
148
|
+
end
|
149
|
+
end # /context with the master branch
|
150
|
+
|
151
|
+
context 'with an author mismatch' do
|
152
|
+
file 'msg', "first branch commit\n\nSigned-off-by: Commiter McCommiterface <other@example.com>\n"
|
153
|
+
before do
|
154
|
+
command 'echo three > testing && git commit -a -F msg'
|
155
|
+
end
|
156
|
+
|
157
|
+
it do
|
158
|
+
expect(subject.exitstatus).to eq 1
|
159
|
+
expect(subject.stdout).to match /^M \h{7} Alan Smithee <asmithee@example.com> first branch commit$/
|
160
|
+
end
|
161
|
+
|
162
|
+
context 'with --allow-author-mismatch' do
|
163
|
+
dco_command 'check --allow-author-mismatch mybranch'
|
164
|
+
|
165
|
+
it do
|
166
|
+
expect(subject.exitstatus).to eq 0
|
167
|
+
expect(subject.stdout).to eq "All commits are signed off\n"
|
168
|
+
end
|
169
|
+
|
170
|
+
end # /context with --allow-author-mismatch
|
171
|
+
end # /context with an author mismatch
|
172
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2016, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'spec_helper'
|
18
|
+
|
19
|
+
describe 'dco disable' do
|
20
|
+
# The most recent commit object.
|
21
|
+
subject { repo.log.first }
|
22
|
+
|
23
|
+
context 'with a normal commit' do
|
24
|
+
git_init
|
25
|
+
file 'testing'
|
26
|
+
before do
|
27
|
+
dco_command 'enable -y'
|
28
|
+
dco_command 'disable'
|
29
|
+
command 'git add testing'
|
30
|
+
command 'git commit -m "test commit"'
|
31
|
+
end
|
32
|
+
|
33
|
+
its(:message) { is_expected.to eq "test commit" }
|
34
|
+
end # /context with a normal commit
|
35
|
+
|
36
|
+
context 'with disable called twice' do
|
37
|
+
git_init
|
38
|
+
file 'testing'
|
39
|
+
before do
|
40
|
+
dco_command 'enable -y'
|
41
|
+
dco_command 'disable'
|
42
|
+
dco_command 'disable'
|
43
|
+
command 'git add testing'
|
44
|
+
command 'git commit -m "test commit"'
|
45
|
+
end
|
46
|
+
|
47
|
+
its(:message) { is_expected.to eq "test commit" }
|
48
|
+
end # /context with disable called twice
|
49
|
+
|
50
|
+
context 'with an external commit-msg script' do
|
51
|
+
git_init
|
52
|
+
file '.git/hooks/commit-msg', 'SOMETHING ELSE'
|
53
|
+
dco_command 'disable'
|
54
|
+
|
55
|
+
it do
|
56
|
+
expect(subject.exitstatus).to eq 1
|
57
|
+
expect(subject.stdout).to eq ''
|
58
|
+
expect(subject.stderr).to match /^commit-msg hook is external, not removing$/
|
59
|
+
end
|
60
|
+
end # /context with an existing commit-msg script
|
61
|
+
end
|
data/spec/enable_spec.rb
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2016, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'spec_helper'
|
18
|
+
|
19
|
+
describe 'dco enable' do
|
20
|
+
# The most recent commit object.
|
21
|
+
subject { repo.log.first }
|
22
|
+
|
23
|
+
context 'without a git repository' do
|
24
|
+
dco_command 'enable -y'
|
25
|
+
|
26
|
+
it do
|
27
|
+
expect(subject.exitstatus).to eq 1
|
28
|
+
expect(subject.stdout).to eq ''
|
29
|
+
expect(subject.stderr).to match /does not appear to be a git repository$/
|
30
|
+
end
|
31
|
+
end # /context without a git repository
|
32
|
+
|
33
|
+
context 'with an unwritable git repository' do
|
34
|
+
git_init
|
35
|
+
before { File.chmod(00544, File.join(temp_path, '.git')) }
|
36
|
+
dco_command 'enable -y'
|
37
|
+
after { File.chmod(00744, File.join(temp_path, '.git')) }
|
38
|
+
|
39
|
+
it do
|
40
|
+
expect(subject.exitstatus).to eq 1
|
41
|
+
expect(subject.stdout).to eq ''
|
42
|
+
expect(subject.stderr).to match /^Git repository at.*? is read-only$/
|
43
|
+
end
|
44
|
+
end # /context with an unwritable git repository
|
45
|
+
|
46
|
+
context 'with an existing commit-msg script' do
|
47
|
+
git_init
|
48
|
+
file '.git/hooks/commit-msg', 'SOMETHING ELSE'
|
49
|
+
dco_command 'enable -y'
|
50
|
+
|
51
|
+
it do
|
52
|
+
expect(subject.exitstatus).to eq 1
|
53
|
+
expect(subject.stdout).to eq ''
|
54
|
+
expect(subject.stderr).to match /^commit-msg hook already exists, not overwriting$/
|
55
|
+
end
|
56
|
+
end # /context with an existing commit-msg script
|
57
|
+
|
58
|
+
context 'with a normal commit' do
|
59
|
+
git_init
|
60
|
+
file 'testing'
|
61
|
+
before do
|
62
|
+
dco_command 'enable -y'
|
63
|
+
command 'git add testing'
|
64
|
+
command 'git commit -m "test commit"'
|
65
|
+
end
|
66
|
+
|
67
|
+
its(:message) { is_expected.to eq "test commit\n\nSigned-off-by: Alan Smithee <asmithee@example.com>" }
|
68
|
+
end # /context with a normal commit
|
69
|
+
|
70
|
+
context 'with a signed-off commit' do
|
71
|
+
git_init
|
72
|
+
file 'testing'
|
73
|
+
before do
|
74
|
+
dco_command 'enable -y'
|
75
|
+
command 'git add testing'
|
76
|
+
command 'git commit -s -m "test commit"'
|
77
|
+
end
|
78
|
+
|
79
|
+
its(:message) { is_expected.to eq "test commit\n\nSigned-off-by: Alan Smithee <asmithee@example.com>" }
|
80
|
+
end # /context with a signed-off commit
|
81
|
+
|
82
|
+
context 'with enable called twice' do
|
83
|
+
git_init
|
84
|
+
file 'testing'
|
85
|
+
before do
|
86
|
+
dco_command 'enable -y'
|
87
|
+
dco_command 'enable -y'
|
88
|
+
command 'git add testing'
|
89
|
+
command 'git commit -m "test commit"'
|
90
|
+
end
|
91
|
+
|
92
|
+
its(:message) { is_expected.to eq "test commit\n\nSigned-off-by: Alan Smithee <asmithee@example.com>" }
|
93
|
+
end # /context with enable called twice
|
94
|
+
|
95
|
+
context 'without -y' do
|
96
|
+
git_init
|
97
|
+
dco_command 'enable'
|
98
|
+
|
99
|
+
it do
|
100
|
+
expect(subject.exitstatus).to eq 1
|
101
|
+
expect(subject.stderr).to eq "Not enabling auto-sign-off without approval\n"
|
102
|
+
end
|
103
|
+
end # /context without -y
|
104
|
+
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
#
|
2
|
+
# Copyright 2016, Noah Kantrowitz
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'spec_helper'
|
18
|
+
|
19
|
+
describe 'dco process_commit_message' do
|
20
|
+
around do |ex|
|
21
|
+
begin
|
22
|
+
ENV['GIT_COMMIT'] = 'abcd123'
|
23
|
+
ENV['GIT_AUTHOR_NAME'] = 'Alan Smithee'
|
24
|
+
ENV['GIT_AUTHOR_EMAIL'] = 'asmithee@example.com'
|
25
|
+
ex.run
|
26
|
+
ensure
|
27
|
+
ENV.delete('GIT_COMMIT')
|
28
|
+
ENV.delete('GIT_AUTHOR_NAME')
|
29
|
+
ENV.delete('GIT_AUTHOR_EMAIL')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'hook mode' do
|
34
|
+
dco_command 'process_commit_message msg'
|
35
|
+
|
36
|
+
RSpec.shared_examples 'process_commit_message hook mode' do |input, output|
|
37
|
+
file 'msg', input
|
38
|
+
|
39
|
+
it do
|
40
|
+
expect(subject.exitstatus).to eq 0
|
41
|
+
expect(subject.stdout).to eq ''
|
42
|
+
expect(subject.stderr).to eq ''
|
43
|
+
expect(IO.read(File.join(temp_path, 'msg'))).to eq output
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'with a normal commit' do
|
48
|
+
it_behaves_like 'process_commit_message hook mode', "test commit\n", "test commit\n\nSigned-off-by: Alan Smithee <asmithee@example.com>\n"
|
49
|
+
end # /context with a normal commit
|
50
|
+
|
51
|
+
context 'with no trailing newline' do
|
52
|
+
it_behaves_like 'process_commit_message hook mode', "test commit", "test commit\n\nSigned-off-by: Alan Smithee <asmithee@example.com>\n"
|
53
|
+
end # /context with no trailing newline
|
54
|
+
|
55
|
+
context 'with existing sign-off' do
|
56
|
+
it_behaves_like 'process_commit_message hook mode', "test commit\n\nSigned-off-by: Someone Else <other@example.com>\n", "test commit\n\nSigned-off-by: Someone Else <other@example.com>\n"
|
57
|
+
end # /context with existing sign-off
|
58
|
+
|
59
|
+
context 'with two existing sign-offs' do
|
60
|
+
it_behaves_like 'process_commit_message hook mode', "test commit\n\nSigned-off-by: Alan Smithee <asmithee@example.com>\nSigned-off-by: Someone Else <other@example.com>\n", "test commit\n\nSigned-off-by: Alan Smithee <asmithee@example.com>\nSigned-off-by: Someone Else <other@example.com>\n"
|
61
|
+
end # /context with two existing sign-offs
|
62
|
+
end # /context hook mode
|
63
|
+
|
64
|
+
context 'filter mode' do
|
65
|
+
let(:input) { '' }
|
66
|
+
let(:git_ident) { {} }
|
67
|
+
let(:stdin) { double('STDIN', read: input) }
|
68
|
+
before do
|
69
|
+
# Use a let variable instead of calling git_init again in a later before
|
70
|
+
# block because we need to all command running before the STDIN stub.
|
71
|
+
git_init git_ident
|
72
|
+
stub_const('STDIN', stdin)
|
73
|
+
end
|
74
|
+
|
75
|
+
context 'with a normal commit' do
|
76
|
+
let(:input) { "test commit\n" }
|
77
|
+
dco_command 'process_commit_message'
|
78
|
+
|
79
|
+
it do
|
80
|
+
expect(subject.exitstatus).to eq 0
|
81
|
+
expect(subject.stdout).to eq "test commit\n\nSigned-off-by: Alan Smithee <asmithee@example.com>\n"
|
82
|
+
expect(subject.stderr).to eq ''
|
83
|
+
end
|
84
|
+
end # /context with a normal commit
|
85
|
+
|
86
|
+
context 'with existing sign-off' do
|
87
|
+
let(:input) { "test commit\n\nSigned-off-by: Someone Else <other@example.com>\n" }
|
88
|
+
dco_command 'process_commit_message'
|
89
|
+
|
90
|
+
it do
|
91
|
+
expect(subject.exitstatus).to eq 0
|
92
|
+
expect(subject.stdout).to eq "test commit\n\nSigned-off-by: Someone Else <other@example.com>\n"
|
93
|
+
expect(subject.stderr).to eq ''
|
94
|
+
end
|
95
|
+
end # /context with existing sign-off
|
96
|
+
|
97
|
+
context 'with --behalf' do
|
98
|
+
let(:input) { "test commit\n" }
|
99
|
+
let(:git_ident) { {name: 'Someone Else', email: 'other@example.com'} }
|
100
|
+
dco_command 'process_commit_message --behalf http://example.com/'
|
101
|
+
|
102
|
+
it do
|
103
|
+
expect(subject.exitstatus).to eq 0
|
104
|
+
expect(subject.stdout).to eq "test commit\n\nSigned-off-by: Alan Smithee <asmithee@example.com>\nSign-off-executed-by: Someone Else <other@example.com>\nApproved-at: http://example.com/\n"
|
105
|
+
expect(subject.stderr).to eq ''
|
106
|
+
end
|
107
|
+
end # /context with --behalf
|
108
|
+
|
109
|
+
context 'with someone elses commit' do
|
110
|
+
let(:input) { "test commit\n" }
|
111
|
+
let(:git_ident) { {name: 'Someone Else', email: 'other@example.com'} }
|
112
|
+
dco_command 'process_commit_message'
|
113
|
+
|
114
|
+
it do
|
115
|
+
expect(subject.exitstatus).to eq 1
|
116
|
+
expect(subject.stdout).to eq "test commit\n"
|
117
|
+
expect(subject.stderr).to eq "Author mismatch on commit abcd123: asmithee@example.com vs other@example.com\n"
|
118
|
+
end
|
119
|
+
end # /context with someone elses commit
|
120
|
+
|
121
|
+
context 'with --repo' do
|
122
|
+
let(:input) { "test commit\n" }
|
123
|
+
subject { dco_command "process_commit_message --repo '#{temp_path}'" }
|
124
|
+
|
125
|
+
it do
|
126
|
+
expect(subject.exitstatus).to eq 0
|
127
|
+
expect(subject.stdout).to eq "test commit\n\nSigned-off-by: Alan Smithee <asmithee@example.com>\n"
|
128
|
+
expect(subject.stderr).to eq ''
|
129
|
+
end
|
130
|
+
end # /context with --repo
|
131
|
+
end # /context filter mode
|
132
|
+
end
|