gitlab-dangerfiles 0.9.0 → 1.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 953603fac4ea1f44a40296e63e5d67943f0a0ec2d67631eb24822d3c01b76749
4
- data.tar.gz: 47c1026b0081cbd279cd097f122b29a6ef382dbb43ea5ce7a714935ead7288d9
3
+ metadata.gz: f9f8e727ceb4fd8d6a8163b5c2637cb117426e30d3002ae5772b7031c83bc98a
4
+ data.tar.gz: 650de232d49a5cb7a022ed53e4607ddc8941ba0615e5cc73214da44d2e838967
5
5
  SHA512:
6
- metadata.gz: 6e36bec78c26703d1b964ea580b9d3cd1425926d968c80480a901f7c14ebb6f0a0509820adc612587796d85ed29e83ca0c3e9569a288a90a5beab1c1693f92da
7
- data.tar.gz: b7fa2dcf949685dd1c24382e8b83c1b06b57c5abc75e85c6123313dae8d9936d8c90b3d8c58e9af237c07a497b6d0eb3c9e929c2dab840baec42bf338883b8c0
6
+ metadata.gz: fe6821b98e683ead18db025365f4efe6821ca92773f8baacfec88ab12131ab1597d735a1262d2cf65928d24b9b72182a1db2d2cb3435edd6c52248eb029ecd87
7
+ data.tar.gz: e984610303236d5d6f964ed04c61f924560cf2e29b04c1b485434f0755dc9dd676d486b879972f02b4463da4d499fd070e2a8629bfb570cee93e88b0e4eaf531
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ["lib"]
29
29
 
30
- spec.add_dependency "danger"
30
+ spec.add_dependency "danger-gitlab"
31
31
 
32
32
  spec.add_development_dependency "rspec", "~> 3.0"
33
33
  spec.add_development_dependency "rspec-parameterized"
data/lib/danger/helper.rb CHANGED
@@ -51,8 +51,62 @@ module Danger
51
51
  JSON.parse(rsp.body)
52
52
  end
53
53
 
54
+ def added_files
55
+ @added_files ||= if changes_from_api
56
+ changes_from_api.select { |file| file["new_file"] }.map { |file| file["new_path"] }
57
+ else
58
+ git.added_files.to_a
59
+ end
60
+ end
61
+
62
+ def modified_files
63
+ @modified_files ||= if changes_from_api
64
+ changes_from_api.select { |file| !file["new_file"] && !file["deleted_file"] && !file["renamed_file"] }.map { |file| file["new_path"] }
65
+ else
66
+ git.modified_files.to_a
67
+ end
68
+ end
69
+
70
+ def renamed_files
71
+ @renamed_files ||= if changes_from_api
72
+ changes_from_api.select { |file| file["renamed_file"] }.each_with_object([]) do |file, memo|
73
+ memo << { before: file["old_path"], after: file["new_path"] }
74
+ end
75
+ else
76
+ git.renamed_files.to_a
77
+ end
78
+ end
79
+
80
+ def deleted_files
81
+ @deleted_files ||= if changes_from_api
82
+ changes_from_api.select { |file| file["deleted_file"] }.map { |file| file["new_path"] }
83
+ else
84
+ git.deleted_files.to_a
85
+ end
86
+ end
87
+
88
+ def diff_for_file(filename)
89
+ if changes_from_api
90
+ changes_hash = changes_from_api.find { |file| file["new_path"] == filename }
91
+ changes_hash["diff"] if changes_hash
92
+ else
93
+ git.diff_for_file(filename)&.patch
94
+ end
95
+ end
96
+
97
+ def changes_from_api
98
+ return nil unless ci?
99
+ return nil if defined?(@force_changes_from_git)
100
+
101
+ @changes_from_api ||= gitlab_helper.api.merge_request_changes(gitlab_helper.mr_json["project_id"], gitlab_helper.mr_json["iid"]).to_h["changes"]
102
+ rescue
103
+ # Fallback to the Git strategy in any case
104
+ @force_changes_from_git = true
105
+ nil
106
+ end
107
+
54
108
  # Returns a list of all files that have been added, modified or renamed.
