From d6a8abad00115289ed5316769557eb13c2af663d Mon Sep 17 00:00:00 2001 From: Moritz Date: Tue, 6 Dec 2022 17:49:28 +0100 Subject: [PATCH 1/2] fix: keep abra working if recipe catalogue is offline --- pkg/recipe/recipe.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pkg/recipe/recipe.go b/pkg/recipe/recipe.go index 57f840fb..c5067ece 100644 --- a/pkg/recipe/recipe.go +++ b/pkg/recipe/recipe.go @@ -712,14 +712,17 @@ func ReadRecipeCatalogue() (RecipeCatalogue, error) { recipeFSIsLatest, err := recipeCatalogueFSIsLatest() if err != nil { - return nil, err + logrus.Error(err) + logrus.Error("failed to access last recipe catalogue") } if !recipeFSIsLatest { if err := readRecipeCatalogueWeb(&recipes); err != nil { - return nil, err + logrus.Error(err) + logrus.Error("failed to access web recipe catalogue") + } else { + return recipes, nil } - return recipes, nil } if err := readRecipeCatalogueFS(&recipes); err != nil { -- 2.47.2 From 7bba18b47bab69843dab81bd9f0565a145bea5ac Mon Sep 17 00:00:00 2001 From: Moritz Date: Mon, 12 Dec 2022 16:14:50 +0100 Subject: [PATCH 2/2] more specific error handling --- pkg/recipe/recipe.go | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/pkg/recipe/recipe.go b/pkg/recipe/recipe.go index c5067ece..1042d042 100644 --- a/pkg/recipe/recipe.go +++ b/pkg/recipe/recipe.go @@ -2,6 +2,7 @@ package recipe import ( "encoding/json" + "errors" "fmt" "io/ioutil" "os" @@ -665,13 +666,21 @@ func CheckoutDefaultBranch(repo *git.Repository, recipeName string) (plumbing.Re return branch, nil } +type CatalogueOfflineError struct { + msg string +} + +func (e *CatalogueOfflineError) Error() string { + return fmt.Sprintf("catalogue offline: %s", e.msg) +} + // recipeCatalogueFSIsLatest checks whether the recipe catalogue stored locally // is up to date. func recipeCatalogueFSIsLatest() (bool, error) { httpClient := web.NewHTTPRetryClient() res, err := httpClient.Head(RecipeCatalogueURL) if err != nil { - return false, err + return false, &CatalogueOfflineError{err.Error()} } lastModified := res.Header["Last-Modified"][0] @@ -712,17 +721,21 @@ func ReadRecipeCatalogue() (RecipeCatalogue, error) { recipeFSIsLatest, err := recipeCatalogueFSIsLatest() if err != nil { - logrus.Error(err) - logrus.Error("failed to access last recipe catalogue") + var offlineErr *CatalogueOfflineError + if errors.As(err, &offlineErr) { + logrus.Error(err) + logrus.Error("unable to retrieve catalogue from internet, using local copy.") + recipeFSIsLatest = true + } else { + return nil, err + } } if !recipeFSIsLatest { if err := readRecipeCatalogueWeb(&recipes); err != nil { - logrus.Error(err) - logrus.Error("failed to access web recipe catalogue") - } else { - return recipes, nil + return nil, err } + return recipes, nil } if err := readRecipeCatalogueFS(&recipes); err != nil { -- 2.47.2