1
1
package mutagen
2
2
3
3
import (
4
+ "bytes"
4
5
"encoding/json"
5
- "errors"
6
6
"fmt"
7
7
"os"
8
8
"os/exec"
9
9
"strings"
10
10
11
+ "github.com/pkg/errors"
12
+
11
13
"go.jetpack.io/devbox/internal/debug"
12
14
)
13
15
@@ -55,7 +57,7 @@ func Create(spec *SessionSpec) error {
55
57
}
56
58
}
57
59
58
- return execMutagen (args , spec .EnvVars )
60
+ return execMutagenEnv (args , spec .EnvVars )
59
61
}
60
62
61
63
func List (envVars map [string ]string , names ... string ) ([]Session , error ) {
@@ -92,25 +94,25 @@ func List(envVars map[string]string, names ...string) ([]Session, error) {
92
94
func Pause (names ... string ) error {
93
95
args := []string {"sync" , "pause" }
94
96
args = append (args , names ... )
95
- return execMutagen (args , nil /*envVars*/ )
97
+ return execMutagen (args )
96
98
}
97
99
98
100
func Resume (envVars map [string ]string , names ... string ) error {
99
101
args := []string {"sync" , "resume" }
100
102
args = append (args , names ... )
101
- return execMutagen (args , envVars )
103
+ return execMutagenEnv (args , envVars )
102
104
}
103
105
104
106
func Flush (names ... string ) error {
105
107
args := []string {"sync" , "flush" }
106
108
args = append (args , names ... )
107
- return execMutagen (args , nil /*envVars*/ )
109
+ return execMutagen (args )
108
110
}
109
111
110
112
func Reset (envVars map [string ]string , names ... string ) error {
111
113
args := []string {"sync" , "reset" }
112
114
args = append (args , names ... )
113
- return execMutagen (args , envVars )
115
+ return execMutagenEnv (args , envVars )
114
116
}
115
117
116
118
func Terminate (env map [string ]string , labels map [string ]string , names ... string ) error {
@@ -121,27 +123,45 @@ func Terminate(env map[string]string, labels map[string]string, names ...string)
121
123
}
122
124
123
125
args = append (args , names ... )
124
- return execMutagen (args , env )
126
+ return execMutagenEnv (args , env )
127
+ }
128
+
129
+ func execMutagen (args []string ) error {
130
+ return execMutagenEnv (args , nil )
131
+ }
132
+
133
+ func execMutagenEnv (args []string , envVars map [string ]string ) error {
134
+ _ , err := execMutagenOut (args , envVars )
135
+ return err
125
136
}
126
137
127
- func execMutagen (args []string , envVars map [string ]string ) error {
138
+ func execMutagenOut (args []string , envVars map [string ]string ) ([] byte , error ) {
128
139
binPath := ensureMutagen ()
129
140
cmd := exec .Command (binPath , args ... )
130
141
cmd .Env = envAsKeyValueStrings (envVars )
131
142
143
+ var stdout bytes.Buffer
144
+ var stderr bytes.Buffer
145
+ cmd .Stdout = & stdout
146
+ cmd .Stderr = & stderr
147
+
132
148
debugPrintExecCmd (cmd )
133
- out , err := cmd .CombinedOutput ()
134
149
135
- if err != nil {
136
- debug .Log ("execMutagen error: %s, out: %s" , err , string (out ))
150
+ if err := cmd .Run (); err != nil {
151
+ debug .Log (
152
+ "execMutagen error: %s, stdout: %s, stderr: %s" ,
153
+ err ,
154
+ stdout .String (),
155
+ stderr .String (),
156
+ )
137
157
if e := (& exec.ExitError {}); errors .As (err , & e ) {
138
- return errors .New (strings .TrimSpace (string ( out )))
158
+ return nil , errors .New (strings .TrimSpace (stderr . String ( )))
139
159
}
140
- return err
160
+ return nil , err
141
161
}
142
162
143
163
debug .Log ("execMutagen worked for cmd: %s" , cmd )
144
- return nil
164
+ return stdout . Bytes (), nil
145
165
}
146
166
147
167
// debugPrintExecCmd prints the command to be run, along with MUTAGEN env-vars
@@ -201,3 +221,25 @@ func ensureMutagen() string {
201
221
}
202
222
return installPath
203
223
}
224
+
225
+ func labelFlag (labels map [string ]string ) []string {
226
+ if len (labels ) == 0 {
227
+ return []string {}
228
+ }
229
+ labelSlice := []string {}
230
+ for k , v := range labels {
231
+ labelSlice = append (labelSlice , fmt .Sprintf ("%s=%s" , k , v ))
232
+ }
233
+ return []string {"--label" , strings .Join (labelSlice , "," )}
234
+ }
235
+
236
+ func labelSelectorFlag (labels map [string ]string ) []string {
237
+ if len (labels ) == 0 {
238
+ return []string {}
239
+ }
240
+ labelSlice := []string {}
241
+ for k , v := range labels {
242
+ labelSlice = append (labelSlice , fmt .Sprintf ("%s=%s" , k , v ))
243
+ }
244
+ return []string {"--label-selector" , strings .Join (labelSlice , "," )}
245
+ }
0 commit comments