55
- # `git.modified_files` might contain paths that already have been renamed,
109
+ # `modified_files` might contain paths that already have been renamed,
56
110
  # so we need to remove them from the list.
57
111
  #
58
112
  # Considering these changes:
@@ -70,10 +124,10 @@ module Danger
70
124
  # @return [Array<String>]
71
125
  def all_changed_files
72
126
  Set.new
73
- .merge(git.added_files.to_a)
74
- .merge(git.modified_files.to_a)
75
- .merge(git.renamed_files.map { |x| x[:after] })
76
- .subtract(git.renamed_files.map { |x| x[:before] })
127
+ .merge(added_files)
128
+ .merge(modified_files)
129
+ .merge(renamed_files.map { |x| x[:after] })
130
+ .subtract(renamed_files.map { |x| x[:before] })
77
131
  .to_a
78
132
  .sort
79
133
  end
@@ -87,10 +141,10 @@ module Danger
87
141
  # "+ # Test change",
88
142
  # "- # Old change" ]
89
143
  def changed_lines(changed_file)
90
- diff = git.diff_for_file(changed_file)
144
+ diff = diff_for_file(changed_file)
91
145
  return [] unless diff
92
146
 
93
- diff.patch.split("\n").select { |line| %r{^[+-]}.match?(line) }
147
+ diff.split("\n").select { |line| %r{^[+-]}.match?(line) }
94
148
  end
95
149
 
96
150
  def release_automation?
@@ -117,23 +171,23 @@ module Danger
117
171
  # @return [Gitlab::Dangerfiles::Changes]
118
172
  def changes(categories)
119
173
  Gitlab::Dangerfiles::Changes.new([]).tap do |changes|
120
- git.added_files.each do |file|
174
+ added_files.each do |file|
121
175
  categories_for_file(file, categories).each { |category| changes << Gitlab::Dangerfiles::Change.new(file, :added, category) }
122
176
  end
123
177
 
124
- git.modified_files.each do |file|
178
+ modified_files.each do |file|
125
179
  categories_for_file(file, categories).each { |category| changes << Gitlab::Dangerfiles::Change.new(file, :modified, category) }
126
180
  end
127
181
 
128
- git.deleted_files.each do |file|
182
+ deleted_files.each do |file|
129
183
  categories_for_file(file, categories).each { |category| changes << Gitlab::Dangerfiles::Change.new(file, :deleted, category) }
130
184
  end
131
185
 
132
- git.renamed_files.map { |x| x[:before] }.each do |file|
186
+ renamed_files.map { |x| x[:before] }.each do |file|
133
187
  categories_for_file(file, categories).each { |category| changes << Gitlab::Dangerfiles::Change.new(file, :renamed_before, category) }
134
188
  end
135
189
 
136
- git.renamed_files.map { |x| x[:after] }.each do |file|
190
+ renamed_files.map { |x| x[:after] }.each do |file|
137
191
  categories_for_file(file, categories).each { |category| changes << Gitlab::Dangerfiles::Change.new(file, :renamed_after, category) }
138
192
  end
139
193
  end
@@ -169,31 +223,31 @@ module Danger
169
223
  end
170
224
 
171
225
  def mr_iid
172
- return "" unless gitlab_helper
226
+ return "" unless ci?
173
227
 
174
228
  gitlab_helper.mr_json["iid"]
175
229
  end
176
230
 
177
231
  def mr_title
178
- return "" unless gitlab_helper
232
+ return "" unless ci?
179
233
 
180
234
  gitlab_helper.mr_json["title"]
181
235
  end
182
236
 
183
237
  def mr_web_url
184
- return "" unless gitlab_helper
238
+ return "" unless ci?
185
239
 
186
240
  gitlab_helper.mr_json["web_url"]
187
241
  end
188
242
 
189
243
  def mr_labels
190
- return [] unless gitlab_helper
244
+ return [] unless ci?
191
245
 
192
246
  gitlab_helper.mr_labels
193
247
  end
194
248
 
195
249
  def mr_target_branch
