danger 8.4.2 → 9.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +1 -1
  4. data/bin/danger +1 -1
  5. data/lib/danger/ci_source/appcircle.rb +83 -0
  6. data/lib/danger/ci_source/appveyor.rb +1 -0
  7. data/lib/danger/ci_source/azure_pipelines.rb +20 -5
  8. data/lib/danger/ci_source/bamboo.rb +1 -1
  9. data/lib/danger/ci_source/bitbucket_pipelines.rb +1 -2
  10. data/lib/danger/ci_source/bitrise.rb +10 -10
  11. data/lib/danger/ci_source/buildkite.rb +1 -1
  12. data/lib/danger/ci_source/circle.rb +1 -1
  13. data/lib/danger/ci_source/circle_api.rb +2 -2
  14. data/lib/danger/ci_source/code_build.rb +20 -6
  15. data/lib/danger/ci_source/codefresh.rb +7 -13
  16. data/lib/danger/ci_source/concourse.rb +4 -5
  17. data/lib/danger/ci_source/dotci.rb +4 -6
  18. data/lib/danger/ci_source/github_actions.rb +6 -6
  19. data/lib/danger/ci_source/gitlab_ci.rb +13 -19
  20. data/lib/danger/ci_source/jenkins.rb +22 -23
  21. data/lib/danger/ci_source/local_git_repo.rb +36 -38
  22. data/lib/danger/ci_source/local_only_git_repo.rb +5 -8
  23. data/lib/danger/ci_source/support/find_repo_info_from_url.rb +11 -10
  24. data/lib/danger/ci_source/support/pull_request_finder.rb +47 -43
  25. data/lib/danger/ci_source/teamcity.rb +1 -1
  26. data/lib/danger/ci_source/xcode_cloud.rb +7 -7
  27. data/lib/danger/commands/init.rb +1 -1
  28. data/lib/danger/commands/local.rb +1 -1
  29. data/lib/danger/commands/local_helpers/http_cache.rb +2 -0
  30. data/lib/danger/commands/local_helpers/local_setup.rb +2 -0
  31. data/lib/danger/commands/local_helpers/pry_setup.rb +1 -0
  32. data/lib/danger/commands/plugins/plugin_json.rb +1 -3
  33. data/lib/danger/commands/plugins/plugin_lint.rb +0 -2
  34. data/lib/danger/commands/plugins/plugin_readme.rb +2 -5
  35. data/lib/danger/commands/pr.rb +2 -1
  36. data/lib/danger/commands/runner.rb +1 -1
  37. data/lib/danger/commands/staging.rb +7 -7
  38. data/lib/danger/commands/systems.rb +4 -6
  39. data/lib/danger/comment_generators/gitlab_inline.md.erb +1 -1
  40. data/lib/danger/comment_generators/vsts_inline.md.erb +17 -0
  41. data/lib/danger/core_ext/file_list.rb +2 -2
  42. data/lib/danger/danger_core/dangerfile.rb +19 -16
  43. data/lib/danger/danger_core/environment_manager.rb +2 -1
  44. data/lib/danger/danger_core/executor.rb +10 -11
  45. data/lib/danger/danger_core/message_aggregator.rb +1 -0
  46. data/lib/danger/danger_core/messages/base.rb +1 -0
  47. data/lib/danger/danger_core/messages/markdown.rb +3 -4
  48. data/lib/danger/danger_core/messages/violation.rb +1 -2
  49. data/lib/danger/danger_core/plugins/dangerfile_bitbucket_cloud_plugin.rb +1 -3
  50. data/lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb +4 -4
  51. data/lib/danger/danger_core/plugins/dangerfile_danger_plugin.rb +9 -3
  52. data/lib/danger/danger_core/plugins/dangerfile_git_plugin.rb +4 -3
  53. data/lib/danger/danger_core/plugins/dangerfile_github_plugin.rb +3 -1
  54. data/lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb +3 -1
  55. data/lib/danger/danger_core/plugins/dangerfile_local_only_plugin.rb +4 -3
  56. data/lib/danger/danger_core/plugins/dangerfile_messaging_plugin.rb +3 -1
  57. data/lib/danger/danger_core/plugins/dangerfile_vsts_plugin.rb +3 -3
  58. data/lib/danger/danger_core/standard_error.rb +2 -3
  59. data/lib/danger/helpers/array_subclass.rb +2 -2
  60. data/lib/danger/helpers/comments_helper.rb +8 -7
  61. data/lib/danger/helpers/comments_parsing_helper.rb +3 -2
  62. data/lib/danger/helpers/emoji_mapper.rb +1 -1
  63. data/lib/danger/plugin_support/plugin.rb +0 -1
  64. data/lib/danger/plugin_support/plugin_linter.rb +1 -0
  65. data/lib/danger/request_sources/bitbucket_cloud.rb +3 -6
  66. data/lib/danger/request_sources/bitbucket_cloud_api.rb +5 -7
  67. data/lib/danger/request_sources/bitbucket_server.rb +47 -11
  68. data/lib/danger/request_sources/bitbucket_server_api.rb +17 -14
  69. data/lib/danger/request_sources/code_insights_api.rb +9 -14
  70. data/lib/danger/request_sources/github/github.rb +30 -38
  71. data/lib/danger/request_sources/github/github_review.rb +3 -2
  72. data/lib/danger/request_sources/github/github_review_resolver.rb +0 -2
  73. data/lib/danger/request_sources/github/github_review_unsupported.rb +0 -2
  74. data/lib/danger/request_sources/gitlab.rb +53 -75
  75. data/lib/danger/request_sources/local_only.rb +1 -4
  76. data/lib/danger/request_sources/request_source.rb +20 -8
  77. data/lib/danger/request_sources/support/get_ignored_violation.rb +1 -1
  78. data/lib/danger/request_sources/vsts.rb +175 -15
  79. data/lib/danger/request_sources/vsts_api.rb +41 -7
  80. data/lib/danger/scm_source/git_repo.rb +2 -1
  81. data/lib/danger/version.rb +1 -1
  82. data/lib/danger.rb +1 -0
  83. metadata +39 -37
  84. data/lib/danger/ci_source/vsts.rb +0 -73
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  require "danger/helpers/comments_helper"
4
4
 
