@@ -89,25 +89,12 @@ func (uploader *FwUploader) GetFirmwareVersion(portAddress string, stdout, stder
89
89
if portAddress != "" {
90
90
args = append (args , "-p" , portAddress )
91
91
}
92
- proc , err := executils .NewProcessFromPath (nil , uploader .pluginPath , args ... )
93
- if err != nil {
94
- return nil , err
95
- }
96
- buffer := & bytes.Buffer {}
97
- if stdout != nil {
98
- proc .RedirectStdoutTo (io .MultiWriter (buffer , stdout ))
99
- } else {
100
- proc .RedirectStdoutTo (buffer )
101
- }
102
- if stderr != nil {
103
- proc .RedirectStderrTo (stderr )
104
- }
105
- pluginExecErr := proc .RunWithinContext (context .Background ())
92
+ execStdout , _ , execErr := uploader .exec (stdout , stderr , args ... )
106
93
107
94
res := & GetFirmwareVersionResult {}
108
95
fwVersionPrefix := "FIRMWARE-VERSION: "
109
96
fwErrorPrefix := "GET-VERSION-ERROR: "
110
- for _ , line := range strings .Split (buffer .String (), "\n " ) {
97
+ for _ , line := range strings .Split (execStdout .String (), "\n " ) {
111
98
if strings .HasPrefix (line , fwVersionPrefix ) {
112
99
version := strings .TrimPrefix (line , fwVersionPrefix )
113
100
res .FirmwareVersion = semver .ParseRelaxed (version )
@@ -116,18 +103,44 @@ func (uploader *FwUploader) GetFirmwareVersion(portAddress string, stdout, stder
116
103
res .Error = strings .TrimPrefix (line , fwErrorPrefix )
117
104
}
118
105
}
106
+
119
107
if res .Error != "" {
120
- if pluginExecErr != nil {
121
- err = fmt .Errorf ("%s: %w" , res .Error , pluginExecErr )
108
+ if execErr != nil {
109
+ execErr = fmt .Errorf ("%s: %w" , res .Error , execErr )
122
110
} else {
123
- err = errors .New (res .Error )
111
+ execErr = errors .New (res .Error )
124
112
}
125
113
}
126
- return res , err
114
+ return res , execErr
127
115
}
128
116
129
117
// GetFirmwareVersionResult contains the result of GetFirmwareVersion command
130
118
type GetFirmwareVersionResult struct {
131
119
FirmwareVersion * semver.RelaxedVersion
132
120
Error string
133
121
}
122
+
123
+ func (uploader * FwUploader ) exec (stdout , stderr io.Writer , args ... string ) (* bytes.Buffer , * bytes.Buffer , error ) {
124
+ stdoutBuffer := & bytes.Buffer {}
125
+ stderrBuffer := & bytes.Buffer {}
126
+
127
+ proc , err := executils .NewProcessFromPath (nil , uploader .pluginPath , args ... )
128
+ if err != nil {
129
+ return stdoutBuffer , stderrBuffer , err
130
+ }
131
+
132
+ if stdout != nil {
133
+ proc .RedirectStdoutTo (io .MultiWriter (stdoutBuffer , stdout ))
134
+ } else {
135
+ proc .RedirectStdoutTo (stdoutBuffer )
136
+ }
137
+
138
+ if stderr != nil {
139
+ proc .RedirectStderrTo (io .MultiWriter (stderrBuffer , stderr ))
140
+ } else {
141
+ proc .RedirectStderrTo (stderr )
142
+ }
143
+
144
+ execErr := proc .RunWithinContext (context .Background ())
145
+ return stdoutBuffer , stderrBuffer , execErr
146
+ }
0 commit comments