196
- return "" unless gitlab_helper
250
+ return "" unless ci?
197
251
 
198
252
  gitlab_helper.mr_json["target_branch"]
199
253
  end
@@ -45,17 +45,63 @@ end
45
45
 
46
46
  RSpec.shared_context "with dangerfile" do
47
47
  let(:dangerfile) { DangerSpecHelper.testing_dangerfile }
48
- let(:added_files) { %w[added1] }
49
- let(:modified_files) { %w[modified1] }
50
- let(:deleted_files) { %w[deleted1] }
51
- let(:renamed_before_file) { "renamed_before" }
52
- let(:renamed_after_file) { "renamed_after" }
48
+ let(:added_files) { %w[added-from-git] }
49
+ let(:modified_files) { %w[modified-from-git] }
50
+ let(:deleted_files) { %w[deleted-from-git] }
51
+ let(:renamed_before_file) { "renamed_before-from-git" }
52
+ let(:renamed_after_file) { "renamed_after-from-git" }
53
53
  let(:renamed_files) { [{ before: renamed_before_file, after: renamed_after_file }] }
54
54
  let(:change_class) { Gitlab::Dangerfiles::Change }
55
55
  let(:changes_class) { Gitlab::Dangerfiles::Changes }
56
56
  let(:changes) { changes_class.new([]) }
57
57
  let(:mr_title) { "Fake Title" }
58
58
  let(:mr_labels) { [] }
59
+ let(:mr_changes_from_api) do
60
+ {
61
+ "changes" => [
62
+ {
63
+ "old_path" => "added-from-api",
64
+ "new_path" => "added-from-api",
65
+ "a_mode" => "100644",
66
+ "b_mode" => "100644",
67
+ "new_file" => true,
68
+ "renamed_file" => false,
69
+ "deleted_file" => false,
70
+ "diff" => "@@ -49,6 +49,14 @@\n- vendor/ruby/\n policy: pull\n \n+.danger-review-cache:\n",
71
+ },
72
+ {
73
+ "old_path" => "modified-from-api",
74
+ "new_path" => "modified-from-api",
75
+ "a_mode" => "100644",
76
+ "b_mode" => "100644",
77
+ "new_file" => false,
78
+ "renamed_file" => false,
79
+ "deleted_file" => false,
80
+ "diff" => "@@ -49,6 +49,14 @@\n- vendor/ruby/\n policy: pull\n \n+.danger-review-cache:\n",
81
+ },
82
+ {
83
+ "old_path" => "renamed_before-from-api",
84
+ "new_path" => "renamed_after-from-api",
85
+ "a_mode" => "100644",
86
+ "b_mode" => "100644",
87
+ "new_file" => false,
88
+ "renamed_file" => true,
89
+ "deleted_file" => false,
90
+ "diff" => "@@ -49,6 +49,14 @@\n- vendor/ruby/\n policy: pull\n \n+.danger-review-cache:\n",
91
+ },
92
+ {
93
+ "old_path" => "deleted-from-api",
94
+ "new_path" => "deleted-from-api",
95
+ "a_mode" => "100644",
96
+ "b_mode" => "100644",
97
+ "new_file" => false,
98
+ "renamed_file" => false,
99
+ "deleted_file" => true,
100
+ "diff" => "@@ -49,6 +49,14 @@\n- vendor/ruby/\n policy: pull\n \n+.danger-review-cache:\n",
101
+ },
102
+ ],
103
+ }
104
+ end
59
105
 
60
106
  let(:fake_git) { double("fake-git", added_files: added_files, modified_files: modified_files, deleted_files: deleted_files, renamed_files: renamed_files) }
61
107
  let(:fake_helper) { double("fake-helper", changes: changes, mr_iid: 1234, mr_title: mr_title, mr_labels: mr_labels) }
@@ -1,5 +1,5 @@
1
1
  module Gitlab
2
2
  module Dangerfiles
3
- VERSION = "0.9.0"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-dangerfiles
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rémy Coutable
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-17 00:00:00.000000000 Z
11
+ date: 2021-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: danger
14
+ name: danger-gitlab
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="