@@ -32,9 +32,8 @@ module Danger
32
32
  def inspect
33
33
  inspected = super
34
34
 
35
- if @password
36
- inspected = inspected.sub! @password, "********".freeze
37
- end
35
+ inspected.gsub!(@password, "********") if @password
36
+ inspected.gsub!(@access_token, "********") if @access_token
38
37
 
39
38
  inspected
40
39
  end
@@ -57,7 +56,7 @@ module Danger
57
56
  def fetch_comments
58
57
  values = []
59
58
  # TODO: use a url parts encoder to encode the query
60
- corrected_uuid = @my_uuid[1...-1] if !@my_uuid.nil? # Endpoint doesnt support curly brackets for this, so remove them for this
59
+ corrected_uuid = @my_uuid[1...-1] unless @my_uuid.nil? # Endpoint doesnt support curly brackets for this, so remove them for this
61
60
  uri = "#{pr_api_endpoint}/comments?pagelen=100&q=deleted+%7E+false+AND+user.uuid+%7E+%22#{corrected_uuid}%22"
62
61
 
63
62
  while uri
@@ -114,7 +113,7 @@ module Danger
114
113
  uri = URI.parse("https://bitbucket.org/site/oauth2/access_token")
115
114
  req = Net::HTTP::Post.new(uri.request_uri, { "Content-Type" => "application/json" })
116
115
  req.basic_auth oauth_key, oauth_secret
