legionio 1.4.123 → 1.4.125

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: 6d78fc201a2601de3ce04849d24c9234c75bd77f6cdb3b46ca700f7cdd6fcc9f
4
- data.tar.gz: 5746d467cb709dbf02837ebd2d4288dbe137d234c8f6e1e3b3445dcd899d3515
3
+ metadata.gz: d4a06840ad4b9512eabb972bda5a1b4d5881ecb01b5e13c9e14559d587c3f766
4
+ data.tar.gz: ddfec68fad3ed57a7d7e1c62006d5784e923d0ae6f483edf37784b33d85db349
5
5
  SHA512:
6
- metadata.gz: 106274f7798ddf16c3da87f2c0ba204e98c0f8c8d9dedf312376fc8cbde8dbac447306cfd76c6cb0a5e210a22db9304fc37f5e3305f1cd80d918514aad80b4b4
7
- data.tar.gz: 54ebdc455f6f5f86a0564809a67d6f3edffc20b7c3f438956382d32bff16d2b3469f51d4a48c1a30c312edfe0ad2d81abacc4962a96e79e7669d652cb4644605
6
+ metadata.gz: d7fde033daf8d06e45dbbe5ccbf9774e34b8daeb64514995c80bfd80b9f0223547b5ce899c94e1f6e968cad184790893da1024f2cbcbff3fe727680342032ebb
7
+ data.tar.gz: d2a3c645e9cc6f22d020deb00911452a4ba14adb2719703f09d2e0de90bf4957475276519a8e789a8889dec9e344befcb4e8700d8ad1f47589a38626b91f8c75
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Legion Changelog
2
2
 
3
+ ## [1.4.125] - 2026-03-22
4
+
5
+ ### Changed
6
+ - Parallelize update command version checks using RubyGems HTTP API and concurrent-ruby thread pool
7
+ - Skip `gem install` entirely when all gems are already at latest version
8
+ - Only install gems that are actually outdated instead of reinstalling all gems
9
+
10
+ ## [1.4.124] - 2026-03-22
11
+
12
+ ### Changed
13
+ - Update gemspec dependency version constraints for all legion-* gems to match current releases
14
+
3
15
  ## [1.4.123] - 2026-03-22
4
16
 
5
17
  ### Changed
data/legionio.gemspec CHANGED
@@ -34,7 +34,7 @@ Gem::Specification.new do |spec|
34
34
  spec.bindir = 'exe'
35
35
  spec.executables = %w[legion legionio]
36
36
 
37
- spec.add_dependency 'legion-mcp'
37
+ spec.add_dependency 'legion-mcp', '>= 0.4.3'
38
38
 
39
39
  spec.add_dependency 'kramdown', '>= 2.0'
40
40
 
@@ -52,13 +52,13 @@ Gem::Specification.new do |spec|
52
52
  spec.add_dependency 'thor', '>= 1.3'
53
53
  spec.add_dependency 'tty-spinner', '~> 0.9'
54
54
 
55
- spec.add_dependency 'legion-cache', '>= 0.3'
56
- spec.add_dependency 'legion-crypt', '>= 0.3'
57
- spec.add_dependency 'legion-json', '>= 1.2'
58
- spec.add_dependency 'legion-logging', '>= 0.3'
59
- spec.add_dependency 'legion-settings', '>= 0.3'
60
- spec.add_dependency 'legion-transport', '>= 1.2'
55
+ spec.add_dependency 'legion-cache', '>= 1.3.9'
56
+ spec.add_dependency 'legion-crypt', '>= 1.4.8'
57
+ spec.add_dependency 'legion-json', '>= 1.2.0'
58
+ spec.add_dependency 'legion-logging', '>= 1.2.8'
59
+ spec.add_dependency 'legion-settings', '>= 1.3.12'
60
+ spec.add_dependency 'legion-transport', '>= 1.3.6'
61
61
 
62
- spec.add_dependency 'legion-tty'
62
+ spec.add_dependency 'legion-tty', '>= 0.4.30'
63
63
  spec.add_dependency 'lex-node'
64
64
  end
@@ -3,6 +3,9 @@
3
3
  require 'English'
