Monorepo for Tangled tangled.org
2

Configure Feed

Select the types of activity you want to include in your feed.

at icy/yovxsu 1.6 kB View raw
1package git 2 3import ( 4 "bytes" 5 "fmt" 6 "io" 7 "os/exec" 8 "strings" 9) 10 11const ( 12 fieldSeparator = "\x1f" // ASCII Unit Separator 13 recordSeparator = "\x1e" // ASCII Record Separator 14) 15 16func (g *GitRepo) runGitCmd(command string, extraArgs ...string) ([]byte, error) { 17 var args []string 18 args = append(args, command) 19 args = append(args, extraArgs...) 20 21 cmd := exec.Command("git", args...) 22 cmd.Dir = g.path 23 24 out, err := cmd.Output() 25 if err != nil { 26 if exitErr, ok := err.(*exec.ExitError); ok { 27 return nil, fmt.Errorf("%w, stderr: %s", err, string(exitErr.Stderr)) 28 } 29 return nil, err 30 } 31 32 return out, nil 33} 34 35func (g *GitRepo) revList(extraArgs ...string) ([]byte, error) { 36 return g.runGitCmd("rev-list", extraArgs...) 37} 38 39func (g *GitRepo) forEachRef(extraArgs ...string) ([]byte, error) { 40 return g.runGitCmd("for-each-ref", extraArgs...) 41} 42 43func (g *GitRepo) revParse(extraArgs ...string) ([]byte, error) { 44 return g.runGitCmd("rev-parse", extraArgs...) 45} 46 47func (g *GitRepo) mergeBase(extraArgs ...string) ([]byte, error) { 48 return g.runGitCmd("merge-base", extraArgs...) 49} 50 51func (g *GitRepo) WriteArchive(w io.Writer, format string, prefix string) error { 52 args := []string{"archive", "--format=" + format} 53 if prefix != "" { 54 args = append(args, "--prefix="+strings.TrimRight(prefix, "/")+"/") 55 } 56 args = append(args, g.h.String()) 57 58 cmd := exec.Command("git", args...) 59 cmd.Dir = g.path 60 cmd.Stdout = w 61 stderr := new(bytes.Buffer) 62 cmd.Stderr = stderr 63 64 if err := cmd.Run(); err != nil { 65 return fmt.Errorf("%w, stderr: %s", err, stderr.String()) 66 } 67 68 return nil 69}