danger 5.2.1 → 5.2.2
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.
- checksums.yaml +4 -4
- data/lib/danger/core_ext/file_list.rb +5 -2
- data/lib/danger/helpers/array_subclass.rb +61 -0
- data/lib/danger/request_sources/github/github.rb +105 -53
- data/lib/danger/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72f0e5d81fa65411996bf4e0ab4a5fbcf27ca666
|
4
|
+
data.tar.gz: 858ad689324e7f7ab3a63f0a12271d75eaf539e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4539d2b0b778acf486d7daea6ff5e9624bcc4d50e8e26b2eb0a534bfc2acb5f9168d4c169f3e10af6f9c7dca21458415e2b0a9059f7dad76ce556a9664a4f4af
|
7
|
+
data.tar.gz: f2297c80d5e22a04954640ba16311b92bc229608532a12d41dc24aeebfbb2e9a957ed862192e285962f142c74023283b91bb2c0883fe30370db4e8fe7c528e4e
|
@@ -1,8 +1,11 @@
|
|
1
|
+
require "danger/helpers/array_subclass"
|
2
|
+
|
1
3
|
module Danger
|
2
|
-
class FileList
|
4
|
+
class FileList
|
5
|
+
include Helpers::ArraySublcass
|
6
|
+
|
3
7
|
# Information about pattern: http://ruby-doc.org/core-2.2.0/File.html#method-c-fnmatch
|
4
8
|
# e.g. "**/something.*" for any file called something with any extension
|
5
|
-
|
6
9
|
def include?(pattern)
|
7
10
|
self.each do |current|
|
8
11
|
return true if File.fnmatch(pattern, current)
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Danger
|
2
|
+
module Helpers
|
3
|
+
module ArraySublcass
|
4
|
+
include Comparable
|
5
|
+
|
6
|
+
def initialize(array)
|
7
|
+
@__array__ = array
|
8
|
+
end
|
9
|
+
|
10
|
+
def kind_of?(compare_class)
|
11
|
+
return true if compare_class == self.class
|
12
|
+
|
13
|
+
dummy.kind_of?(compare_class)
|
14
|
+
end
|
15
|
+
|
16
|
+
def method_missing(name, *args, &block)
|
17
|
+
super unless __array__.respond_to?(name)
|
18
|
+
|
19
|
+
respond_to_method(name, *args, &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def respond_to_missing?(name)
|
23
|
+
__array__.respond_to?(name) || super
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_a
|
27
|
+
__array__
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_ary
|
31
|
+
__array__
|
32
|
+
end
|
33
|
+
|
34
|
+
def <=>(other)
|
35
|
+
return unless other.kind_of?(self.class)
|
36
|
+
|
37
|
+
__array__ <=> other.instance_variable_get(:@__array__)
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
attr_accessor :__array__
|
43
|
+
|
44
|
+
def dummy
|
45
|
+
Class.new(Array).new
|
46
|
+
end
|
47
|
+
|
48
|
+
def respond_to_method(name, *args, &block)
|
49
|
+
result = __array__.send(name, *args, &block)
|
50
|
+
return result unless result.kind_of?(Array)
|
51
|
+
|
52
|
+
if name =~ /!/
|
53
|
+
__array__ = result
|
54
|
+
self
|
55
|
+
else
|
56
|
+
self.class.new(result)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -130,63 +130,67 @@ module Danger
|
|
130
130
|
last_comment = editable_comments.last
|
131
131
|
should_create_new_comment = new_comment || last_comment.nil?
|
132
132
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
133
|
+
previous_violations =
|
134
|
+
if should_create_new_comment
|
135
|
+
{}
|
136
|
+
else
|
137
|
+
parse_comment(last_comment.body)
|
138
|
+
end
|
138
139
|
|
139
|
-
|
140
|
-
|
141
|
-
|
140
|
+
regular_violations = regular_violations_group(
|
141
|
+
warnings: warnings,
|
142
|
+
errors: errors,
|
143
|
+
messages: messages,
|
144
|
+
markdowns: markdowns
|
145
|
+
)
|
142
146
|
|
143
|
-
|
144
|
-
|
145
|
-
|
147
|
+
inline_violations = inline_violations_group(
|
148
|
+
warnings: warnings,
|
149
|
+
errors: errors,
|
150
|
+
messages: messages,
|
151
|
+
markdowns: markdowns
|
152
|
+
)
|
146
153
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
danger_id: danger_id)
|
160
|
-
|
161
|
-
main_violations = comment_warnings + comment_errors + comment_messages + comment_markdowns
|
162
|
-
if previous_violations.empty? && main_violations.empty?
|
154
|
+
rest_inline_violations = submit_inline_comments!({
|
155
|
+
danger_id: danger_id,
|
156
|
+
previous_violations: previous_violations
|
157
|
+
}.merge(inline_violations))
|
158
|
+
|
159
|
+
main_violations = merge_violations(
|
160
|
+
regular_violations, rest_inline_violations
|
161
|
+
)
|
162
|
+
|
163
|
+
main_violations_sum = main_violations.values.inject(:+)
|
164
|
+
|
165
|
+
if previous_violations.empty? && main_violations_sum.empty?
|
163
166
|
# Just remove the comment, if there's nothing to say.
|
164
167
|
delete_old_comments!(danger_id: danger_id)
|
165
168
|
end
|
166
169
|
|
167
170
|
# If there are still violations to show
|
168
|
-
|
169
|
-
body = generate_comment(
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
end
|
171
|
+
if main_violations_sum.any?
|
172
|
+
body = generate_comment({
|
173
|
+
template: "github",
|
174
|
+
danger_id: danger_id,
|
175
|
+
previous_violations: previous_violations
|
176
|
+
}.merge(main_violations))
|
177
|
+
|
178
|
+
comment_result =
|
179
|
+
if should_create_new_comment
|
180
|
+
client.add_comment(ci_source.repo_slug, ci_source.pull_request_id, body)
|
181
|
+
else
|
182
|
+
client.update_comment(ci_source.repo_slug, last_comment.id, body)
|
183
|
+
end
|
182
184
|
end
|
183
185
|
|
184
186
|
# Now, set the pull request status.
|
185
187
|
# Note: this can terminate the entire process.
|
186
|
-
submit_pull_request_status!(
|
187
|
-
|
188
|
-
|
189
|
-
|
188
|
+
submit_pull_request_status!(
|
189
|
+
warnings: warnings,
|
190
|
+
errors: errors,
|
191
|
+
details_url: comment_result["html_url"],
|
192
|
+
danger_id: danger_id
|
193
|
+
)
|
190
194
|
end
|
191
195
|
|
192
196
|
def submit_pull_request_status!(warnings: [], errors: [], details_url: [], danger_id: "danger")
|
@@ -234,17 +238,25 @@ module Danger
|
|
234
238
|
|
235
239
|
def submit_inline_comments!(warnings: [], errors: [], messages: [], markdowns: [], previous_violations: [], danger_id: "danger")
|
236
240
|
# Avoid doing any fetchs if there's no inline comments
|
237
|
-
return if (warnings + errors + messages + markdowns).select(&:inline?).empty?
|
241
|
+
return {} if (warnings + errors + messages + markdowns).select(&:inline?).empty?
|
238
242
|
|
239
243
|
diff_lines = self.pr_diff.lines
|
240
244
|
pr_comments = client.pull_request_comments(ci_source.repo_slug, ci_source.pull_request_id)
|
241
245
|
danger_comments = pr_comments.select { |comment| Comment.from_github(comment).generated_by_danger?(danger_id) }
|
242
246
|
non_danger_comments = pr_comments - danger_comments
|
243
247
|
|
244
|
-
submit_inline_comments_for_kind!(
|
245
|
-
|
246
|
-
|
247
|
-
submit_inline_comments_for_kind!(
|
248
|
+
warnings = submit_inline_comments_for_kind!(
|
249
|
+
"warning", warnings, diff_lines, danger_comments, previous_violations["warning"], danger_id: danger_id
|
250
|
+
)
|
251
|
+
errors = submit_inline_comments_for_kind!(
|
252
|
+
"no_entry_sign", errors, diff_lines, danger_comments, previous_violations["error"], danger_id: danger_id
|
253
|
+
)
|
254
|
+
messages = submit_inline_comments_for_kind!(
|
255
|
+
"book", messages, diff_lines, danger_comments, previous_violations["message"], danger_id: danger_id
|
256
|
+
)
|
257
|
+
markdowns = submit_inline_comments_for_kind!(
|
258
|
+
nil, markdowns, diff_lines, danger_comments, [], danger_id: danger_id
|
259
|
+
)
|
248
260
|
|
249
261
|
# submit removes from the array all comments that are still in force
|
250
262
|
# so we strike out all remaining ones
|
@@ -266,6 +278,13 @@ module Danger
|
|
266
278
|
client.delete_pull_request_comment(ci_source.repo_slug, comment["id"]) if replies.empty?
|
267
279
|
end
|
268
280
|
end
|
281
|
+
|
282
|
+
{
|
283
|
+
warnings: warnings,
|
284
|
+
errors: errors,
|
285
|
+
messages: messages,
|
286
|
+
markdowns: markdowns
|
287
|
+
}
|
269
288
|
end
|
270
289
|
|
271
290
|
def messages_are_equivalent(m1, m2)
|
@@ -279,7 +298,7 @@ module Danger
|
|
279
298
|
previous_violations ||= []
|
280
299
|
is_markdown_content = emoji.nil?
|
281
300
|
|
282
|
-
|
301
|
+
messages.reject do |m|
|
283
302
|
next false unless m.file && m.line
|
284
303
|
|
285
304
|
position = find_position_in_diff diff_lines, m
|
@@ -328,8 +347,6 @@ module Danger
|
|
328
347
|
# Remove this element from the array
|
329
348
|
next true
|
330
349
|
end
|
331
|
-
|
332
|
-
messages.reject!(&submit_inline)
|
333
350
|
end
|
334
351
|
|
335
352
|
def find_position_in_diff(diff_lines, message)
|
@@ -430,6 +447,41 @@ module Danger
|
|
430
447
|
@download_url = "https://raw.githubusercontent.com/#{organisation}/#{repository}/#{branch}/#{path}"
|
431
448
|
end
|
432
449
|
end
|
450
|
+
|
451
|
+
private
|
452
|
+
|
453
|
+
def regular_violations_group(warnings: [], errors: [], messages: [], markdowns: [])
|
454
|
+
{
|
455
|
+
warnings: warnings.reject(&:inline?),
|
456
|
+
errors: errors.reject(&:inline?),
|
457
|
+
messages: messages.reject(&:inline?),
|
458
|
+
markdowns: markdowns.reject(&:inline?)
|
459
|
+
}
|
460
|
+
end
|
461
|
+
|
462
|
+
def inline_violations_group(warnings: [], errors: [], messages: [], markdowns: [])
|
463
|
+
cmp = proc do |a, b|
|
464
|
+
next -1 unless a.file
|
465
|
+
next 1 unless b.file
|
466
|
+
|
467
|
+
next a.line <=> b.line if a.file == b.file
|
468
|
+
next a.file <=> b.file
|
469
|
+
end
|
470
|
+
|
471
|
+
# Sort to group inline comments by file
|
472
|
+
{
|
473
|
+
warnings: warnings.select(&:inline?).sort(&cmp),
|
474
|
+
errors: errors.select(&:inline?).sort(&cmp),
|
475
|
+
messages: messages.select(&:inline?).sort(&cmp),
|
476
|
+
markdowns: markdowns.select(&:inline?).sort(&cmp)
|
477
|
+
}
|
478
|
+
end
|
479
|
+
|
480
|
+
def merge_violations(*violation_groups)
|
481
|
+
violation_groups.inject({}) do |accumulator, group|
|
482
|
+
accumulator.merge(group) { |_, old, fresh| old + fresh }
|
483
|
+
end
|
484
|
+
end
|
433
485
|
end
|
434
486
|
end
|
435
487
|
end
|
data/lib/danger/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: danger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.2.
|
4
|
+
version: 5.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Orta Therox
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-05-
|
12
|
+
date: 2017-05-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: claide
|
@@ -422,6 +422,7 @@ files:
|
|
422
422
|
- lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb
|
423
423
|
- lib/danger/danger_core/plugins/dangerfile_messaging_plugin.rb
|
424
424
|
- lib/danger/danger_core/standard_error.rb
|
425
|
+
- lib/danger/helpers/array_subclass.rb
|
425
426
|
- lib/danger/helpers/comment.rb
|
426
427
|
- lib/danger/helpers/comments_helper.rb
|
427
428
|
- lib/danger/helpers/comments_parsing_helper.rb
|