0
0
forked from toolshed/abra

fix: not flaky catalogue generate

See toolshed/abra#464
This commit is contained in:
2025-01-05 11:57:51 +01:00
parent 2bc77de751
commit 4923984e84
10 changed files with 159 additions and 76 deletions

View File

@ -1,9 +1,7 @@
package git
import (
"fmt"
"os"
"path/filepath"
"strings"
"coopcloud.tech/abra/pkg/log"
@ -11,10 +9,23 @@ import (
"github.com/go-git/go-git/v5/plumbing"
)
// gitCloneIgnoreErr checks whether we can ignore a git clone error or not.
func gitCloneIgnoreErr(err error) bool {
if strings.Contains(err.Error(), "authentication required") {
return true
}
if strings.Contains(err.Error(), "remote repository is empty") {
return true
}
return false
}
// Clone runs a git clone which accounts for different default branches.
func Clone(dir, url string) error {
if _, err := os.Stat(dir); os.IsNotExist(err) {
log.Debugf("%s does not exist, attempting git clone of %s", dir, url)
log.Debugf("git clone: %s", dir, url)
_, err := git.PlainClone(dir, false, &git.CloneOptions{
URL: url,
@ -23,6 +34,11 @@ func Clone(dir, url string) error {
SingleBranch: true,
})
if err != nil && gitCloneIgnoreErr(err) {
log.Debugf("git clone: %s cloned successfully", dir)
return nil
}
if err != nil {
log.Debug("git clone: main branch failed, attempting master branch")
@ -32,12 +48,13 @@ func Clone(dir, url string) error {
ReferenceName: plumbing.ReferenceName("refs/heads/master"),
SingleBranch: true,
})
if err != nil {
if strings.Contains(err.Error(), "authentication required") {
name := filepath.Base(dir)
return fmt.Errorf("unable to clone %s, does %s exist?", name, url)
}
if err != nil && gitCloneIgnoreErr(err) {
log.Debugf("git clone: %s cloned successfully", dir)
return nil
}
if err != nil {
return err
}
}