117
- req.set_form_data({'grant_type' => 'client_credentials'})
116
+ req.set_form_data({ "grant_type" => "client_credentials" })
118
117
  res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
119
118
  http.request(req)
120
119
  end
@@ -177,7 +176,6 @@ module Danger
177
176
  def error_fetching_json(url, status_code)
178
177
  "Error fetching json for: #{url}, status code: #{status_code}"
179
178
  end
180
-
181
179
  end
182
180
  end
183
181
  end
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  require "danger/helpers/comments_helper"
4
2
  require "danger/request_sources/bitbucket_server_api"
5
3
  require "danger/request_sources/code_insights_api"
@@ -9,7 +7,7 @@ module Danger
9
7
  module RequestSources
10
8
  class BitbucketServer < RequestSource
11
9
  include Danger::Helpers::CommentsHelper
12
- attr_accessor :pr_json
10
+ attr_accessor :pr_json, :dismiss_out_of_range_messages
13
11
 
14
12
  def self.env_vars
15
13
  [
@@ -25,13 +23,14 @@ module Danger
25
23
  "DANGER_BITBUCKETSERVER_CODE_INSIGHTS_REPORT_TITLE",
26
24
  "DANGER_BITBUCKETSERVER_CODE_INSIGHTS_REPORT_DESCRIPTION",
27
25
  "DANGER_BITBUCKETSERVER_CODE_INSIGHTS_REPORT_LOGO_URL",
28
- "DANGER_BITBUCKETSERVER_VERIFY_SSL"
26
+ "DANGER_BITBUCKETSERVER_VERIFY_SSL",
27
+ "DANGER_BITBUCKETSERVER_DISMISS_OUT_OF_RANGE_MESSAGES"
29
28
  ]
30
29
  end
31
30
 
32
31
  def initialize(ci_source, environment)
33
32
  self.ci_source = ci_source
34
- self.environment = environment
33
+ self.dismiss_out_of_range_messages = environment["DANGER_BITBUCKETSERVER_DISMISS_OUT_OF_RANGE_MESSAGES"] == "true"
35
34
 
36
35
  project, slug = ci_source.repo_slug.split("/")
37
36
  @api = BitbucketServerAPI.new(project, slug, ci_source.pull_request_id, environment)
@@ -59,6 +58,10 @@ module Danger
59
58
  self.pr_json = @api.fetch_pr_json
60
59
  end
61
60
 
61
+ def pr_diff
62
+ @pr_diff ||= @api.fetch_pr_diff
63
+ end
64
+
62
65
  def setup_danger_branches
63
66
  base_branch = self.pr_json[:toRef][:id].sub("refs/heads/", "")
64
67
  base_commit = self.pr_json[:toRef][:latestCommit]
@@ -135,12 +138,22 @@ module Danger
135
138
  end
136
139
 
137
140
  def main_violations_group(warnings: [], errors: [], messages: [], markdowns: [])
138
- {
139
- warnings: warnings.reject(&:inline?),
140
- errors: errors.reject(&:inline?),
141
- messages: messages.reject(&:inline?),
142
- markdowns: markdowns.reject(&:inline?)
143
- }
141
+ if dismiss_out_of_range_messages
142
+ {
143
+ warnings: warnings.reject(&:inline?),
144
+ errors: errors.reject(&:inline?),
145
+ messages: messages.reject(&:inline?),
146
+ markdowns: markdowns.reject(&:inline?)
147
+ }
148
+ else
149
+ in_diff = proc { |a| find_position_in_diff?(a.file, a.line) }
150
+ {
151
+ warnings: warnings.reject(&in_diff),
152
+ errors: errors.reject(&in_diff),
153
+ messages: messages.reject(&in_diff),
154
+ markdowns: markdowns.reject(&in_diff)
155
+ }
156
+ end
144
157
  end
145
158
 
146
159
  def inline_violations_group(warnings: [], errors: [], messages: [], markdowns: [])