4
4
  require 'thor'
5
5
  require 'rbconfig'
6
+ require 'concurrent'
7
+ require 'net/http'
8
+ require 'json'
6
9
 
7
10
  module Legion
8
11
  module CLI
@@ -72,27 +75,65 @@ module Legion
72
75
  end
73
76
 
74
77
  def update_gems(gem_names, gem_bin, dry_run: false)
78
+ local_versions = snapshot_versions(gem_names)
79
+ remote_versions = fetch_remote_versions_parallel(gem_names)
80
+
81
+ outdated = gem_names.select do |name|
82
+ remote = remote_versions[name]
83
+ local = local_versions[name]
84
+ remote && local && Gem::Version.new(remote) > Gem::Version.new(local)
85
+ end
86
+
87
+ if dry_run
88
+ return gem_names.map do |name|
89
+ local = local_versions[name]
90
+ remote = remote_versions[name]
91
+ needs_update = remote && local && Gem::Version.new(remote) > Gem::Version.new(local)
92
+ { name: name, from: local, to: remote, status: needs_update ? 'available' : 'current' }
93
+ end
94
+ end
95
+
96
+ return gem_names.map { |name| { name: name, status: 'updated', output: '' } } if outdated.empty?
97
+
98
+ output = `#{gem_bin} install #{outdated.join(' ')} --no-document 2>&1`
99
+ success = $CHILD_STATUS.success?
75
100
  gem_names.map do |name|
76
- if dry_run
77
- remote = fetch_remote_version(name)
78
- local = begin
79
- Gem::Specification.find_by_name(name).version.to_s
80
- rescue Gem::MissingSpecError
81
- nil
82
- end
83
- { name: name, from: local, to: remote, status: remote && remote != local ? 'available' : 'current' }
84
- else
85
- output = `#{gem_bin} install #{name} --no-document 2>&1`
86
- success = $CHILD_STATUS.success?
101
+ if outdated.include?(name)
87
102
  { name: name, status: success ? 'updated' : 'failed', output: output.strip }
103
+ else
104
+ { name: name, status: 'updated', output: '' }
105
+ end
106
+ end
107
+ end
108
+
109
+ def fetch_remote_versions_parallel(gem_names)
110
+ results = Concurrent::Hash.new
111
+ pool = Concurrent::FixedThreadPool.new([gem_names.size, 24].min)
112
+ latch = Concurrent::CountDownLatch.new(gem_names.size)
113
+
114
+ gem_names.each do |name|
115
+ pool.post do
116
+ version = fetch_remote_version(name)
117
+ results[name] = version if version
118
+ rescue StandardError => e
119
+ Legion::Logging.debug("UpdateCommand#fetch_remote_version #{name}: #{e.message}") if defined?(Legion::Logging)
120
+ ensure
121
+ latch.count_down
88
122
  end
89
123
  end
124
+
125
+ latch.wait(30)
126
+ pool.shutdown
127
+ results
90
128
  end
91
129
 
92
130
  def fetch_remote_version(name)
