cmd/swarm: fix error handling in 'swarm up' (#14557)

The error returned by client.Upload was previously being ignored due to becoming
out of scope outside the if statement. This has been fixed by instead defining a
function which returns the hash and error (rather than trying to set the hash in
each branch of the if statement).
This commit is contained in:
Lewis Marshall 2017-06-06 08:39:10 +01:00 committed by Felix Lange
parent 65ea913e29
commit 1e9f86b49e

View File

@ -18,6 +18,7 @@
package main package main
import ( import (
"errors"
"fmt" "fmt"
"io" "io"
"io/ioutil" "io/ioutil"
@ -87,24 +88,32 @@ func upload(ctx *cli.Context) {
if err != nil { if err != nil {
utils.Fatalf("Error opening file: %s", err) utils.Fatalf("Error opening file: %s", err)
} }
var hash string
// define a function which either uploads a directory or single file
// based on the type of the file being uploaded
var doUpload func() (hash string, err error)
if stat.IsDir() { if stat.IsDir() {
if !recursive { doUpload = func() (string, error) {
utils.Fatalf("Argument is a directory and recursive upload is disabled") if !recursive {
return "", errors.New("Argument is a directory and recursive upload is disabled")
}
return client.UploadDirectory(file, defaultPath, "")
} }
hash, err = client.UploadDirectory(file, defaultPath, "")
} else { } else {
if mimeType == "" { doUpload = func() (string, error) {
mimeType = detectMimeType(file) f, err := swarm.Open(file)
if err != nil {
return "", fmt.Errorf("error opening file: %s", err)
}
defer f.Close()
if mimeType == "" {
mimeType = detectMimeType(file)
}
f.ContentType = mimeType
return client.Upload(f, "")
} }
f, err := swarm.Open(file)
if err != nil {
utils.Fatalf("Error opening file: %s", err)
}
defer f.Close()
f.ContentType = mimeType
hash, err = client.Upload(f, "")
} }
hash, err := doUpload()
if err != nil { if err != nil {
utils.Fatalf("Upload failed: %s", err) utils.Fatalf("Upload failed: %s", err)
} }