@@ -149,6 +162,7 @@ module Danger
149
162
  next 1 unless b.file && b.line
150
163
 
151
164
  next a.line <=> b.line if a.file == b.file
165
+
152
166
  next a.file <=> b.file
153
167
  end
154
168
 
@@ -169,6 +183,28 @@ module Danger
169
183
  puts self.pr_json.to_json
170
184
  @api.update_pr_build_status(status, changeset, build_job_link, description)
171
185
  end
186
+
187
+ def find_position_in_diff?(file, line)
188
+ return nil if file.nil? || line.nil?
189
+ return nil if file.empty?
190
+
191
+ added_lines(file).include?(line)
192
+ end
193
+
194
+ def file_diff(file)
195
+ self.pr_diff[:diffs].find { |diff| diff[:destination] && diff[:destination][:toString] == file } || { hunks: [] }
196
+ end
197
+
198
+ def added_lines(file)
199
+ @added_lines ||= {}
200
+ @added_lines[file] ||= file_diff(file)[:hunks].map do |hunk|
201
+ hunk[:segments].select { |segment| segment[:type] == "ADDED" }.map do |segment|
202
+ segment[:lines].map do |line|
203
+ line[:destination]
204
+ end
205
+ end
206
+ end.flatten
207
+ end
172
208
  end
173
209
  end
174
210
  end
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  require "openssl"
4
4
  require "danger/helpers/comments_helper"
@@ -12,7 +12,7 @@ module Danger
12
12
  @username = environment["DANGER_BITBUCKETSERVER_USERNAME"]
13
13
  @password = environment["DANGER_BITBUCKETSERVER_PASSWORD"]
14
14
  self.host = environment["DANGER_BITBUCKETSERVER_HOST"]
15
- self.verify_ssl = environment["DANGER_BITBUCKETSERVER_VERIFY_SSL"] == "false" ? false : true
15
+ self.verify_ssl = environment["DANGER_BITBUCKETSERVER_VERIFY_SSL"] != "false"
16
16
  if self.host && !(self.host.include? "http://") && !(self.host.include? "https://")
17
17
  self.host = "https://" + self.host
18
18
  end
@@ -24,9 +24,7 @@ module Danger
24
24
  def inspect
25
25
  inspected = super
26
26
 
27
- if @password
28
- inspected = inspected.sub! @password, "********".freeze
29
- end
27
+ inspected.gsub!(@password, "********") if @password
30
28
 
31
29
  inspected
32
30
  end
@@ -44,6 +42,11 @@ module Danger
44
42
  fetch_json(uri)
45
43
  end
46
44
 
45
+ def fetch_pr_diff
46
+ uri = URI("#{pr_api_endpoint}/diff?withComments=false")
47
+ fetch_json(uri)
48
+ end
49
+
47
50
  def fetch_last_comments
48
51
  uri = URI("#{pr_api_endpoint}/activities?limit=1000")
49
52
  fetch_json(uri)[:values].select { |v| v[:action] == "COMMENTED" }.map { |v| v[:comment] }
@@ -61,9 +64,9 @@ module Danger
61
64
  end
62
65
 
63
66
  def update_pr_build_status(status, changeset, build_job_link, description)
64
- uri = URI("#{self.host}/rest/build-status/1.0/commits/#{changeset}")
65
- body = build_status_body(status, build_job_link, description)
66
- post(uri, body)
67
+ uri = URI("#{self.host}/rest/build-status/1.0/commits/#{changeset}")
68
+ body = build_status_body(status, build_job_link, description)
69
+ post(uri, body)
67
70
  end
68
71
 
69
72
  private
@@ -114,12 +117,12 @@ module Danger
114
117
  end
115
118
 
116
119
  def build_status_body(status, build_job_link, description)
