migrations.go 1.4 KB

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