From cfa6c9f1ec1d2d4d25215659f3761b3f943ea5df Mon Sep 17 00:00:00 2001 From: cosrnic <75631523+cosrnic@users.noreply.github.com> Date: Sat, 15 Jun 2024 20:34:43 +0100 Subject: [PATCH 1/5] chore: refresh version manifest on fail --- cmd/mc/install.go | 23 +++++++++++++++++++++-- internal/pkg/game/version.go | 4 ++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/cmd/mc/install.go b/cmd/mc/install.go index 7cc7d1a..e522eea 100644 --- a/cmd/mc/install.go +++ b/cmd/mc/install.go @@ -14,6 +14,8 @@ import ( //todo tab completions +var triedToUpdate = false + type installOpts struct { app *cli.App @@ -53,8 +55,17 @@ func (o *installOpts) validateArgs(cmd *cobra.Command, args []string) (err error // Validate version arg (0) versionManager := o.app.VersionManager() if o.version, err = versionManager.FindVanilla(args[0]); errors.Is(err, game.ErrUnknownVersion) { - return fmt.Errorf("%w: %s", err, args[0]) + if triedToUpdate { + return fmt.Errorf("%w: %s", err, args[0]) + } + fmt.Println("Couldn't find version: ", args[0], ", refreshing manfiest") + triedToUpdate = true + if err := versionManager.UpdateManifest(); err != nil { + return err + } + return o.validateArgs(cmd, args) } + triedToUpdate = false // Validate name arg (1, optional) if len(args) > 1 && !profile.IsValidName(args[1]) { @@ -70,7 +81,15 @@ func (o *installOpts) validateArgs(cmd *cobra.Command, args []string) (err error o.version, err = versionManager.FindFabric(args[0], o.fabricLoader) if errors.Is(err, game.ErrUnknownFabricVersion) { - return fmt.Errorf("%w: %s", err, args[0]) + if triedToUpdate { + return fmt.Errorf("%w: %s", err, args[0]) + } + fmt.Println("Couldn't find fabric for version: ", args[0], ", refreshing manfiest") + triedToUpdate = true + if err := versionManager.UpdateManifest(); err != nil { + return err + } + return o.validateArgs(cmd, args) } if errors.Is(err, game.ErrUnknownFabricLoader) { return fmt.Errorf("%w: %s", err, o.fabricLoader) diff --git a/internal/pkg/game/version.go b/internal/pkg/game/version.go index e8b9d69..b235cc7 100644 --- a/internal/pkg/game/version.go +++ b/internal/pkg/game/version.go @@ -92,7 +92,7 @@ func NewVersionManager(dataDir string) (*VersionManager, error) { m := &VersionManager{cacheFile: cacheFile} if _, err := os.Stat(cacheFile); errors.Is(err, fs.ErrNotExist) { - if err := m.updateManifest(); err != nil { + if err := m.UpdateManifest(); err != nil { return nil, err } } else { @@ -148,7 +148,7 @@ func (m *VersionManager) FabricLoaderExists(name string) bool { return ok } -func (m *VersionManager) updateManifest() error { +func (m *VersionManager) UpdateManifest() error { var result VersionManifestV2 result.LastUpdated = time.Now() result.Vanilla.Versions = make(map[string]*gameModel.VersionInfo) From d26036dcf564ec372cf1b82d82c0330a23c34ef9 Mon Sep 17 00:00:00 2001 From: cosrnic <75631523+cosrnic@users.noreply.github.com> Date: Sat, 15 Jun 2024 21:37:01 +0100 Subject: [PATCH 2/5] chore: move manifest check into VersionManager --- cmd/mc/install.go | 23 ++--------------------- internal/pkg/game/version.go | 23 +++++++++++++++++++---- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/cmd/mc/install.go b/cmd/mc/install.go index e522eea..7cc7d1a 100644 --- a/cmd/mc/install.go +++ b/cmd/mc/install.go @@ -14,8 +14,6 @@ import ( //todo tab completions -var triedToUpdate = false - type installOpts struct { app *cli.App @@ -55,17 +53,8 @@ func (o *installOpts) validateArgs(cmd *cobra.Command, args []string) (err error // Validate version arg (0) versionManager := o.app.VersionManager() if o.version, err = versionManager.FindVanilla(args[0]); errors.Is(err, game.ErrUnknownVersion) { - if triedToUpdate { - return fmt.Errorf("%w: %s", err, args[0]) - } - fmt.Println("Couldn't find version: ", args[0], ", refreshing manfiest") - triedToUpdate = true - if err := versionManager.UpdateManifest(); err != nil { - return err - } - return o.validateArgs(cmd, args) + return fmt.Errorf("%w: %s", err, args[0]) } - triedToUpdate = false // Validate name arg (1, optional) if len(args) > 1 && !profile.IsValidName(args[1]) { @@ -81,15 +70,7 @@ func (o *installOpts) validateArgs(cmd *cobra.Command, args []string) (err error o.version, err = versionManager.FindFabric(args[0], o.fabricLoader) if errors.Is(err, game.ErrUnknownFabricVersion) { - if triedToUpdate { - return fmt.Errorf("%w: %s", err, args[0]) - } - fmt.Println("Couldn't find fabric for version: ", args[0], ", refreshing manfiest") - triedToUpdate = true - if err := versionManager.UpdateManifest(); err != nil { - return err - } - return o.validateArgs(cmd, args) + return fmt.Errorf("%w: %s", err, args[0]) } if errors.Is(err, game.ErrUnknownFabricLoader) { return fmt.Errorf("%w: %s", err, o.fabricLoader) diff --git a/internal/pkg/game/version.go b/internal/pkg/game/version.go index b235cc7..21a40b6 100644 --- a/internal/pkg/game/version.go +++ b/internal/pkg/game/version.go @@ -31,6 +31,7 @@ var ( ErrUnknownVersion = errors.New("unknown version") ErrUnknownFabricVersion = errors.New("unknown fabric version") ErrUnknownFabricLoader = errors.New("unknown fabric loader") + TriedToUpdate = false ) type ( @@ -92,7 +93,7 @@ func NewVersionManager(dataDir string) (*VersionManager, error) { m := &VersionManager{cacheFile: cacheFile} if _, err := os.Stat(cacheFile); errors.Is(err, fs.ErrNotExist) { - if err := m.UpdateManifest(); err != nil { + if err := m.updateManifest(); err != nil { return nil, err } } else { @@ -117,8 +118,15 @@ func NewVersionManager(dataDir string) (*VersionManager, error) { func (m *VersionManager) FindVanilla(name string) (*gameModel.VersionInfo, error) { v, ok := m.manifestV2.Vanilla.Versions[strings.ToLower(name)] if !ok { - return nil, ErrUnknownVersion + if TriedToUpdate { + return nil, ErrUnknownVersion + } + TriedToUpdate = true + fmt.Println("Couldn't find version: ", name, ", refreshing manfiest") + m.updateManifest() + return m.FindVanilla(name) } + TriedToUpdate = false return v, nil } @@ -129,8 +137,15 @@ func (m *VersionManager) FindFabric(name, loader string) (*gameModel.VersionInfo partial, ok := m.manifestV2.Fabric.Versions[strings.ToLower(name)] if !ok { - return nil, ErrUnknownFabricVersion + if TriedToUpdate { + return nil, ErrUnknownFabricVersion + } + TriedToUpdate = true + fmt.Println("Couldn't find fabric for version: ", name, ", refreshing manfiest") + m.updateManifest() + return m.FindFabric(name, loader) } + TriedToUpdate = false return &gameModel.VersionInfo{ Id: fmt.Sprintf(partial.Id, loader), @@ -148,7 +163,7 @@ func (m *VersionManager) FabricLoaderExists(name string) bool { return ok } -func (m *VersionManager) UpdateManifest() error { +func (m *VersionManager) updateManifest() error { var result VersionManifestV2 result.LastUpdated = time.Now() result.Vanilla.Versions = make(map[string]*gameModel.VersionInfo) From e66bfa9a71cc31c5fea9a7cce95f2d3667f40ca0 Mon Sep 17 00:00:00 2001 From: cosrnic <75631523+cosrnic@users.noreply.github.com> Date: Sat, 15 Jun 2024 21:44:07 +0100 Subject: [PATCH 3/5] fix: make triedToUpdate private --- internal/pkg/game/version.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/pkg/game/version.go b/internal/pkg/game/version.go index 21a40b6..a18c432 100644 --- a/internal/pkg/game/version.go +++ b/internal/pkg/game/version.go @@ -31,7 +31,7 @@ var ( ErrUnknownVersion = errors.New("unknown version") ErrUnknownFabricVersion = errors.New("unknown fabric version") ErrUnknownFabricLoader = errors.New("unknown fabric loader") - TriedToUpdate = false + triedToUpdate = false ) type ( @@ -118,15 +118,15 @@ func NewVersionManager(dataDir string) (*VersionManager, error) { func (m *VersionManager) FindVanilla(name string) (*gameModel.VersionInfo, error) { v, ok := m.manifestV2.Vanilla.Versions[strings.ToLower(name)] if !ok { - if TriedToUpdate { + if triedToUpdate { return nil, ErrUnknownVersion } - TriedToUpdate = true + triedToUpdate = true fmt.Println("Couldn't find version: ", name, ", refreshing manfiest") m.updateManifest() return m.FindVanilla(name) } - TriedToUpdate = false + triedToUpdate = false return v, nil } @@ -137,15 +137,15 @@ func (m *VersionManager) FindFabric(name, loader string) (*gameModel.VersionInfo partial, ok := m.manifestV2.Fabric.Versions[strings.ToLower(name)] if !ok { - if TriedToUpdate { + if triedToUpdate { return nil, ErrUnknownFabricVersion } - TriedToUpdate = true + triedToUpdate = true fmt.Println("Couldn't find fabric for version: ", name, ", refreshing manfiest") m.updateManifest() return m.FindFabric(name, loader) } - TriedToUpdate = false + triedToUpdate = false return &gameModel.VersionInfo{ Id: fmt.Sprintf(partial.Id, loader), From 454d31ba51bc65e3d5edbf8d4d7946274b16dba0 Mon Sep 17 00:00:00 2001 From: cosrnic <75631523+cosrnic@users.noreply.github.com> Date: Sat, 15 Jun 2024 21:46:44 +0100 Subject: [PATCH 4/5] fix: move triedToUpdate to the VersionManager struct --- internal/pkg/game/version.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/pkg/game/version.go b/internal/pkg/game/version.go index a18c432..d17b4d7 100644 --- a/internal/pkg/game/version.go +++ b/internal/pkg/game/version.go @@ -31,7 +31,6 @@ var ( ErrUnknownVersion = errors.New("unknown version") ErrUnknownFabricVersion = errors.New("unknown fabric version") ErrUnknownFabricLoader = errors.New("unknown fabric loader") - triedToUpdate = false ) type ( @@ -84,8 +83,9 @@ type ( // Version manager type VersionManager struct { - cacheFile string - manifestV2 *VersionManifestV2 + cacheFile string + manifestV2 *VersionManifestV2 + triedToUpdate bool } func NewVersionManager(dataDir string) (*VersionManager, error) { @@ -118,15 +118,15 @@ func NewVersionManager(dataDir string) (*VersionManager, error) { func (m *VersionManager) FindVanilla(name string) (*gameModel.VersionInfo, error) { v, ok := m.manifestV2.Vanilla.Versions[strings.ToLower(name)] if !ok { - if triedToUpdate { + if m.triedToUpdate { return nil, ErrUnknownVersion } - triedToUpdate = true + m.triedToUpdate = true fmt.Println("Couldn't find version: ", name, ", refreshing manfiest") m.updateManifest() return m.FindVanilla(name) } - triedToUpdate = false + m.triedToUpdate = false return v, nil } @@ -137,15 +137,15 @@ func (m *VersionManager) FindFabric(name, loader string) (*gameModel.VersionInfo partial, ok := m.manifestV2.Fabric.Versions[strings.ToLower(name)] if !ok { - if triedToUpdate { + if m.triedToUpdate { return nil, ErrUnknownFabricVersion } - triedToUpdate = true + m.triedToUpdate = true fmt.Println("Couldn't find fabric for version: ", name, ", refreshing manfiest") m.updateManifest() return m.FindFabric(name, loader) } - triedToUpdate = false + m.triedToUpdate = false return &gameModel.VersionInfo{ Id: fmt.Sprintf(partial.Id, loader), From 2d9ace121c2ab35522d4e7ebd643e3ffb6e88f04 Mon Sep 17 00:00:00 2001 From: cosrnic <75631523+cosrnic@users.noreply.github.com> Date: Sun, 16 Jun 2024 20:01:24 +0100 Subject: [PATCH 5/5] chore: remove debug println's --- internal/pkg/game/version.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/pkg/game/version.go b/internal/pkg/game/version.go index d17b4d7..d68442b 100644 --- a/internal/pkg/game/version.go +++ b/internal/pkg/game/version.go @@ -122,7 +122,6 @@ func (m *VersionManager) FindVanilla(name string) (*gameModel.VersionInfo, error return nil, ErrUnknownVersion } m.triedToUpdate = true - fmt.Println("Couldn't find version: ", name, ", refreshing manfiest") m.updateManifest() return m.FindVanilla(name) } @@ -141,7 +140,6 @@ func (m *VersionManager) FindFabric(name, loader string) (*gameModel.VersionInfo return nil, ErrUnknownFabricVersion } m.triedToUpdate = true - fmt.Println("Couldn't find fabric for version: ", name, ", refreshing manfiest") m.updateManifest() return m.FindFabric(name, loader) }