migrations.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package settings
  2. import (
  3. "fmt"
  4. "github.com/Jguer/yay/v12/pkg/db"
  5. "github.com/Jguer/yay/v12/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(logger *text.Logger, migrations []configMigration,
  37. configPath, newVersion string,
  38. ) error {
  39. saveConfig := false
  40. for _, migration := range migrations {
  41. if db.VerCmp(migration.TargetVersion(), c.Version) > 0 {
  42. if migration.Do(c) {
  43. logger.Infoln("Config migration executed (",
  44. migration.TargetVersion(), "):", migration)
  45. saveConfig = true
  46. }
  47. }
  48. }
  49. if saveConfig {
  50. return c.Save(configPath, newVersion)
  51. }
  52. return nil
  53. }