bibliothecary 15.2.1 → 15.3.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: 4bdea955af49167626e322630af5f77c27f6234c2bd8964b0ff64730e891a4fe
4
- data.tar.gz: 8fa218df81a9fe6ff5170d7e0464171dd1ad8721007f4e88b298dd41da9242a2
3
+ metadata.gz: 1c856b89f10d42290894679e20641f18ba61f5929f3c3d86b3c43d66ae0c50ba
4
+ data.tar.gz: d76b5df4cb31982f2045338a693639e733331c557f6516ad060045f9f4a499f5
5
5
  SHA512:
6
- metadata.gz: f92bf663b346b9500dc7ca3c0b3d42c1f3be93c712910a6aaf31082f88c1f2214a21a1aebca4c765313563bcceb32459b4a3da6cb5955869a74e228f6fceed77
7
- data.tar.gz: 9e1ebebedf3ea4599132f7d2480a32c93dc34cca309fe6542cccf9d83ba8223c7fed9046a6f43e73779842ce8feb2800ae3f456221082b798c8e44f430e87410
6
+ metadata.gz: 949ac2408b25189052b10b1c2be9c66a73fca42134f4d47eb711b52061ef5625b1263ccdc3373bb815f327e3699d021210af2214ac85be84ec580c7dc95b957e
7
+ data.tar.gz: a62f39651879069a6d1ae6aed2506704af55f7296e3a5ba49ffceec08296598994448efc82d4d1bc356dc0e3f8bfda20d78f0798d909afc24461438552e583fa
data/CHANGELOG.md CHANGED
@@ -13,6 +13,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
13
13
 
14
14
  ### Removed
15
15
 
16
+ ## [15.3.0]
17
+
18
+ ### Changed
19
+
20
+ - Return the leading ":" with Gradle project names from gradle-dependencies-q.txt, and use "0.0.0" for a version instead of "*" since this is a lockfie.
21
+
22
+ ### Added
23
+
24
+ - Adds a new Bibliothecary::Parsers::Maven.parse_resolved_gradle_dep_line() method for parsing a single line in gradle-dependencies-q.txt, and optimize it a bit.
25
+
16
26
  ## [15.2.1]
17
27
 
18
28
  ### Changed
@@ -24,12 +24,12 @@ module Bibliothecary
24
24
  GRADLE_ARROW_REGEXP = / -> /
25
25
 
26
26
  # The name of the project containing the given dependencies
27
- GRADLE_PROJECT_REGEXP = /\s*(Root p|P)roject '?:?([^\s']+)'?/
27
+ GRADLE_PROJECT_REGEXP = /\s*(Root p|P)roject '?(:?[^\s']+)'?/
28
28
 
29
29
  # Dependencies that are on-disk projects, eg:
30
30
  # e.g. "\--- project :api:my-internal-project"
31
31
  # e.g. "+--- my-group:my-alias:1.2.3 -> project :client (*)"
32
- GRADLE_DEPENDENCY_PROJECT_REGEXP = /project :?(\S+)?/
32
+ GRADLE_DEPENDENCY_PROJECT_REGEXP = /project (:?\S+)?/
33
33
 
34
34
  # line ending legend: (c) means a dependency constraint, (n) means not resolved, or (*) means resolved previously, e.g. org.springframework.boot:spring-boot-starter-web:2.1.0.M3 (*)
35
35
  # e.g. the "(n)" in "+--- my-group:my-name:1.2.3 (n)"
@@ -196,88 +196,95 @@ module Bibliothecary
196
196
 
197
197
  def self.parse_gradle_resolved(file_contents, options: {})
198
198
  keep_subprojects = options.fetch(:keep_subprojects_in_maven_tree, false)
199
+ source = options.fetch(:filename, nil)
199
200
  current_type = nil
200
201
  project_name = nil
201
202
 
202
- dependencies = file_contents.lines.filter_map do |line|
203
- next if line.strip.end_with?("(n)") # skip unresolved or already-resolved dependencies
204
-
205
- if project_name.nil? && (project_name_match = GRADLE_PROJECT_REGEXP.match(line))
206
- project_name = project_name_match.captures[1]
207
- next
203
+ dependencies = file_contents.lines
204
+ .filter_map do |line|
205
+ line = line.strip
206
+ if project_name.nil? && (project_name_match = GRADLE_PROJECT_REGEXP.match(line))
207
+ project_name = project_name_match.captures[1]
208
+ nil
209
+ elsif (current_type_match = GRADLE_TYPE_REGEXP.match(line))
210
+ current_type = current_type_match.captures[0] if current_type_match
211
+ nil
212
+ else
213
+ parse_resolved_gradle_dep_line(line, current_type: current_type, keep_subprojects: keep_subprojects, source: source)
214
+ end
208
215
  end
216
+ .uniq { |item| [item.name, item.requirement, item.type, item.original_name, item.original_requirement] }
209
217
 
210
- current_type_match = GRADLE_TYPE_REGEXP.match(line)
211
- current_type = current_type_match.captures[0] if current_type_match
218
+ ParserResult.new(
219
+ project_name: project_name,
220
+ dependencies: dependencies
221
+ )
222
+ end
212
223
 
213
- gradle_dep_match = GRADLE_DEP_REGEXP.match(line)
214
- next unless gradle_dep_match
224
+ def self.parse_resolved_gradle_dep_line(line, current_type: nil, keep_subprojects: false, source: nil)
225
+ return if line.end_with?("(n)") # skip unresolved or already-resolved dependencies
215
226
 
