danger 6.0.4 → 6.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/danger/helpers/comment.rb +6 -4
- data/lib/danger/request_sources/gitlab.rb +71 -8
- data/lib/danger/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4004dbb1205aad12f66f5278fcf5baa4a5e052c0a93c2c3aff2192294fcd5912
|
4
|
+
data.tar.gz: f9efeacd037a59d541a6e948acbd3041793387e93ecf52a7368f2a7c0080dac1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 796525af00e43eb89f3226108effe5bb41560cc8afe6c9b19e4680066eaf09e70eb517e406225a6bc2a1961f3d1b2216df66afc1f1f137fe5ed5fa61c44421e4
|
7
|
+
data.tar.gz: 2dc38dcfd71cfacf44eccc0640ddb11295b53e0bb5d43aeb447ceeb884174fb069b4d218fd0f3590134d0395f73a3529f5f8e0575084375d6b32cd85287dba7a
|
@@ -2,9 +2,10 @@ module Danger
|
|
2
2
|
class Comment
|
3
3
|
attr_reader :id, :body
|
4
4
|
|
5
|
-
def initialize(id, body)
|
5
|
+
def initialize(id, body, inline = nil)
|
6
6
|
@id = id
|
7
7
|
@body = body
|
8
|
+
@inline = inline
|
8
9
|
end
|
9
10
|
|
10
11
|
def self.from_github(comment)
|
@@ -13,9 +14,10 @@ module Danger
|
|
13
14
|
|
14
15
|
def self.from_gitlab(comment)
|
15
16
|
if comment.respond_to?(:id) && comment.respond_to?(:body)
|
16
|
-
|
17
|
+
type = comment.respond_to?(:type) ? comment.type : nil
|
18
|
+
self.new(comment.id, comment.body, type == "DiffNote")
|
17
19
|
else
|
18
|
-
self.new(comment["id"], comment["body"])
|
20
|
+
self.new(comment["id"], comment["body"], comment["type"] == "DiffNote")
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
@@ -24,7 +26,7 @@ module Danger
|
|
24
26
|
end
|
25
27
|
|
26
28
|
def inline?
|
27
|
-
body.include?("")
|
29
|
+
@inline.nil? ? body.include?("") : @inline
|
28
30
|
end
|
29
31
|
end
|
30
32
|
end
|
@@ -74,7 +74,7 @@ module Danger
|
|
74
74
|
# @comments contains Comment objects (that have less information)
|
75
75
|
@comments ||= begin
|
76
76
|
if supports_inline_comments
|
77
|
-
@raw_comments =
|
77
|
+
@raw_comments = mr_discussions
|
78
78
|
.auto_paginate
|
79
79
|
.flat_map { |discussion| discussion.notes.map { |note| note.merge({"discussion_id" => discussion.id}) } }
|
80
80
|
@raw_comments
|
@@ -88,6 +88,10 @@ module Danger
|
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
91
|
+
def mr_discussions
|
92
|
+
@mr_discussions ||= client.merge_request_discussions(ci_source.repo_slug, ci_source.pull_request_id)
|
93
|
+
end
|
94
|
+
|
91
95
|
def mr_diff
|
92
96
|
@mr_diff ||= begin
|
93
97
|
mr_changes
|
@@ -158,9 +162,11 @@ module Danger
|
|
158
162
|
end
|
159
163
|
|
160
164
|
def update_pull_request_with_inline_comments!(warnings: [], errors: [], messages: [], markdowns: [], danger_id: "danger", new_comment: false, remove_previous_comments: false)
|
161
|
-
|
165
|
+
editable_regular_comments = mr_comments
|
166
|
+
.select { |comment| comment.generated_by_danger?(danger_id) }
|
167
|
+
.reject(&:inline?)
|
162
168
|
|
163
|
-
last_comment =
|
169
|
+
last_comment = editable_regular_comments.last
|
164
170
|
should_create_new_comment = new_comment || last_comment.nil? || remove_previous_comments
|
165
171
|
|
166
172
|
previous_violations =
|
@@ -215,7 +221,6 @@ module Danger
|
|
215
221
|
client.edit_merge_request_note(ci_source.repo_slug, ci_source.pull_request_id, last_comment.id, body)
|
216
222
|
end
|
217
223
|
end
|
218
|
-
|
219
224
|
end
|
220
225
|
|
221
226
|
def update_pull_request_without_inline_comments!(warnings: [], errors: [], messages: [], markdowns: [], danger_id: "danger", new_comment: false, remove_previous_comments: false)
|
@@ -323,9 +328,10 @@ module Danger
|
|
323
328
|
end
|
324
329
|
|
325
330
|
def submit_inline_comments!(warnings: [], errors: [], messages: [], markdowns: [], previous_violations: [], danger_id: "danger")
|
326
|
-
comments =
|
331
|
+
comments = mr_discussions
|
327
332
|
.auto_paginate
|
328
333
|
.flat_map { |discussion| discussion.notes.map { |note| note.merge({"discussion_id" => discussion.id}) } }
|
334
|
+
.select { |comment| Comment.from_gitlab(comment).inline? }
|
329
335
|
|
330
336
|
danger_comments = comments.select { |comment| Comment.from_gitlab(comment).generated_by_danger?(danger_id) }
|
331
337
|
non_danger_comments = comments - danger_comments
|
@@ -343,7 +349,7 @@ module Danger
|
|
343
349
|
violation = violations_from_table(comment["body"]).first
|
344
350
|
if !violation.nil? && violation.sticky
|
345
351
|
body = generate_inline_comment_body("white_check_mark", violation, danger_id: danger_id, resolved: true, template: "gitlab")
|
346
|
-
client.update_merge_request_discussion_note(ci_source.repo_slug, ci_source.pull_request_id, comment["discussion_id"], comment["id"], body)
|
352
|
+
client.update_merge_request_discussion_note(ci_source.repo_slug, ci_source.pull_request_id, comment["discussion_id"], comment["id"], body: body)
|
347
353
|
else
|
348
354
|
# We remove non-sticky violations that have no replies
|
349
355
|
# Since there's no direct concept of a reply in GH, we simply consider
|
@@ -400,12 +406,17 @@ module Danger
|
|
400
406
|
end
|
401
407
|
|
402
408
|
if matching_comments.empty?
|
409
|
+
old_position = find_old_position_in_diff mr_changes.changes, m
|
410
|
+
next false if old_position.nil?
|
411
|
+
|
403
412
|
params = {
|
404
413
|
body: body,
|
405
414
|
position: {
|
406
415
|
position_type: 'text',
|
407
416
|
new_path: m.file,
|
408
417
|
new_line: m.line,
|
418
|
+
old_path: old_position[:path],
|
419
|
+
old_line: old_position[:line],
|
409
420
|
base_sha: self.mr_json.diff_refs.base_sha,
|
410
421
|
start_sha: self.mr_json.diff_refs.start_sha,
|
411
422
|
head_sha: self.mr_json.diff_refs.head_sha
|
@@ -426,11 +437,11 @@ module Danger
|
|
426
437
|
# Update the comment to remove the strikethrough if present
|
427
438
|
comment = matching_comments.first
|
428
439
|
begin
|
429
|
-
client.update_merge_request_discussion_note(ci_source.repo_slug, ci_source.pull_request_id, comment["discussion_id"], comment["id"], body)
|
440
|
+
client.update_merge_request_discussion_note(ci_source.repo_slug, ci_source.pull_request_id, comment["discussion_id"], comment["id"], body: body)
|
430
441
|
rescue Gitlab::Error::Error => e
|
431
442
|
message = [e, "body: #{body}"].join("\n")
|
432
443
|
puts message
|
433
|
-
|
444
|
+
|
434
445
|
next false
|
435
446
|
end
|
436
447
|
end
|
@@ -440,6 +451,58 @@ module Danger
|
|
440
451
|
end
|
441
452
|
end
|
442
453
|
|
454
|
+
def find_old_position_in_diff(changes, message)
|
455
|
+
range_header_regexp = /@@ -(?<old>[0-9]+)(,([0-9]+))? \+(?<new>[0-9]+)(,([0-9]+))? @@.*/
|
456
|
+
|
457
|
+
change = changes.find { |c| c["new_path"] == message.file }
|
458
|
+
|
459
|
+
# If there is no changes or rename only or deleted, return nil.
|
460
|
+
return nil if change.nil? || change["diff"].empty? || change["deleted_file"]
|
461
|
+
|
462
|
+
modified_position = {
|
463
|
+
path: change["old_path"],
|
464
|
+
line: nil
|
465
|
+
}
|
466
|
+
|
467
|
+
# If the file is new one, old line number must be nil.
|
468
|
+
return modified_position if change["new_file"]
|
469
|
+
|
470
|
+
current_old_line = 0
|
471
|
+
current_new_line = 0
|
472
|
+
|
473
|
+
change["diff"].each_line do |line|
|
474
|
+
match = line.match range_header_regexp
|
475
|
+
|
476
|
+
if match
|
477
|
+
# If the message line is at before next diffs, break from loop.
|
478
|
+
break if message.line.to_i < match[:new].to_i
|
479
|
+
|
480
|
+
# The match [:old] line does not appear yet at the header position, so reduce line number.
|
481
|
+
current_old_line = match[:old].to_i - 1
|
482
|
+
current_new_line = match[:new].to_i - 1
|
483
|
+
next
|
484
|
+
end
|
485
|
+
|
486
|
+
if line.start_with?("-")
|
487
|
+
current_old_line += 1
|
488
|
+
elsif line.start_with?("+")
|
489
|
+
current_new_line += 1
|
490
|
+
# If the message line starts with '+', old line number must be nil.
|
491
|
+
return modified_position if current_new_line == message.line.to_i
|
492
|
+
elsif !line.eql?("\\n")
|
493
|
+
current_old_line += 1
|
494
|
+
current_new_line += 1
|
495
|
+
# If the message line doesn't start with '+', old line number must be specified.
|
496
|
+
break if current_new_line == message.line.to_i
|
497
|
+
end
|
498
|
+
end
|
499
|
+
|
500
|
+
{
|
501
|
+
path: change["old_path"],
|
502
|
+
line: current_old_line - current_new_line + message.line.to_i
|
503
|
+
}
|
504
|
+
end
|
443
505
|
end
|
444
506
|
end
|
445
507
|
end
|
508
|
+
|
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: 6.0.
|
4
|
+
version: 6.0.5
|
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: 2019-04-
|
12
|
+
date: 2019-04-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: claide
|