117
- body = Hash.new
118
- body["state"] = status
119
- body["key"] = self.key
120
- body["url"] = build_job_link
121
- body["description"] = description if description
122
- return body.to_json
120
+ body = {}
121
+ body["state"] = status
122
+ body["key"] = self.key
123
+ body["url"] = build_job_link
124
+ body["description"] = description if description
125
+ return body.to_json
123
126
  end
124
127
  end
125
128
  end
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Danger
4
4
  module RequestSources
@@ -26,9 +26,7 @@ module Danger
26
26
  def inspect
27
27
  inspected = super
28
28
 
29
- if @password
30
- inspected = inspected.sub! @password, "********".freeze
31
- end
29
+ inspected.gsub!(@password, "********") if @password
32
30
 
33
31
  inspected
34
32
  end
@@ -39,7 +37,7 @@ module Danger
39
37
 
40
38
  def delete_report(commit)
41
39
  uri = URI(report_endpoint_at_commit(commit))
42
- request = Net::HTTP::Delete.new(uri.request_uri, {"Content-Type" => "application/json"})
40
+ request = Net::HTTP::Delete.new(uri.request_uri, { "Content-Type" => "application/json" })
43
41
  request.basic_auth @username, @password
44
42
  response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: use_ssl) do |http|
45
43
  http.request(request)
@@ -51,7 +49,6 @@ module Danger
51
49
  # HTTP 4xx - 5xx
52
50
  abort "\nError deleting report from Code Insights API: #{response.code} (#{response.message}) - #{response.body}\n\n"
53
51
  end
54
-
55
52
  end
56
53
 
57
54
  def send_report(commit, inline_warnings, inline_errors, inline_messages)
@@ -65,15 +62,14 @@ module Danger
65
62
 
66
63
  def put_report(commit, inline_errors_count)
67
64
  uri = URI(report_endpoint_at_commit(commit))
68
- request = Net::HTTP::Put.new(uri.request_uri, {"Content-Type" => "application/json"})
65
+ request = Net::HTTP::Put.new(uri.request_uri, { "Content-Type" => "application/json" })
69
66
  request.basic_auth @username, @password
70
- request.body = {"title": @report_title,
67
+ request.body = { "title": @report_title,
71
68
  "details": @report_description,
72
- "result": (inline_errors_count > 0) ? "FAIL" : "PASS",
69
+ "result": inline_errors_count > 0 ? "FAIL" : "PASS",
73
70
  "reporter": @username,
74
71
  "link": "https://github.com/danger/danger",
75
- "logoURL": @logo_url
76
- }.to_json
72
+ "logoURL": @logo_url }.to_json
77
73
 
78
74
  response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: use_ssl) do |http|
79
75
  http.request(request)
@@ -104,8 +100,8 @@ module Danger
104
100
  annotations << violation_hash_with_severity(violation, "HIGH")
105
101
  end
106
102
 
107
- body = {annotations: annotations}.to_json
108
- request = Net::HTTP::Post.new(uri.request_uri, {"Content-Type" => "application/json"})
103
+ body = { annotations: annotations }.to_json
104
+ request = Net::HTTP::Post.new(uri.request_uri, { "Content-Type" => "application/json" })
109
105
  request.basic_auth @username, @password
110
106
  request.body = body
111
107
 
@@ -141,7 +137,6 @@ module Danger
141
137
  def use_ssl
142
138
  @host.include? "https://"
143
139
  end
144
-
145
140
  end
146
141
  end
147
142
  end
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  # rubocop:disable Metrics/ClassLength
4
2
 
5
3
  require "octokit"
@@ -14,7 +12,7 @@ module Danger
14
12
  class GitHub < RequestSource
15
13
  include Danger::Helpers::CommentsHelper
16
14
 
17
- attr_accessor :pr_json, :issue_json, :support_tokenless_auth, :dismiss_out_of_range_messages
15
+ attr_accessor :pr_json, :issue_json, :use_local_git, :support_tokenless_auth, :dismiss_out_of_range_messages, :host, :api_url, :verify_ssl
18
16
 
