Skip to content
This repository was archived by the owner on Jan 22, 2026. It is now read-only.

Commit 22a13b1

Browse files
committed
Add spinner for vulnerability checks and syncing processes
1 parent d92cfd2 commit 22a13b1

2 files changed

Lines changed: 46 additions & 40 deletions

File tree

lib/git/pkgs/commands/vulns/base.rb

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,9 @@ def sync_packages(packages)
143143

144144
client = OsvClient.new
145145
results = begin
146-
client.query_batch(packages.map { |p| p.slice(:ecosystem, :name, :version) })
146+
Spinner.with_spinner("Checking vulnerabilities...") do
147+
client.query_batch(packages.map { |p| p.slice(:ecosystem, :name, :version) })
148+
end
147149
rescue OsvClient::ApiError => e
148150
error "Failed to query OSV API: #{e.message}"
149151
end
@@ -176,20 +178,22 @@ def ensure_vulns_synced
176178
return if packages_to_sync.empty?
177179

178180
client = OsvClient.new
179-
packages_to_sync.each_slice(100) do |batch|
180-
queries = batch.map do |pkg|
181-
osv_ecosystem = Ecosystems.to_osv(pkg.ecosystem)
182-
next unless osv_ecosystem
181+
Spinner.with_spinner("Syncing vulnerability data...") do
182+
packages_to_sync.each_slice(100) do |batch|
183+
queries = batch.map do |pkg|
184+
osv_ecosystem = Ecosystems.to_osv(pkg.ecosystem)
185+
next unless osv_ecosystem
183186

184-
{ ecosystem: osv_ecosystem, name: pkg.name }
185-
end.compact
187+
{ ecosystem: osv_ecosystem, name: pkg.name }
188+
end.compact
186189

187-
results = client.query_batch(queries)
188-
fetch_vulnerability_details(client, results)
190+
results = client.query_batch(queries)
191+
fetch_vulnerability_details(client, results)
189192

190-
batch.each do |pkg|
191-
purl = Ecosystems.generate_purl(pkg.ecosystem, pkg.name)
192-
mark_package_synced(purl, pkg.ecosystem, pkg.name) if purl
193+
batch.each do |pkg|
194+
purl = Ecosystems.generate_purl(pkg.ecosystem, pkg.name)
195+
mark_package_synced(purl, pkg.ecosystem, pkg.name) if purl
196+
end
193197
end
194198
end
195199
end

lib/git/pkgs/commands/vulns/sync.rb

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -66,36 +66,38 @@ def run
6666
synced = 0
6767
vuln_count = 0
6868

69-
packages_to_sync.each_slice(100) do |batch|
70-
queries = batch.map do |pkg|
71-
osv_ecosystem = Ecosystems.to_osv(pkg.ecosystem)
72-
next unless osv_ecosystem
73-
74-
{ ecosystem: osv_ecosystem, name: pkg.name }
75-
end.compact
76-
77-
results = client.query_batch(queries)
78-
79-
# Collect all unique vuln IDs from this batch to fetch full details
80-
vuln_ids = results.flatten.map { |v| v["id"] }.uniq
81-
82-
# Fetch full vulnerability details and create records
83-
vuln_ids.each do |vuln_id|
84-
existing = Models::Vulnerability.first(id: vuln_id)
85-
next if existing&.vulnerability_packages&.any? && !@options[:refresh]
86-
87-
begin
88-
full_vuln = client.get_vulnerability(vuln_id)
89-
Models::Vulnerability.from_osv(full_vuln)
90-
vuln_count += 1
91-
rescue OsvClient::ApiError
92-
# Skip vulnerabilities we can't fetch
69+
Spinner.with_spinner("Fetching from OSV...") do
70+
packages_to_sync.each_slice(100) do |batch|
71+
queries = batch.map do |pkg|
72+
osv_ecosystem = Ecosystems.to_osv(pkg.ecosystem)
73+
next unless osv_ecosystem
74+
75+
{ ecosystem: osv_ecosystem, name: pkg.name }
76+
end.compact
77+
78+
results = client.query_batch(queries)
79+
80+
# Collect all unique vuln IDs from this batch to fetch full details
81+
vuln_ids = results.flatten.map { |v| v["id"] }.uniq
82+
83+
# Fetch full vulnerability details and create records
84+
vuln_ids.each do |vuln_id|
85+
existing = Models::Vulnerability.first(id: vuln_id)
86+
next if existing&.vulnerability_packages&.any? && !@options[:refresh]
87+
88+
begin
89+
full_vuln = client.get_vulnerability(vuln_id)
90+
Models::Vulnerability.from_osv(full_vuln)
91+
vuln_count += 1
92+
rescue OsvClient::ApiError
93+
# Skip vulnerabilities we can't fetch
94+
end
9395
end
94-
end
9596

96-
batch.each do |pkg|
97-
pkg.mark_vulns_synced
98-
synced += 1
97+
batch.each do |pkg|
98+
pkg.mark_vulns_synced
99+
synced += 1
100+
end
99101
end
100102
end
101103

0 commit comments

Comments
 (0)