fix(#125): reject duplicate migration versions

This commit is contained in:
QiuSW
2026-08-28 10:41:04 +08:00
parent 2f5415553e
commit 7b5574506a
3 changed files with 20 additions and 0 deletions
+3
View File
@@ -32,6 +32,9 @@ func (e *Migration) SetDb(db *gorm.DB) {
func (e *Migration) SetVersion(k string, f func(db *gorm.DB, version string) error) {
e.mutex.Lock()
defer e.mutex.Unlock()
if _, exists := e.version[k]; exists {
panic(fmt.Sprintf("duplicate migration version registered: %s", k))
}
e.version[k] = f
}
+17
View File
@@ -1,6 +1,7 @@
package migration
import (
"fmt"
"log"
"os"
"regexp"
@@ -123,3 +124,19 @@ func TestMigrateRunsPendingVersions(t *testing.T) {
t.Fatalf("汇总不对: %q", output)
}
}
func TestSetVersionRejectsDuplicateRegistration(t *testing.T) {
migration := &Migration{version: map[string]func(*gorm.DB, string) error{}}
migration.SetVersion("0000000000001", func(*gorm.DB, string) error { return nil })
defer func() {
value := recover()
if value == nil {
t.Fatal("重复迁移版本不应静默覆盖")
}
if !strings.Contains(fmt.Sprint(value), "duplicate migration version registered: 0000000000001") {
t.Fatalf("重复版本错误不明确: %v", value)
}
}()
migration.SetVersion("0000000000001", func(*gorm.DB, string) error { return nil })
}