1 Star 0 Fork 0

h79/goutils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
cmd.go 1.57 KB
一键复制 编辑 原始数据 按行查看 历史
huqiuyun 提交于 2023-09-02 15:19 . git cmd
package git
import (
"bytes"
"context"
"errors"
"os/exec"
"strings"
)
var (
ArgsCommitLog = []string{"log", "--pretty=format:\"%h\"", "-1"}
ArgsCommit = []string{"rev-parse", "--short", "HEAD"}
ArgsDirty = []string{"status", "--porcelain"}
ArgsBranch = []string{"rev-parse", "--abbrev-ref", "HEAD"}
ArgsDescribe = []string{"describe", "--tags", "--always"}
ArgsTag = []string{"describe", "--abbrev=0", "--tags"}
)
type Cmd struct {
}
func (c *Cmd) IsRepo(ctx context.Context, env []string) bool {
out, err := c.Do(ctx, env, []string{"rev-parse", "--is-inside-work-tree"}...)
return err == nil && strings.TrimSpace(out) == "true"
}
// VersionNumber sample 1.0.1
func (c *Cmd) VersionNumber(ctx context.Context, env []string) string {
ver := c.Version(ctx, env)
if ver != "" && ver[0] == 'v' {
return ver[1:]
}
return ver
}
// Version sample v1.0.1
func (c *Cmd) Version(ctx context.Context, env []string) string {
ver, err := c.Do(ctx, env, ArgsTag...)
if err != nil {
return ""
}
return ver
}
func (c *Cmd) Do(ctx context.Context, env []string, args ...string) (string, error) {
a := append([]string{"-c", "log.showSignature=false"}, args...)
return c.DoCmd(ctx, env, a...)
}
func (c *Cmd) DoCmd(ctx context.Context, env []string, args ...string) (string, error) {
cmd := exec.CommandContext(ctx, "git", args...)
stdout := bytes.Buffer{}
stderr := bytes.Buffer{}
cmd.Stdout = &stdout
cmd.Stderr = &stderr
cmd.Env = append(cmd.Env, env...)
err := cmd.Run()
if err != nil {
return "", errors.New(stderr.String())
}
return stdout.String(), nil
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/h79/goutils.git
git@gitee.com:h79/goutils.git
h79
goutils
goutils
v1.21.2

搜索帮助