93
- output = `gem search ^#{name}$ --remote --no-verbose 2>/dev/null`.strip
94
- match = output.match(/#{Regexp.escape(name)}\s+\(([^)]+)\)/)
95
- match ? match[1] : nil
131
+ uri = URI("https://rubygems.org/api/v1/versions/#{name}/latest.json")
132
+ response = Net::HTTP.get_response(uri)
133
+ return nil unless response.is_a?(Net::HTTPSuccess)
134
+
135
+ data = ::JSON.parse(response.body)
136
+ data['version']
96
137
  end
97
138
 
98
139
  def display_results(out, results, before, after)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Legion
4
- VERSION = '1.4.123'
4
+ VERSION = '1.4.125'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legionio
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.123
4
+ version: 1.4.125
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: '0'
18
+ version: 0.4.3
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: '0'
25
+ version: 0.4.3
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: kramdown
28
28
  requirement: !ruby/object:Gem::Requirement
@@ -225,98 +225,98 @@ dependencies:
225
225
  requirements:
226
226
  - - ">="
227
227
  - !ruby/object:Gem::Version
228
- version: '0.3'
228
+ version: 1.3.9
229
229
  type: :runtime
230
230
  prerelease: false
231
231
  version_requirements: !ruby/object:Gem::Requirement
232
232
  requirements:
233
233
  - - ">="
234
234
  - !ruby/object:Gem::Version
235
- version: '0.3'
235
+ version: 1.3.9
236
236
  - !ruby/object:Gem::Dependency
237
237
  name: legion-crypt
238
238
  requirement: !ruby/object:Gem::Requirement
239
239
  requirements:
240
240
  - - ">="
241
241
  - !ruby/object:Gem::Version
242
- version: '0.3'
242
+ version: 1.4.8
243
243
  type: :runtime
244
244
  prerelease: false
245
245
  version_requirements: !ruby/object:Gem::Requirement
246
246
  requirements:
247
247
  - - ">="
248
248
  - !ruby/object:Gem::Version
249
- version: '0.3'
249
+ version: 1.4.8
250
250
  - !ruby/object:Gem::Dependency
251
251
  name: legion-json
252
252
  requirement: !ruby/object:Gem::Requirement
253
253
  requirements:
254
254
  - - ">="
255
255
  - !ruby/object:Gem::Version
256
- version: '1.2'
256
+ version: 1.2.0
257
257
  type: :runtime
258
258
  prerelease: false
259
259
  version_requirements: !ruby/object:Gem::Requirement
260
260
  requirements:
261
261
  - - ">="
262
262
  - !ruby/object:Gem::Version
263
- version: '1.2'
263
+ version: 1.2.0
264
264
  - !ruby/object:Gem::Dependency
265
265
  name: legion-logging
266
266
  requirement: !ruby/object:Gem::Requirement
267
267
  requirements:
268
268
  - - ">="
269
269
  - !ruby/object:Gem::Version
270
- version: '0.3'
270
+ version: 1.2.8
271
271
  type: :runtime
272
272
  prerelease: false
273
273
  version_requirements: !ruby/object:Gem::Requirement
274
274
  requirements:
275
275
  - - ">="
276
276
  - !ruby/object:Gem::Version
277
- version: '0.3'
277
+ version: 1.2.8
278
278
  - !ruby/object:Gem::Dependency
279
279
  name: legion-settings
280
280
  requirement: !ruby/object:Gem::Requirement
281
281
  requirements:
282
282
  - - ">="
283
283
  - !ruby/object:Gem::Version
284
- version: '0.3'
284
+ version: 1.3.12
285
285
  type: :runtime
286
286
  prerelease: false
287
287
  version_requirements: !ruby/object:Gem::Requirement
288
288
  requirements:
289
289
  - - ">="
290
290
  - !ruby/object:Gem::Version
291
- version: '0.3'
291
+ version: 1.3.12
292
292
  - !ruby/object:Gem::Dependency
293
293
  name: legion-transport
294
294
  requirement: !ruby/object:Gem::Requirement
295
295
  requirements:
296
296
  - - ">="
297
297
  - !ruby/object:Gem::Version
298
- version: '1.2'
298
+ version: 1.3.6
299
299
  type: :runtime
300
300
  prerelease: false
301
301
  version_requirements: !ruby/object:Gem::Requirement
302
302
  requirements:
303
303
  - - ">="
304
304
  - !ruby/object:Gem::Version
305
- version: '1.2'
305
+ version: 1.3.6
306
306
  - !ruby/object:Gem::Dependency
307
307
  name: legion-tty
308
308
  requirement: !ruby/object:Gem::Requirement
309
309
  requirements:
310
310
  - - ">="
311
311
  - !ruby/object:Gem::Version
312
- version: '0'
312
+ version: 0.4.30
313
313
  type: :runtime
314
314
  prerelease: false
315
315
  version_requirements: !ruby/object:Gem::Requirement
316
316
  requirements:
317
317
  - - ">="
318
318
  - !ruby/object:Gem::Version
319
- version: '0'
319
+ version: 0.4.30
320
320
  - !ruby/object:Gem::Dependency
321
321
  name: lex-node
322
322
  requirement: !ruby/object:Gem::Requirement