Skip to content

Commit b6735e2

Browse files
author
Tobias Meinhardt
committed
Navigate to git repo before executing command
1 parent c755d5e commit b6735e2

File tree

1 file changed

+64
-19
lines changed

1 file changed

+64
-19
lines changed

git/service.go

Lines changed: 64 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,53 +21,92 @@ type Service interface {
2121
}
2222

2323
type service struct {
24-
shell string
24+
shell string
25+
pathToRepo string
2526
Service
2627
}
2728

2829
func NewGitService(pathToShell string) Service {
29-
return service{shell: pathToShell}
30+
return service{
31+
shell: pathToShell,
32+
pathToRepo: "",
33+
}
34+
}
35+
36+
func NewRepoPathGitService(pathToShell, pathToRepo string) Service {
37+
return service{
38+
shell: pathToShell,
39+
pathToRepo: pathToRepo,
40+
}
41+
}
42+
43+
func (s service) Command(cmd string) (*exec.Cmd, error) {
44+
repoPath, err := s.GitRepoPath()
45+
if err != nil {
46+
return nil, err
47+
}
48+
formattedCommand := fmt.Sprintf("cd %s && %s", repoPath, cmd)
49+
return exec.Command(s.shell, "-c", formattedCommand), nil
3050
}
3151

3252
func (s service) GitRepoPath() (string, error) {
33-
cmd := exec.Command(s.shell, "-c", "git rev-parse --show-toplevel")
34-
var stdout, stderr bytes.Buffer
35-
cmd.Stderr = &stderr
36-
cmd.Stdout = &stdout
37-
err := cmd.Run()
38-
return strings.TrimSuffix(stdout.String(), "\n"), errors.Wrap(err, fmt.Sprintf("pkg(git) GitRepoPath(): %s", stderr.String()))
53+
if s.pathToRepo == "" {
54+
cmd, err := s.Command("git rev-parse --show-toplevel")
55+
if err != nil {
56+
return "", err
57+
}
58+
var stdout, stderr bytes.Buffer
59+
cmd.Stderr = &stderr
60+
cmd.Stdout = &stdout
61+
err = cmd.Run()
62+
return strings.TrimSuffix(stdout.String(), "\n"), errors.Wrap(err, fmt.Sprintf("pkg(git) GitRepoPath(): %s", stderr.String()))
63+
} else {
64+
return s.pathToRepo, nil
65+
}
3966
}
4067

4168
func (s service) IsRepoClean() (bool, error) {
42-
cmd := exec.Command(s.shell, "-c", "git status -s")
69+
cmd, err := s.Command("git status -s")
70+
if err != nil {
71+
return false, err
72+
}
4373
var stdout, stderr bytes.Buffer
4474
cmd.Stderr = &stderr
4575
cmd.Stdout = &stdout
46-
err := cmd.Run()
76+
err = cmd.Run()
4777
return stdout.String() == "", errors.Wrap(err, fmt.Sprintf("pkg(git) IsRepoClean(): %s", stderr.String()))
4878
}
4979

5080
func (s service) CreateTag(version string) error {
51-
cmd := exec.Command(s.shell, "-c", fmt.Sprintf("git tag -a v%s -m 'create new tag v%s'", version, version))
81+
cmd, err := s.Command(fmt.Sprintf("git tag -a v%s -m 'create new tag v%s'", version, version))
82+
if err != nil {
83+
return err
84+
}
5285
var stderr bytes.Buffer
5386
cmd.Stderr = &stderr
54-
err := cmd.Run()
87+
err = cmd.Run()
5588
return errors.Wrap(err, fmt.Sprintf("pkg(git) CreateTag(): %s", stderr.String()))
5689
}
5790

5891
func (s service) Push() error {
59-
cmd := exec.Command(s.shell, "-c", "git push --follow-tags")
92+
cmd, err := s.Command("git push --follow-tags")
93+
if err != nil {
94+
return err
95+
}
6096
var stderr bytes.Buffer
6197
cmd.Stderr = &stderr
62-
err := cmd.Run()
98+
err = cmd.Run()
6399
return errors.Wrap(err, fmt.Sprintf("pkg(git) Push(): %s", stderr.String()))
64100
}
65101

66102
func (s service) PushTag(version string) error {
67-
cmd := exec.Command(s.shell, "-c", fmt.Sprintf("git push origin v%s", version))
103+
cmd, err := s.Command(fmt.Sprintf("git push origin v%s", version))
104+
if err != nil {
105+
return err
106+
}
68107
var stderr bytes.Buffer
69108
cmd.Stderr = &stderr
70-
err := cmd.Run()
109+
err = cmd.Run()
71110
return errors.Wrap(err, fmt.Sprintf("pkg(git) PushTag(): %s", stderr.String()))
72111
}
73112

@@ -77,17 +116,23 @@ func (s service) AddVersionChanges(filename string) error {
77116
return err
78117
}
79118
filePath := repoPath + "/" + filename
80-
cmd := exec.Command(s.shell, "-c", fmt.Sprintf("git add %s", filePath))
119+
cmd, err := s.Command(fmt.Sprintf("git add %s", filePath))
120+
if err != nil {
121+
return err
122+
}
81123
var stderr bytes.Buffer
82124
cmd.Stderr = &stderr
83125
err = cmd.Run()
84126
return errors.Wrap(err, fmt.Sprintf("pkg(git) AddVersionChanges(): %s", stderr.String()))
85127
}
86128

87129
func (s service) CommitVersionChanges(version string) error {
88-
cmd := exec.Command(s.shell, "-c", fmt.Sprintf("git commit -m 'add changes for version %s'", version))
130+
cmd, err := s.Command(fmt.Sprintf("git commit -m 'add changes for version %s'", version))
131+
if err != nil {
132+
return err
133+
}
89134
var stderr bytes.Buffer
90135
cmd.Stderr = &stderr
91-
err := cmd.Run()
136+
err = cmd.Run()
92137
return errors.Wrap(err, fmt.Sprintf("pkg(git) CommitVersionChanges(): %s", stderr.String()))
93138
}

0 commit comments

Comments
 (0)