/
git.go
45 lines (42 loc) · 928 Bytes
/
git.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package util
import (
"fmt"
"os"
"os/exec"
"path/filepath"
"runtime"
"strings"
"github.com/wangliujing/goctl/util/env"
"github.com/wangliujing/goctl/util/pathx"
)
func CloneIntoGitHome(url, branch string) (dir string, err error) {
gitHome, err := pathx.GetGitHome()
if err != nil {
return "", err
}
os.RemoveAll(gitHome)
ext := filepath.Ext(url)
repo := strings.TrimSuffix(filepath.Base(url), ext)
dir = filepath.Join(gitHome, repo)
if pathx.FileExists(dir) {
os.RemoveAll(dir)
}
path, err := env.LookPath("git")
if err != nil {
return "", err
}
if !env.CanExec() {
return "", fmt.Errorf("os %q can not call 'exec' command", runtime.GOOS)
}
args := []string{"clone"}
if len(branch) > 0 {
args = append(args, "-b", branch)
}
args = append(args, url, dir)
cmd := exec.Command(path, args...)
cmd.Env = os.Environ()
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
err = cmd.Run()
return
}