@@ -20,15 +20,14 @@ func verboseOutput(argv ...string) {
2020 fmt .Println ()
2121}
2222
23-
2423//Commander ...
2524//interface for os executions
2625type Commander interface {
2726 Run () error
2827}
2928
3029//ExecuteCommander ...
31- //Execute a function with control over stdout and stdin
30+ //Run a function with control over stdout and stdin
3231func ExecuteCommander (c Commander ) error {
3332 err := c .Run ()
3433 if err != nil {
@@ -37,6 +36,34 @@ func ExecuteCommander(c Commander) error {
3736 return nil
3837}
3938
39+
40+ //Runner ...
41+ //Runner type for git executions
42+ type Runner func (command string , argv ... string ) (string , error )
43+
44+ //Run ...
45+ //implemented runner
46+ func Run (command string , argv ... string ) (string , error ) {
47+ var stdOutBuffer , stdErrBuffer bytes.Buffer
48+ exe := exec .Command (command , argv ... )
49+
50+ if options .GlobalFlagVerbose {
51+ verboseOutput (exe .Args ... )
52+ }
53+
54+ exe .Stderr = & stdErrBuffer
55+ exe .Stdout = & stdOutBuffer
56+
57+ err := exe .Run ()
58+ if err != nil {
59+ if out := stdOutBuffer .String (); stdErrBuffer .String () == "" {
60+ return "" , errors .New (out )
61+ }
62+ return "" , errors .New (stdErrBuffer .String ())
63+ }
64+ return stdOutBuffer .String (), nil
65+ }
66+
4067//ExecuteCommand ...
4168//Executes a single command from strings
4269func ExecuteCommand (command string , argv ... string ) (string , error ) {
0 commit comments