more specific error handling
All checks were successful
continuous-integration/drone/pr Build is passing

This commit is contained in:
Moritz 2022-12-12 16:14:50 +01:00
parent d6a8abad00
commit 7bba18b47b

View File

@ -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 {
var offlineErr *CatalogueOfflineError
if errors.As(err, &offlineErr) {
logrus.Error(err)
logrus.Error("failed to access last recipe catalogue")
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 {