(componentName string)
| 152 | } |
| 153 | |
| 154 | func sdkInstall(componentName string) error { |
| 155 | targetFile := sdkMap[componentName].FileName |
| 156 | if _, err := os.Stat(targetFile); err == nil { |
| 157 | whisk.Debug(whisk.DbgError, "os.Stat reports file '%s' exists\n", targetFile) |
| 158 | errStr := wski18n.T("The file '{{.name}}' already exists. Delete it and retry.", |
| 159 | map[string]interface{}{"name": targetFile}) |
| 160 | werr := whisk.MakeWskError(errors.New(errStr), whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE) |
| 161 | return werr |
| 162 | } |
| 163 | |
| 164 | resp, err := Client.Sdks.Install(sdkMap[componentName].UrlPath) |
| 165 | if err != nil { |
| 166 | whisk.Debug(whisk.DbgError, "Client.Sdks.Install(%s) failed: %s\n", sdkMap[componentName].UrlPath, err) |
| 167 | errStr := wski18n.T("Unable to retrieve '{{.urlpath}}' SDK: {{.err}}", |
| 168 | map[string]interface{}{"urlpath": sdkMap[componentName].UrlPath, "err": err}) |
| 169 | werr := whisk.MakeWskErrorFromWskError(errors.New(errStr), err, whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE) |
| 170 | return werr |
| 171 | } |
| 172 | |
| 173 | if resp.Body == nil { |
| 174 | whisk.Debug(whisk.DbgError, "SDK Install HTTP response has no body\n") |
| 175 | errStr := wski18n.T("Server failed to send the '{{.component}}' SDK: {{.err}}", |
| 176 | map[string]interface{}{"name": componentName, "err": err}) |
| 177 | werr := whisk.MakeWskError(errors.New(errStr), whisk.EXIT_CODE_ERR_NETWORK, whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE) |
| 178 | return werr |
| 179 | } |
| 180 | |
| 181 | // Create the SDK file |
| 182 | sdkfile, err := os.Create(targetFile) |
| 183 | if err != nil { |
| 184 | whisk.Debug(whisk.DbgError, "os.Create(%s) failure: %s\n", targetFile, err) |
| 185 | errStr := wski18n.T("Error creating SDK file '{{.name}}': {{.err}}", |
| 186 | map[string]interface{}{"name": targetFile, "err": err}) |
| 187 | werr := whisk.MakeWskErrorFromWskError(errors.New(errStr), err, whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE) |
| 188 | return werr |
| 189 | } |
| 190 | |
| 191 | // Read the HTTP response body and write it to the SDK file |
| 192 | whisk.Debug(whisk.DbgInfo, "Reading SDK file from HTTP response body\n") |
| 193 | _, err = io.Copy(sdkfile, resp.Body) |
| 194 | if err != nil { |
| 195 | whisk.Debug(whisk.DbgError, "io.Copy() of resp.Body into sdkfile failure: %s\n", err) |
| 196 | errStr := wski18n.T("Error copying server response into file: {{.err}}", |
| 197 | map[string]interface{}{"err": err}) |
| 198 | werr := whisk.MakeWskErrorFromWskError(errors.New(errStr), err, whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE) |
| 199 | sdkfile.Close() |
| 200 | return werr |
| 201 | |
| 202 | } |
| 203 | sdkfile.Close() // Don't use 'defer' since this file might need to be deleted after unpack |
| 204 | |
| 205 | // At this point, the entire file is downloaded from the server |
| 206 | // Check if there is any special post-download processing (i.e. unpack) |
| 207 | if sdkMap[componentName].Unpack { |
| 208 | // Make sure the target directory does not already exist |
| 209 | defer os.Remove(targetFile) |
| 210 | targetdir := sdkMap[componentName].UnpackDir |
| 211 | if _, err = os.Stat(targetdir); err == nil { |
no test coverage detected