forked from toolshed/abra
fix: ensure catalogue is clean/up-to-date
Closes coop-cloud/organising#367
This commit is contained in:
@ -12,6 +12,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"coopcloud.tech/abra/pkg/catalogue"
|
||||
"coopcloud.tech/abra/pkg/compose"
|
||||
"coopcloud.tech/abra/pkg/config"
|
||||
"coopcloud.tech/abra/pkg/formatter"
|
||||
@ -359,11 +360,21 @@ func EnsureLatest(recipeName string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
branch, err := GetDefaultBranch(repo, recipeName)
|
||||
meta, err := GetRecipeMeta(recipeName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var branch plumbing.ReferenceName
|
||||
if meta.DefaultBranch != "" {
|
||||
branch = plumbing.ReferenceName(fmt.Sprintf("refs/heads/%s", meta.DefaultBranch))
|
||||
} else {
|
||||
branch, err = gitPkg.GetDefaultBranch(repo, recipeDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
checkOutOpts := &git.CheckoutOptions{
|
||||
Create: false,
|
||||
Force: true,
|
||||
@ -575,7 +586,8 @@ func EnsureUpToDate(recipeName string) error {
|
||||
}
|
||||
|
||||
if !isClean {
|
||||
return fmt.Errorf("%s (%s) has locally unstaged changes? please commit/remove your changes before proceeding", recipeName, recipeDir)
|
||||
msg := "%s (%s) has locally unstaged changes? please commit/remove your changes before proceeding"
|
||||
return fmt.Errorf(msg, recipeName, recipeDir)
|
||||
}
|
||||
|
||||
repo, err := git.PlainOpen(recipeDir)
|
||||
@ -598,7 +610,7 @@ func EnsureUpToDate(recipeName string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
branch, err := CheckoutDefaultBranch(repo, recipeName)
|
||||
branch, err := gitPkg.CheckoutDefaultBranch(repo, recipeDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -619,55 +631,6 @@ func EnsureUpToDate(recipeName string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetDefaultBranch(repo *git.Repository, recipeName string) (plumbing.ReferenceName, error) {
|
||||
recipeDir := path.Join(config.RECIPES_DIR, recipeName)
|
||||
|
||||
meta, _ := GetRecipeMeta(recipeName)
|
||||
if meta.DefaultBranch != "" {
|
||||
return plumbing.ReferenceName(fmt.Sprintf("refs/heads/%s", meta.DefaultBranch)), nil
|
||||
}
|
||||
|
||||
branch := "master"
|
||||
if !gitPkg.HasBranch(repo, "master") {
|
||||
if !gitPkg.HasBranch(repo, "main") {
|
||||
return "", fmt.Errorf("failed to select default branch in %s", recipeDir)
|
||||
}
|
||||
branch = "main"
|
||||
}
|
||||
|
||||
return plumbing.ReferenceName(fmt.Sprintf("refs/heads/%s", branch)), nil
|
||||
}
|
||||
|
||||
func CheckoutDefaultBranch(repo *git.Repository, recipeName string) (plumbing.ReferenceName, error) {
|
||||
recipeDir := path.Join(config.RECIPES_DIR, recipeName)
|
||||
|
||||
branch, err := GetDefaultBranch(repo, recipeName)
|
||||
if err != nil {
|
||||
return plumbing.ReferenceName(""), err
|
||||
}
|
||||
|
||||
worktree, err := repo.Worktree()
|
||||
if err != nil {
|
||||
return plumbing.ReferenceName(""), err
|
||||
}
|
||||
|
||||
checkOutOpts := &git.CheckoutOptions{
|
||||
Create: false,
|
||||
Force: true,
|
||||
Branch: branch,
|
||||
}
|
||||
|
||||
if err := worktree.Checkout(checkOutOpts); err != nil {
|
||||
recipeDir := path.Join(config.RECIPES_DIR, recipeName)
|
||||
logrus.Debugf("failed to check out %s in %s", branch, recipeDir)
|
||||
return branch, err
|
||||
}
|
||||
|
||||
logrus.Debugf("successfully checked out %v in %s", branch, recipeDir)
|
||||
|
||||
return branch, nil
|
||||
}
|
||||
|
||||
type CatalogueOfflineError struct {
|
||||
msg string
|
||||
}
|
||||
@ -717,7 +680,7 @@ func recipeCatalogueFSIsLatest() (bool, error) {
|
||||
func ReadRecipeCatalogue() (RecipeCatalogue, error) {
|
||||
recipes := make(RecipeCatalogue)
|
||||
|
||||
if err := EnsureCatalogue(); err != nil {
|
||||
if err := catalogue.EnsureCatalogue(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@ -1024,7 +987,7 @@ func GetRecipeVersions(recipeName string) (RecipeVersions, error) {
|
||||
return versions, err
|
||||
}
|
||||
|
||||
_, err = CheckoutDefaultBranch(repo, recipeName)
|
||||
_, err = gitPkg.CheckoutDefaultBranch(repo, recipeDir)
|
||||
if err != nil {
|
||||
return versions, err
|
||||
}
|
||||
@ -1048,18 +1011,3 @@ func GetRecipeCatalogueVersions(recipeName string, catl RecipeCatalogue) ([]stri
|
||||
|
||||
return versions, nil
|
||||
}
|
||||
|
||||
// EnsureCatalogue ensures that the catalogue is cloned locally & present.
|
||||
func EnsureCatalogue() error {
|
||||
catalogueDir := path.Join(config.ABRA_DIR, "catalogue")
|
||||
if _, err := os.Stat(catalogueDir); err != nil && os.IsNotExist(err) {
|
||||
url := fmt.Sprintf("%s/%s.git", config.REPOS_BASE_URL, config.CATALOGUE_JSON_REPO_NAME)
|
||||
if err := gitPkg.Clone(catalogueDir, url); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
logrus.Debugf("cloned catalogue repository to %s", catalogueDir)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user