19
17
  def self.env_vars
20
18
  ["DANGER_GITHUB_API_TOKEN", "DANGER_GITHUB_BEARER_TOKEN"]
@@ -26,12 +24,22 @@ module Danger
26
24
 
27
25
  def initialize(ci_source, environment)
28
26
  self.ci_source = ci_source
29
- self.environment = environment
27
+ self.use_local_git = environment["DANGER_USE_LOCAL_GIT"]
30
28
  self.support_tokenless_auth = false
31
29
  self.dismiss_out_of_range_messages = false
30
+ self.host = environment.fetch("DANGER_GITHUB_HOST", "github.com")
31
+ # `DANGER_GITHUB_API_HOST` is the old name kept for legacy reasons and
32
+ # backwards compatibility. `DANGER_GITHUB_API_BASE_URL` is the new
33
+ # correctly named variable.
34
+ self.api_url = environment.fetch("DANGER_GITHUB_API_HOST") do
35
+ environment.fetch("DANGER_GITHUB_API_BASE_URL") do
36
+ "https://api.github.com/".freeze
37
+ end
38
+ end
39
+ self.verify_ssl = environment["DANGER_OCTOKIT_VERIFY_SSL"] != "false"
32
40
 
33
- @access_token = @environment["DANGER_GITHUB_API_TOKEN"]
34
- @bearer_token = @environment["DANGER_GITHUB_BEARER_TOKEN"]
41
+ @access_token = environment["DANGER_GITHUB_API_TOKEN"]
42
+ @bearer_token = environment["DANGER_GITHUB_BEARER_TOKEN"]
35
43
  end
36
44
 
37
45
  def get_pr_from_branch(repo_name, branch_name, owner)
@@ -46,34 +54,16 @@ module Danger
46
54
  end
47
55
 
48
56
  def validates_as_api_source?
49
- valid_bearer_token? || valid_access_token? || self.environment["DANGER_USE_LOCAL_GIT"]
57
+ valid_bearer_token? || valid_access_token? || use_local_git
50
58
  end
51
59
 
52
60
  def scm
53
61
  @scm ||= GitRepo.new
54
62
  end
55
63
 
56
- def host
57
- @host = @environment["DANGER_GITHUB_HOST"] || "github.com"
58
- end
59
-
60
- def verify_ssl
61
- @environment["DANGER_OCTOKIT_VERIFY_SSL"] == "false" ? false : true
62
- end
63
-
64
- # `DANGER_GITHUB_API_HOST` is the old name kept for legacy reasons and
65
- # backwards compatibility. `DANGER_GITHUB_API_BASE_URL` is the new
66
- # correctly named variable.
67
- def api_url
68
- @environment.fetch("DANGER_GITHUB_API_HOST") do
69
- @environment.fetch("DANGER_GITHUB_API_BASE_URL") do
70
- "https://api.github.com/".freeze
71
- end
72
- end
73
- end
74
-
75
64
  def client
76
65
  raise "No API token given, please provide one using `DANGER_GITHUB_API_TOKEN` or `DANGER_GITHUB_BEARER_TOKEN`" if !valid_access_token? && !valid_bearer_token? && !support_tokenless_auth
66
+
77
67
  @client ||= begin
78
68
  Octokit.configure do |config|
79
69
  config.connection_options[:ssl] = { verify: verify_ssl }
@@ -92,6 +82,7 @@ module Danger
92
82
 
93
83
  def review
94
84
  return @review unless @review.nil?
85
+
95
86
  begin
96
87
  @review = client.pull_request_reviews(ci_source.repo_slug, ci_source.pull_request_id)
97
88
  .map { |review_json| Danger::RequestSources::GitHubSource::Review.new(client, ci_source, review_json) }
@@ -142,10 +133,8 @@ module Danger
142
133
  end
143
134
 
144
135
  def issue_comments
