From d2a9a66ef20d088fb01305bbd5bcfcce0f407671 Mon Sep 17 00:00:00 2001 From: rfritzsche Date: Mon, 9 Mar 2026 16:54:47 +0100 Subject: [PATCH 1/3] Include prerelease gems in compact index during incremental update In `update_index`, the call to `update_compact_index` only received `released` specs, excluding prerelease gems from the compact index files (`versions`, `info/`). Since modern Bundler prefers the compact index, prerelease gems were effectively invisible after an incremental `--update`. Fix by passing all specs (both released and prerelease) to `update_compact_index`. Fixes #48 --- lib/rubygems/indexer.rb | 2 +- test/rubygems/test_gem_indexer.rb | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/rubygems/indexer.rb b/lib/rubygems/indexer.rb index 65fa768..dccaa58 100644 --- a/lib/rubygems/indexer.rb +++ b/lib/rubygems/indexer.rb @@ -450,7 +450,7 @@ def update_index if @build_compact Gem.time "Updated compact index files" do - files += update_compact_index released, @dest_directory, @directory + files += update_compact_index specs, @dest_directory, @directory end end diff --git a/test/rubygems/test_gem_indexer.rb b/test/rubygems/test_gem_indexer.rb index c86c83e..f0dc9ef 100644 --- a/test/rubygems/test_gem_indexer.rb +++ b/test/rubygems/test_gem_indexer.rb @@ -459,14 +459,14 @@ def test_update_index 1 |checksum:#{file_sha256(File.join(gems, "e-1.gem"))} INFO_FILE - assert_equal <<~INFO_FILE, File.read(File.join(infodir, "d")) - #{info_d_file.chomp} - 2.1 |checksum:#{file_sha256(File.join(gems, "d-2.1.gem"))} - INFO_FILE + d_info = File.read(File.join(infodir, "d")) + assert d_info.start_with?(info_d_file), "info/d should preserve original content" + assert_match(/^2\.1 \|checksum:#{Regexp.escape(file_sha256(File.join(gems, "d-2.1.gem")))}$/, d_info) + assert_match(/^2\.2\.a \|checksum:#{Regexp.escape(file_sha256(File.join(gems, "d-2.2.a.gem")))}/, d_info) assert_equal <<~VERSIONS_FILE, File.read(File.join(@indexerdir, "versions")) #{versions_file.chomp} - d 2.1 #{file_md5(File.join(@indexerdir, "info", "d"))} + d 2.1,2.2.a #{file_md5(File.join(@indexerdir, "info", "d"))} e 1 #{file_md5(File.join(@indexerdir, "info", "e"))} VERSIONS_FILE From c30dc552db9b4409358de80cde532b368c5eb3f6 Mon Sep 17 00:00:00 2001 From: rfritzsche Date: Wed, 8 Apr 2026 10:47:36 +0200 Subject: [PATCH 2/3] Use assert_equal for info/d prerelease assertions Replace assert_match/start_with? with assert_equal for the info/d compact index file, keeping full regression coverage as requested in review feedback. --- test/rubygems/test_gem_indexer.rb | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/test/rubygems/test_gem_indexer.rb b/test/rubygems/test_gem_indexer.rb index f0dc9ef..4bc94ab 100644 --- a/test/rubygems/test_gem_indexer.rb +++ b/test/rubygems/test_gem_indexer.rb @@ -459,10 +459,11 @@ def test_update_index 1 |checksum:#{file_sha256(File.join(gems, "e-1.gem"))} INFO_FILE - d_info = File.read(File.join(infodir, "d")) - assert d_info.start_with?(info_d_file), "info/d should preserve original content" - assert_match(/^2\.1 \|checksum:#{Regexp.escape(file_sha256(File.join(gems, "d-2.1.gem")))}$/, d_info) - assert_match(/^2\.2\.a \|checksum:#{Regexp.escape(file_sha256(File.join(gems, "d-2.2.a.gem")))}/, d_info) + assert_equal <<~INFO_FILE, File.read(File.join(infodir, "d")) + #{info_d_file.chomp} + 2.1 |checksum:#{file_sha256(File.join(gems, "d-2.1.gem"))} + 2.2.a |checksum:#{file_sha256(File.join(gems, "d-2.2.a.gem"))} + INFO_FILE assert_equal <<~VERSIONS_FILE, File.read(File.join(@indexerdir, "versions")) #{versions_file.chomp} From 6428295f26f0372538199919eddbc19514480857 Mon Sep 17 00:00:00 2001 From: rfritzsche Date: Thu, 23 Apr 2026 09:35:51 +0200 Subject: [PATCH 3/3] Fix test for prerelease info line on Ruby < 3.5.0 On Ruby < 3.5.0, prerelease gems include a rubygems:> 1.3.1 dependency in their compact index info line. The assertion for the d-2.2.a prerelease entry added during update_index was missing this version-conditional suffix, causing failures on Ruby 3.0, 3.1, and 3.2. --- test/rubygems/test_gem_indexer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/rubygems/test_gem_indexer.rb b/test/rubygems/test_gem_indexer.rb index 4bc94ab..b9b5597 100644 --- a/test/rubygems/test_gem_indexer.rb +++ b/test/rubygems/test_gem_indexer.rb @@ -462,7 +462,7 @@ def test_update_index assert_equal <<~INFO_FILE, File.read(File.join(infodir, "d")) #{info_d_file.chomp} 2.1 |checksum:#{file_sha256(File.join(gems, "d-2.1.gem"))} - 2.2.a |checksum:#{file_sha256(File.join(gems, "d-2.2.a.gem"))} + 2.2.a |checksum:#{file_sha256(File.join(gems, "d-2.2.a.gem"))}#{",rubygems:> 1.3.1" if Gem::VERSION < "3.5.0"} INFO_FILE assert_equal <<~VERSIONS_FILE, File.read(File.join(@indexerdir, "versions"))