cyclonedx-cocoapods 1.4.0 → 1.4.1

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: 4b3c1577d54844759e40218fb3b0876014aa8a2eac1a8ea2be2512cab13d79f9
4
- data.tar.gz: dd99bd2aa09a1d6ecd956fdd3118a064df6662026b6816ee86f9a2f553347068
3
+ metadata.gz: 84ed77501efec7ca77fce507dd1dbc4a29ffb4b8cf45fc6b942eafe3901af95a
4
+ data.tar.gz: 85204bb25786de11c3dc7ec302d016431ebecd7078149081a6b294ba65f756aa
5
5
  SHA512:
6
- metadata.gz: 5e82c25c27de0fbede464d04a06b9b7f06c3fc79550041835395c6fe5aa32a0f1c4bba1d391b988ff6d39107f696960f064730de43ef8c0f0e8000d576cd1010
7
- data.tar.gz: '048fa99979dd4e606b4952412dad3675bad2ebe3e45eccd8513089f18908d5594213031cb85130434f002d7a8edbafbb67818e602c648b49137768e8085c445b'
6
+ metadata.gz: 7f4b84eb0a11f7f6488fe9fccef7806e786db41ea647806046b729b39952172175df7b8884b17c60e5cac0b246a9bfc6e56d8e53f69b3ad9521c9cde0f19726b
7
+ data.tar.gz: f719564347931af554dbc2705022a548405bbd95320db5c094f5616166a46ecd830d8fddedcaebd9e24fd76ff6e8be2e1917d3a3be8bc6ede3f21e77e763af77
data/CHANGELOG.md CHANGED
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [1.4.1]
8
+
9
+ ### Changed
10
+ - Minimum Ruby version is now v2.6.3 so the [Array.union](https://apidock.com/ruby/v2_6_3/Array/union) function can be used.
11
+
12
+ ### Fixed
13
+ - Improved performance when analyzing a Podfile with many pods. ([Issue #78](https://github.com/CycloneDX/cyclonedx-cocoapods/issues/78)) [@macblazer](https://github.com/macblazer).
14
+
7
15
  ## [1.4.0]
8
16
 
9
17
  ### Added
@@ -100,12 +100,10 @@ module CycloneDX
100
100
  parsed_options[:name] = name
101
101
  end
102
102
  options.on('-v', '--version version', 'Version of the component for which the BOM is generated') do |version|
103
- begin
104
- Gem::Version.new(version)
105
- parsed_options[:version] = version
106
- rescue StandardError => e
107
- raise OptionParser::InvalidArgument, e.message
108
- end
103
+ Gem::Version.new(version)
104
+ parsed_options[:version] = version
105
+ rescue StandardError => e
106
+ raise OptionParser::InvalidArgument, e.message
109
107
  end
110
108
  options.on('-t', '--type type',
111
109
  'Type of the component for which the BOM is generated ' \
@@ -184,12 +184,18 @@ module CycloneDX
184
184
  end
185
185
  end
186
186
 
187
- def append_all_pod_dependencies(pods_used, pods_cache)
188
- result = pods_used
187
+ # Calculate simple array of all used pods plus their direct dependencies
188
+ #
189
+ # @param [Array<String>] top_level_pods List of pod names that are directly imported by the Podfile
190
+ # @param [Hash<String,Array<String>>] pods_cache Dependency information directly from the Podfile.lock;
191
+ # keys are string pod names, values are list of direct dependencies of the given pod.
192
+ # @return [Array<String>, Hash<String,Array<String>>] First element is list of all used pod names.
193
+ # Second element is a hash: keys are string pod names, values are the direct dependencies of that pod.
194
+ def append_all_pod_dependencies(top_level_pods, pods_cache)
195
+ result = top_level_pods
189
196
  original_number = 0
190
- dependencies_hash = {}
191
197
 
192
- # Loop adding pod dependencies until we are not adding any more dependencies to the result
198
+ # Loop adding pod dependencies until we are not adding any more dependencies to the result.
193
199
  # This brings in all the transitive dependencies of every top level pod.
194
200
  # Note this also handles two edge cases:
195
201
  # 1. Having a Podfile with no pods used.
@@ -197,15 +203,20 @@ module CycloneDX
197
203
  while result.length != original_number
198
204
  original_number = result.length
199
205
 
200
- pods_used.each do |pod_name|
206
+ top_level_pods.each do |pod_name|
201
207
  if pods_cache.key?(pod_name)
202
- result.push(*pods_cache[pod_name])
203
- dependencies_hash[pod_name] = pods_cache[pod_name].empty? ? [] : pods_cache[pod_name]
208
+ # Append all of the dependencies of this pod into the main list, if they aren't already in the list
209
+ result = result.union(pods_cache[pod_name])
204
210
  end
205
211
  end
206
212
 
207
- result = result.uniq
208
- pods_used = result
213
+ top_level_pods = result
214
+ end
215
+
216
+ # Now that we have the simple list of all unique pods, grab their direct dependencies
217
+ dependencies_hash = {}
218
+ result.each do |pod_name|
219
+ dependencies_hash[pod_name] = pods_cache.key?(pod_name) ? pods_cache[pod_name] : []
209
220
  end
210
221
 
211
222
  [result, dependencies_hash]
@@ -21,6 +21,6 @@
21
21
 
22
22
  module CycloneDX
23
23
  module CocoaPods
24
- VERSION = '1.4.0'
24
+ VERSION = '1.4.1'
25
25
  end
26
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cyclonedx-cocoapods
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - José González
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2024-10-15 00:00:00.000000000 Z
12
+ date: 2024-11-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cocoapods
@@ -51,48 +51,6 @@ dependencies:
51
51
  - - "<"
52
52
  - !ruby/object:Gem::Version
53
53
  version: '2.0'
54
- - !ruby/object:Gem::Dependency
55
- name: equivalent-xml
56
- requirement: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: 0.6.0
61
- type: :development
62
- prerelease: false
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: 0.6.0
68
- - !ruby/object:Gem::Dependency
69
- name: rake
70
- requirement: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '13.0'
75
- type: :development
76
- prerelease: false
77
- version_requirements: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '13.0'
82
- - !ruby/object:Gem::Dependency
83
- name: rspec
84
- requirement: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '3.0'
89
- type: :development
90
- prerelease: false
91
- version_requirements: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '3.0'
96
54
  description: CycloneDX is a lightweight software bill-of-material (SBOM) specification
97
55
  designed for use in application security contexts and supply chain component analysis.
98
56
  This Gem generates CycloneDX BOMs from CocoaPods projects.
@@ -133,14 +91,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
91
  requirements:
134
92
  - - ">="
135
93
  - !ruby/object:Gem::Version
136
- version: 2.4.0
94
+ version: 2.6.3
137
95
  required_rubygems_version: !ruby/object:Gem::Requirement
138
96
  requirements:
139
97
  - - ">="
140
98
  - !ruby/object:Gem::Version
141
99
  version: '0'
142
100
  requirements: []
143
- rubygems_version: 3.5.16
101
+ rubygems_version: 3.5.23
144
102
  signing_key:
145
103
  specification_version: 4
146
104
  summary: CycloneDX software bill-of-material (SBOM) generation utility