145
- @comments ||= begin
146
- client.issue_comments(ci_source.repo_slug, ci_source.pull_request_id)
147
- .map { |comment| Comment.from_github(comment) }
148
- end
136
+ @comments ||= client.issue_comments(ci_source.repo_slug, ci_source.pull_request_id)
137
+ .map { |comment| Comment.from_github(comment) }
149
138
  end
150
139
 
151
140
  # Sending data to GitHub
@@ -233,7 +222,7 @@ module Danger
233
222
  context: "danger/#{danger_id}",
234
223
  target_url: details_url
235
224
  })
236
- rescue
225
+ rescue StandardError
237
226
  # This usually means the user has no commit access to this repo
238
227
  # That's always the case for open source projects where you can only
239
228
  # use a read-only GitHub account
@@ -257,6 +246,7 @@ module Danger
257
246
  issue_comments.each do |comment|
258
247
  next unless comment.generated_by_danger?(danger_id)
259
248
  next if comment.id == except
249
+
260
250
  client.delete_comment(ci_source.repo_slug, comment.id)
261
251
  end
262
252
  end
@@ -465,9 +455,9 @@ module Danger
465
455
 
466
456
  # @return [String] The organisation name, is nil if it can't be detected
467
457
  def organisation
468
- matched = self.issue_json["repository_url"].match(%r{repos\/(.*)\/})
458
+ matched = self.issue_json["repository_url"].match(%r{repos/(.*)/})
469
459
  return matched[1] if matched && matched[1]
470
- rescue
460
+ rescue StandardError
471
461
  nil
472
462
  end
473
463
 
@@ -482,17 +472,18 @@ module Danger
482
472
  end
483
473
 
484
474
  # @return [String] A URL to the specific file, ready to be downloaded
485
- def file_url(organisation: nil, repository: nil, branch: nil, path: nil)
475
+ def file_url(organisation: nil, repository: nil, ref: nil, branch: nil, path: nil)
486
476
  organisation ||= self.organisation
477
+ ref ||= branch
487
478
 
488
479
  begin
489
- # Retrieve the download URL (default branch on nil param)
490
- contents = client.contents("#{organisation}/#{repository}", path: path, ref: branch)
480
+ # Retrieve the download URL (default ref on nil param)
481
+ contents = client.contents("#{organisation}/#{repository}", path: path, ref: ref)
491
482
  @download_url = contents["download_url"]
492
483
  rescue Octokit::ClientError
493
484
  # Fallback to github.com
494
- branch ||= "master"
495
- @download_url = "https://raw.githubusercontent.com/#{organisation}/#{repository}/#{branch}/#{path}"
485
+ ref ||= "master"
486
+ @download_url = "https://raw.githubusercontent.com/#{organisation}/#{repository}/#{ref}/#{path}"
496
487
  end
497
488
  end
498
489
 
@@ -521,6 +512,7 @@ module Danger
521
512
  next 1 unless b.file && b.line
522
513
 
523
514
  next a.line <=> b.line if a.file == b.file
515
+
524
516
  next a.file <=> b.file
525
517
  end
526
518
 
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  require "octokit"
4
2
  require "danger/ci_source/ci_source"
5
3
  require "danger/request_sources/github/github_review_resolver"
@@ -35,16 +33,19 @@ module Danger
35
33
 
36
34
  def id
37
35
  return nil unless self.review_json
36
+
38
37
  self.review_json["id"]
39
38
  end
40
39
 
41
40
  def body
42
41
  return "" unless self.review_json
42
+
43
43
  self.review_json["body"]
44
44
  end
45
45
 
46
46
  def status
47
47
  return STATUS_PENDING if self.review_json.nil?
48
+
48
49
  return self.review_json["state"]
49
50
  end
50
51
 
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  require "danger/request_sources/github/github_review"
4
2
 
5
3
  module Danger
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  module Danger
4
2
  module RequestSources
5
3
  module GitHubSource