forked from toolshed/abra
cli
cmd
pkg
app
autocomplete
catalogue
client
config
container
context
dns
envfile
formatter
git
add.go
branch.go
clone.go
commit.go
common.go
diff.go
init.go
init_test.go
push.go
read.go
read_test.go
remote.go
integration
limit
lint
log
recipe
secret
server
service
ssh
test
upstream
web
scripts
tests
vendor
.dockerignore
.drone.yml
.envrc.sample
.gitignore
.goreleaser.yml
AUTHORS.md
Dockerfile
LICENSE
Makefile
README.md
go.mod
go.sum
renovate.json
76 lines
1.9 KiB
Go
76 lines
1.9 KiB
Go
package git
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"coopcloud.tech/abra/pkg/log"
|
|
"github.com/go-git/go-git/v5"
|
|
"github.com/go-git/go-git/v5/plumbing"
|
|
"github.com/go-git/go-git/v5/plumbing/object"
|
|
)
|
|
|
|
// Init inits a new repo and commits all the stuff if you want
|
|
func Init(repoPath string, commit bool, gitName, gitEmail string) error {
|
|
repo, err := git.PlainInit(repoPath, false)
|
|
if err != nil {
|
|
return fmt.Errorf("git init: %s", err)
|
|
}
|
|
|
|
if err = SwitchToMain(repo); err != nil {
|
|
return fmt.Errorf("git branch rename: %s", err)
|
|
}
|
|
|
|
log.Debugf("initialised new git repo in %s", repoPath)
|
|
|
|
if commit {
|
|
commitRepo, err := git.PlainOpen(repoPath)
|
|
if err != nil {
|
|
return fmt.Errorf("git open: %s", err)
|
|
}
|
|
|
|
commitWorktree, err := commitRepo.Worktree()
|
|
if err != nil {
|
|
return fmt.Errorf("git worktree: %s", err)
|
|
}
|
|
|
|
if err := commitWorktree.AddWithOptions(&git.AddOptions{All: true}); err != nil {
|
|
return fmt.Errorf("git add: %s", err)
|
|
}
|
|
|
|
var author *object.Signature
|
|
if gitName != "" && gitEmail != "" {
|
|
author = &object.Signature{Name: gitName, Email: gitEmail}
|
|
}
|
|
|
|
if _, err = commitWorktree.Commit("init", &git.CommitOptions{Author: author}); err != nil {
|
|
return fmt.Errorf("git commit: %s", err)
|
|
}
|
|
|
|
log.Debugf("init committed all files for new git repo in %s", repoPath)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// SwitchToMain sets the default branch to "main".
|
|
func SwitchToMain(repo *git.Repository) error {
|
|
ref := plumbing.NewSymbolicReference(plumbing.HEAD, plumbing.ReferenceName("refs/heads/main"))
|
|
if err := repo.Storer.SetReference(ref); err != nil {
|
|
return fmt.Errorf("set reference: %s", err)
|
|
}
|
|
|
|
cfg, err := repo.Config()
|
|
if err != nil {
|
|
return fmt.Errorf("repo config: %s", err)
|
|
}
|
|
|
|
cfg.Init.DefaultBranch = "main"
|
|
if err := repo.SetConfig(cfg); err != nil {
|
|
return fmt.Errorf("repo set config: %s", err)
|
|
}
|
|
|
|
log.Debug("set 'main' as the default branch")
|
|
|
|
return nil
|
|
}
|