11package mutagen
22
33import (
4+ "bytes"
45 "encoding/json"
5- "errors"
66 "fmt"
77 "os"
88 "os/exec"
99 "strings"
1010
11+ "github.com/pkg/errors"
12+
1113 "go.jetpack.io/devbox/internal/debug"
1214)
1315
@@ -55,7 +57,7 @@ func Create(spec *SessionSpec) error {
5557 }
5658 }
5759
58- return execMutagen (args , spec .EnvVars )
60+ return execMutagenEnv (args , spec .EnvVars )
5961}
6062
6163func List (envVars map [string ]string , names ... string ) ([]Session , error ) {
@@ -92,25 +94,25 @@ func List(envVars map[string]string, names ...string) ([]Session, error) {
9294func Pause (names ... string ) error {
9395 args := []string {"sync" , "pause" }
9496 args = append (args , names ... )
95- return execMutagen (args , nil /*envVars*/ )
97+ return execMutagen (args )
9698}
9799
98100func Resume (envVars map [string ]string , names ... string ) error {
99101 args := []string {"sync" , "resume" }
100102 args = append (args , names ... )
101- return execMutagen (args , envVars )
103+ return execMutagenEnv (args , envVars )
102104}
103105
104106func Flush (names ... string ) error {
105107 args := []string {"sync" , "flush" }
106108 args = append (args , names ... )
107- return execMutagen (args , nil /*envVars*/ )
109+ return execMutagen (args )
108110}
109111
110112func Reset (envVars map [string ]string , names ... string ) error {
111113 args := []string {"sync" , "reset" }
112114 args = append (args , names ... )
113- return execMutagen (args , envVars )
115+ return execMutagenEnv (args , envVars )
114116}
115117
116118func 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)
121123 }
122124
123125 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
125136}
126137
127- func execMutagen (args []string , envVars map [string ]string ) error {
138+ func execMutagenOut (args []string , envVars map [string ]string ) ([] byte , error ) {
128139 binPath := ensureMutagen ()
129140 cmd := exec .Command (binPath , args ... )
130141 cmd .Env = envAsKeyValueStrings (envVars )
131142
143+ var stdout bytes.Buffer
144+ var stderr bytes.Buffer
145+ cmd .Stdout = & stdout
146+ cmd .Stderr = & stderr
147+
132148 debugPrintExecCmd (cmd )
133- out , err := cmd .CombinedOutput ()
134149
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+ )
137157 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 ( )))
139159 }
140- return err
160+ return nil , err
141161 }
142162
143163 debug .Log ("execMutagen worked for cmd: %s" , cmd )
144- return nil
164+ return stdout . Bytes (), nil
145165}
146166
147167// debugPrintExecCmd prints the command to be run, along with MUTAGEN env-vars
@@ -201,3 +221,25 @@ func ensureMutagen() string {
201221 }
202222 return installPath
203223}
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