@@ -210,17 +210,25 @@ func getVersionFromReader(r io.Reader) (tableRow, error) {
210210 return tableRow {}, err
211211 }
212212
213+ var errs []error
213214 if row , err := getVersionFromCommand (fd .Name ()); err == nil {
214215 return row , nil
216+ } else {
217+ errs = append (errs , err )
218+ }
219+ if row , err := getVersionFromGo (fd .Name ()); err == nil {
220+ return row , nil
221+ } else {
222+ errs = append (errs , err )
215223 }
216- return getVersionFromGo ( fd . Name () )
224+ return tableRow {}, errors . Join ( errs ... )
217225}
218226
219227func getVersionFromGo (name string ) (tableRow , error ) {
220228 cmd := exec .Command ("go" , "version" , "-m" , name )
221- out , err := cmd .Output ()
229+ out , err := cmd .CombinedOutput ()
222230 if err != nil {
223- return tableRow {}, err
231+ return tableRow {}, fmt . Errorf ( "go version -m: %w: %s" , err , out )
224232 }
225233
226234 // % go version -m ~/bin/syncthing
@@ -229,28 +237,28 @@ func getVersionFromGo(name string) (tableRow, error) {
229237 // ...
230238
231239 if idx := bytes .Index (out , []byte {'\n' }); idx < 0 {
232- return tableRow {}, errors .New ("no version" )
240+ return tableRow {}, errors .New ("go version -m: no version" )
233241 } else {
234242 out = out [:idx ]
235243 }
236244
237245 if idx := bytes .LastIndex (out , []byte {' ' }); idx < 0 {
238- return tableRow {}, errors .New ("no version" )
246+ return tableRow {}, errors .New ("go version -m: no version" )
239247 } else {
240248 return tableRow {Runtime : string (out [idx + 1 :])}, nil
241249 }
242250}
243251
244252func getVersionFromCommand (name string ) (tableRow , error ) {
245253 cmd := exec .Command (name , "--version" )
246- out , err := cmd .Output ()
254+ out , err := cmd .CombinedOutput ()
247255 if err != nil {
248- return tableRow {}, err
256+ return tableRow {}, fmt . Errorf ( "syncthing: running: %w: %s" , err , out )
249257 }
250258
251259 var r tableRow
252260 if err := r .fromVersion (string (out )); err != nil {
253- return tableRow {}, err
261+ return tableRow {}, fmt . Errorf ( "syncthing: parse version: %w: %s" , err , out )
254262 }
255263 return r , nil
256264}
0 commit comments