216
- # omit Gradle project dependencies
217
- if (project_match = line.match(GRADLE_DEPENDENCY_PROJECT_REGEXP))
218
- next unless keep_subprojects
227
+ gradle_dep_match = GRADLE_DEP_REGEXP.match(line)
228
+ return unless gradle_dep_match
219
229
 
220
- # an empty project name is self-referential (i.e. a cycle), and we don't need to track the manifest's
221
- # project itself, e.g. "+--- project :"
222
- next if project_match[1].nil?
230
+ # omit Gradle project dependencies
231
+ if (project_match = line.match(GRADLE_DEPENDENCY_PROJECT_REGEXP))
232
+ return unless keep_subprojects
223
233
 
224
- sub_project_name = project_match[1]
225
- # gradle sub-project versions cannot be specified when including them (gradle just uses whichever version is in the
226
- # codebase), and their versions are 'unspecified' if not set, so just use a wildcard placeholder since it doesn't matter.
227
- line = line.sub(GRADLE_DEPENDENCY_PROJECT_REGEXP, ":#{sub_project_name}:*")
228
- end
234
+ # an empty project name is self-referential (i.e. a cycle), and we don't need to track the manifest's
235
+ # project itself, e.g. "+--- project :"
236
+ return if project_match[1].nil?
229
237
 
230
- cleaned_line = line
231
- .split(gradle_dep_match.captures[0])[1]
232
- .sub(GRADLE_LINE_ENDING_REGEXP, "")
233
- .sub(/ FAILED$/, "") # dependency could not be resolved (but still may have a version)
234
- .strip
235
-
236
- # " -> " is either for an aliased dependency, or a version that was resolved from a different requirement or no requirement.
237
- if cleaned_line =~ GRADLE_ARROW_REGEXP
238
- original_depstring, resolved_depstring = *cleaned_line.split(GRADLE_ARROW_REGEXP, 2)
239
-
240
- parts = original_depstring.split(":")
241
- original_name = parts[0..1].join(":") # original at minimum will have a 2-part name
242
- original_requirement = parts[2] || "*"
243
-
244
- parts = resolved_depstring.split(":")
245
- resolved_requirement = parts.pop # resolved at minimum will have a 1-part version
246
- resolved_name = parts.join(":")
247
-
248
- # this case is not an actual alias, just a different version was resolved, so won't keep track of original
249
- if resolved_name.empty? && !original_name.empty?
250
- resolved_name = original_name
251
- original_name = nil
252
- original_requirement = nil
253
- end
254
- else
255
- original_name = nil
256
- original_requirement = nil
238
+ sub_project_name = project_match[1]
239
+ # gradle sub-project versions cannot be specified when including them (gradle just uses whichever version is in the
240
+ # codebase), and their versions are 'unspecified' if not set, so just use a placeholder version since it doesn't matter.
241
+ line = line.sub(project_match[0], "#{sub_project_name}:0.0.0")
242
+ end
243
+
244
+ cleaned_line = line
245
+ .split(gradle_dep_match.captures[0])[1]
246
+ .sub(GRADLE_LINE_ENDING_REGEXP, "")
247
+ .sub(/ FAILED$/, "") # dependency could not be resolved (but still may have a version)
248
+ .strip
257
249
 
258
- # handle simple resolved dep
259
- parts = cleaned_line.split(":")
260
- next if parts.size < 3 # we didn't get a full name and version, so skip it
250
+ # " -> " is either for an aliased dependency, or a version that was resolved from a different requirement or no requirement.
251
+ if cleaned_line.include?(" -> ")
252
+ original_depstring, resolved_depstring = cleaned_line.split(" -> ", 2)
261
253
 
262
- resolved_requirement = parts.pop
263
- resolved_name = parts.join(":")
254
+ parts = original_depstring.split(":")
255
+ original_name = parts[0..1].join(":") # original at minimum will have a 2-part name
256
+ original_requirement = parts[2] || "*"
257
+
258
+ parts = resolved_depstring.split(":")
259
+ resolved_requirement = parts.pop # resolved at minimum will have a 1-part version
260
+ resolved_name = parts.join(":")
261
+
262
+ # this case is not an actual alias, just a different version was resolved, so won't keep track of original
263
+ if resolved_name.empty? && !original_name.empty?
264
+ resolved_name = original_name
265
+ original_name = nil
266
+ original_requirement = nil
264
267
  end
268
+ else
269
+ original_name = nil
270
+ original_requirement = nil
265
271
 
266
- Dependency.new(
267
- original_name: original_name,
268
- original_requirement: original_requirement,
269
- name: resolved_name,
270
- requirement: resolved_requirement,
271
- type: current_type,
272
- source: options.fetch(:filename, nil),
273
- platform: platform_name
274
- )
272
+ # handle simple resolved dep
273
+ parts = cleaned_line.split(":")
274
+ return if parts.size < 3 # we didn't get a full name and version, so skip it
275
+
276
+ resolved_requirement = parts.pop
277
+ resolved_name = parts.join(":")
275
278
  end
276
- .uniq { |item| [item.name, item.requirement, item.type, item.original_name, item.original_requirement] }
277
279
 
278
- ParserResult.new(
279
- project_name: project_name,
280
- dependencies: dependencies
280
+ Dependency.new(
281
+ original_name: original_name,
282
+ original_requirement: original_requirement,
283
+ name: resolved_name,
284
+ requirement: resolved_requirement,
285
+ type: current_type,
286
+ source: source,
287
+ platform: platform_name
281
288
  )
282
289
  end
283
290
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bibliothecary
4
- VERSION = "15.2.1"
4
+ VERSION = "15.3.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bibliothecary
3
3
  version: !ruby/object:Gem::Version
4
- version: 15.2.1
4
+ version: 15.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Nesbitt