1
1
mirror of https://github.com/cooperspencer/gickup synced 2024-10-18 07:38:08 +02:00
gickup/gitcmd/gitcmd.go
Andreas Wachter 61d5070f50
fixed some backup path issues and reload issues (#220)
* fixed some backup path issues and reload issues

* removed all chdirs
2024-04-04 07:31:28 +02:00

118 lines
2.3 KiB
Go

package gitcmd
import (
"errors"
"fmt"
"os"
"os/exec"
"strings"
)
type GitCmd struct {
CMD string
}
func New() (GitCmd, error) {
cmd := exec.Command("git", "lfs")
err := cmd.Run()
if err != nil {
return GitCmd{}, errors.New("git lfs is not installed")
}
return GitCmd{CMD: "git"}, nil
}
func (g GitCmd) Clone(url, reponame string, bare bool) error {
cmd := exec.Command(g.CMD, "clone", url, reponame)
if bare {
cmd.Args = append(cmd.Args, "--bare")
}
return cmd.Run()
}
func (g GitCmd) Pull(bare bool, repopath string) error {
var args = []string{}
if bare {
args = []string{"-C", repopath, "fetch", "--all"}
} else {
args = []string{"-C", repopath, "pull", "--all"}
}
cmd := exec.Command(g.CMD, args...)
return cmd.Run()
}
func (g GitCmd) Fetch(path string) error {
_, err := os.Stat(path)
if err != nil {
return err
}
args := []string{"-C", path, "fetch", "--all", "--tags"}
cmd := exec.Command(g.CMD, args...)
return cmd.Run()
}
func (g GitCmd) MirrorPull(path string) error {
_, err := os.Stat(path)
if err != nil {
return err
}
args := []string{"-C", path, "pull", "--all", "--tags"}
cmd := exec.Command(g.CMD, args...)
return cmd.Run()
}
func (g GitCmd) NewRemote(name, url, path string) error {
_, err := os.Stat(path)
if err != nil {
return err
}
args := []string{"-C", path, "remote", "add", name, url}
cmd := exec.Command(g.CMD, args...)
return cmd.Run()
}
func (g GitCmd) Push(path, remote string) error {
_, err := os.Stat(path)
if err != nil {
return err
}
args := []string{"-C", path, "push", "--all", remote}
cmd := exec.Command(g.CMD, args...)
output, _ := cmd.CombinedOutput()
if err := cmd.Run(); err != nil {
if _, ok := err.(*exec.ExitError); ok {
return fmt.Errorf(strings.TrimSuffix(string(output), "\n"))
}
}
return nil
}
func (g GitCmd) Checkout(path, branch string) error {
_, err := os.Stat(path)
if err != nil {
return err
}
args := []string{"checkout", branch}
cmd := exec.Command(g.CMD, args...)
output, _ := cmd.CombinedOutput()
if err := cmd.Run(); err != nil {
if _, ok := err.(*exec.ExitError); ok {
return fmt.Errorf(strings.TrimSuffix(string(output), "\n"))
}
}
return nil
}
func (g GitCmd) SSHPush(path, remote, key string) error {
os.Setenv("GIT_SSH_COMMAND", fmt.Sprintf("ssh -i %s", key))
return g.Push(path, remote)
}