gitee.com/h79/goutils@v1.22.10/common/git/cmd.go (about)

     1  package git
     2  
     3  import (
     4  	"bytes"
     5  	"context"
     6  	"errors"
     7  	"os/exec"
     8  	"strings"
     9  )
    10  
    11  var (
    12  	ArgsCommitLog = []string{"log", "--pretty=format:\"%h\"", "-1"}
    13  	ArgsCommit    = []string{"rev-parse", "--short", "HEAD"}
    14  	ArgsDirty     = []string{"status", "--porcelain"}
    15  	ArgsBranch    = []string{"rev-parse", "--abbrev-ref", "HEAD"}
    16  	ArgsDescribe  = []string{"describe", "--tags", "--always"}
    17  	ArgsTag       = []string{"describe", "--abbrev=0", "--tags"}
    18  )
    19  
    20  type Cmd struct {
    21  }
    22  
    23  func (c *Cmd) IsRepo(ctx context.Context, env []string) bool {
    24  	out, err := c.Do(ctx, env, []string{"rev-parse", "--is-inside-work-tree"}...)
    25  	return err == nil && strings.TrimSpace(out) == "true"
    26  }
    27  
    28  // VersionNumber sample 1.0.1
    29  func (c *Cmd) VersionNumber(ctx context.Context, env []string) string {
    30  	ver := c.Version(ctx, env)
    31  	if ver != "" && ver[0] == 'v' {
    32  		return ver[1:]
    33  	}
    34  	return ver
    35  }
    36  
    37  // Version sample v1.0.1
    38  func (c *Cmd) Version(ctx context.Context, env []string) string {
    39  	ver, err := c.Do(ctx, env, ArgsTag...)
    40  	if err != nil {
    41  		return ""
    42  	}
    43  	return ver
    44  }
    45  
    46  func (c *Cmd) Do(ctx context.Context, env []string, args ...string) (string, error) {
    47  	a := append([]string{"-c", "log.showSignature=false"}, args...)
    48  	return c.DoCmd(ctx, env, a...)
    49  }
    50  
    51  func (c *Cmd) DoCmd(ctx context.Context, env []string, args ...string) (string, error) {
    52  
    53  	cmd := exec.CommandContext(ctx, "git", args...)
    54  
    55  	stdout := bytes.Buffer{}
    56  	stderr := bytes.Buffer{}
    57  
    58  	cmd.Stdout = &stdout
    59  	cmd.Stderr = &stderr
    60  	cmd.Env = append(cmd.Env, env...)
    61  
    62  	err := cmd.Run()
    63  
    64  	if err != nil {
    65  		return "", errors.New(stderr.String())
    66  	}
    67  	return stdout.String(), nil
    68  }