@@ -21,53 +21,92 @@ type Service interface {
21
21
}
22
22
23
23
type service struct {
24
- shell string
24
+ shell string
25
+ pathToRepo string
25
26
Service
26
27
}
27
28
28
29
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
30
50
}
31
51
32
52
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
+ }
39
66
}
40
67
41
68
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
+ }
43
73
var stdout , stderr bytes.Buffer
44
74
cmd .Stderr = & stderr
45
75
cmd .Stdout = & stdout
46
- err : = cmd .Run ()
76
+ err = cmd .Run ()
47
77
return stdout .String () == "" , errors .Wrap (err , fmt .Sprintf ("pkg(git) IsRepoClean(): %s" , stderr .String ()))
48
78
}
49
79
50
80
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
+ }
52
85
var stderr bytes.Buffer
53
86
cmd .Stderr = & stderr
54
- err : = cmd .Run ()
87
+ err = cmd .Run ()
55
88
return errors .Wrap (err , fmt .Sprintf ("pkg(git) CreateTag(): %s" , stderr .String ()))
56
89
}
57
90
58
91
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
+ }
60
96
var stderr bytes.Buffer
61
97
cmd .Stderr = & stderr
62
- err : = cmd .Run ()
98
+ err = cmd .Run ()
63
99
return errors .Wrap (err , fmt .Sprintf ("pkg(git) Push(): %s" , stderr .String ()))
64
100
}
65
101
66
102
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
+ }
68
107
var stderr bytes.Buffer
69
108
cmd .Stderr = & stderr
70
- err : = cmd .Run ()
109
+ err = cmd .Run ()
71
110
return errors .Wrap (err , fmt .Sprintf ("pkg(git) PushTag(): %s" , stderr .String ()))
72
111
}
73
112
@@ -77,17 +116,23 @@ func (s service) AddVersionChanges(filename string) error {
77
116
return err
78
117
}
79
118
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
+ }
81
123
var stderr bytes.Buffer
82
124
cmd .Stderr = & stderr
83
125
err = cmd .Run ()
84
126
return errors .Wrap (err , fmt .Sprintf ("pkg(git) AddVersionChanges(): %s" , stderr .String ()))
85
127
}
86
128
87
129
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
+ }
89
134
var stderr bytes.Buffer
90
135
cmd .Stderr = & stderr
91
- err : = cmd .Run ()
136
+ err = cmd .Run ()
92
137
return errors .Wrap (err , fmt .Sprintf ("pkg(git) CommitVersionChanges(): %s" , stderr .String ()))
93
138
}
0 commit comments