migrations.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package settings
  2. import (
  3. "fmt"
  4. "github.com/Jguer/yay/v12/pkg/db"
  5. "github.com/leonelquinteros/gotext"
  6. )
  7. type configMigration interface {
  8. // Description of what the migration does
  9. fmt.Stringer
  10. // return true if migration was done
  11. Do(config *Configuration) bool
  12. // Target version of the migration (e.g. "11.2.1")
  13. // Should match the version of yay releasing this migration
  14. TargetVersion() string
  15. }
  16. type configProviderMigration struct{}
  17. func (migration *configProviderMigration) String() string {
  18. return gotext.Get("Disable 'provides' setting by default")
  19. }
  20. func (migration *configProviderMigration) Do(config *Configuration) bool {
  21. if config.Provides {
  22. config.Provides = false
  23. return true
  24. }
  25. return false
  26. }
  27. func (migration *configProviderMigration) TargetVersion() string {
  28. return "11.2.1"
  29. }
  30. func DefaultMigrations() []configMigration {
  31. return []configMigration{
  32. &configProviderMigration{},
  33. }
  34. }
  35. func (c *Configuration) RunMigrations(migrations []configMigration, configPath string) error {
  36. saveConfig := false
  37. for _, migration := range migrations {
  38. if db.VerCmp(migration.TargetVersion(), c.Version) > 0 {
  39. if migration.Do(c) {
  40. c.Runtime.Logger.Infoln("Config migration executed (",
  41. migration.TargetVersion(), "):", migration)
  42. saveConfig = true
  43. }
  44. }
  45. }
  46. if saveConfig {
  47. return c.Save(configPath)
  48. }
  49. return nil
  50. }