...
1
2
3
4 package git
5
6 import (
7 "os/exec"
8 "time"
9
10 "sigs.k8s.io/kustomize/api/internal/utils"
11 "sigs.k8s.io/kustomize/kyaml/errors"
12 "sigs.k8s.io/kustomize/kyaml/filesys"
13 )
14
15
16 type gitRunner struct {
17 gitProgram string
18 duration time.Duration
19 dir filesys.ConfirmedDir
20 }
21
22
23
24 func newCmdRunner(timeout time.Duration) (*gitRunner, error) {
25 gitProgram, err := exec.LookPath("git")
26 if err != nil {
27 return nil, errors.WrapPrefixf(err, "no 'git' program on path")
28 }
29 dir, err := filesys.NewTmpConfirmedDir()
30 if err != nil {
31 return nil, err
32 }
33 return &gitRunner{
34 gitProgram: gitProgram,
35 duration: timeout,
36 dir: dir,
37 }, nil
38 }
39
40
41 func (r gitRunner) run(args ...string) error {
42
43 cmd := exec.Command(r.gitProgram, args...)
44 cmd.Dir = r.dir.String()
45 return utils.TimedCall(
46 cmd.String(),
47 r.duration,
48 func() error {
49 out, err := cmd.CombinedOutput()
50 if err != nil {
51 return errors.WrapPrefixf(err, "failed to run '%s': %s", cmd.String(), string(out))
52 }
53 return err
54 })
55 }
56
View as plain text