This repository has been archived on 2024-02-15. You can view files and clone it, but cannot push or open issues or pull requests.
config-mapper/internal/git.go
2022-02-25 18:31:11 +01:00

61 lines
1.1 KiB
Go

package mapper
import (
"errors"
"os"
"github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing/transport/http"
"github.com/spf13/viper"
)
var (
ErrDirIsFile = errors.New("path is a file")
ErrEmptyGitConfig = errors.New("empty git configuration")
)
func OpenGitRepo() (*git.Repository, error) {
configFolder := viper.GetString("storage.location")
s, err := os.Stat(configFolder)
if err != nil {
if os.IsNotExist(err) {
gitConfig := viper.GetStringMapString("storage.git")
if gitConfig == nil {
return nil, ErrEmptyGitConfig
}
repo, err := git.PlainClone(viper.GetString("storage.location"), false, &git.CloneOptions{
URL: gitConfig["repository"],
Progress: os.Stdout,
Auth: &http.BasicAuth{
Username: gitConfig["username"],
Password: gitConfig["password"],
},
})
if err != nil {
return nil, err
}
return repo, nil
}
return nil, err
}
if s.IsDir() {
return nil, ErrDirIsFile
}
repo, err := git.PlainOpen(configFolder)
if err != nil {
if err == git.ErrRepositoryNotExists {
return nil, err
}
return nil, err
}
return repo, nil
}