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

Commit 0b0a711

Browse files
committed
Implement auto-upgrade for outdated database schemas
1 parent db535f5 commit 0b0a711

3 files changed

Lines changed: 14 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
## [Unreleased]
22

3+
- Auto-upgrade outdated database schemas instead of erroring
4+
35
## [0.9.0] - 2026-01-14
46

57
- `git pkgs sbom` command to export dependencies as SPDX or CycloneDX

lib/git/pkgs/database.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,10 @@ def self.check_version!
295295
return unless needs_upgrade?
296296

297297
stored = stored_version || 0
298-
raise SchemaVersionError, "Database schema is v#{stored}, expected v#{SCHEMA_VERSION}. Run 'git pkgs upgrade' to rebuild."
298+
puts "Upgrading database schema v#{stored} → v#{SCHEMA_VERSION}..." unless Git::Pkgs.quiet
299+
300+
disconnect
301+
Commands::Init.new(["--force"]).run
299302
end
300303

301304
# Legacy migration kept for reference, no longer used.

test/git/pkgs/test_database.rb

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,17 +75,21 @@ def test_needs_upgrade_returns_false_for_current_schema
7575
refute Git::Pkgs::Database.needs_upgrade?
7676
end
7777

78-
def test_check_version_raises_for_old_schema
78+
def test_check_version_auto_upgrades_old_schema
7979
Git::Pkgs::Database.connect(@git_dir, check_version: false)
8080
Git::Pkgs::Database.create_schema
8181
Git::Pkgs::Database.set_version(1)
8282

8383
assert Git::Pkgs::Database.needs_upgrade?
84-
error = assert_raises(Git::Pkgs::SchemaVersionError) do
84+
85+
Dir.chdir(@test_dir) do
86+
Git::Pkgs.quiet = true
8587
Git::Pkgs::Database.check_version!
88+
Git::Pkgs.quiet = false
8689
end
87-
assert_match(/v1.*v#{Git::Pkgs::Database::SCHEMA_VERSION}/, error.message)
88-
assert_match(/git pkgs upgrade/, error.message)
90+
91+
assert_equal Git::Pkgs::Database::SCHEMA_VERSION, Git::Pkgs::Database.stored_version
92+
refute Git::Pkgs::Database.needs_upgrade?
8993
end
9094

9195
def test_create_schema_creates_vuln_tables

0 commit comments

Comments
 (0)