mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
ensure valid json
This commit is contained in:
parent
c8c7094b2e
commit
14212930e4
3 changed files with 23 additions and 10 deletions
|
@ -1258,14 +1258,9 @@ func (cli *DockerCli) stream(method, path string, in io.Reader, out io.Writer) e
|
||||||
}
|
}
|
||||||
|
|
||||||
if resp.Header.Get("Content-Type") == "application/json" {
|
if resp.Header.Get("Content-Type") == "application/json" {
|
||||||
type Message struct {
|
|
||||||
Status string `json:"status,omitempty"`
|
|
||||||
Progress string `json:"progress,omitempty"`
|
|
||||||
Error string `json:"error,omitempty"`
|
|
||||||
}
|
|
||||||
dec := json.NewDecoder(resp.Body)
|
dec := json.NewDecoder(resp.Body)
|
||||||
for {
|
for {
|
||||||
var m Message
|
var m utils.JsonMessage
|
||||||
if err := dec.Decode(&m); err == io.EOF {
|
if err := dec.Decode(&m); err == io.EOF {
|
||||||
break
|
break
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
|
|
|
@ -368,7 +368,7 @@ func (srv *Server) pullRepository(out io.Writer, remote, askedTag string, sf *ut
|
||||||
success := false
|
success := false
|
||||||
for _, ep := range repoData.Endpoints {
|
for _, ep := range repoData.Endpoints {
|
||||||
if err := srv.pullImage(out, img.Id, "https://"+ep+"/v1", repoData.Tokens, sf); err != nil {
|
if err := srv.pullImage(out, img.Id, "https://"+ep+"/v1", repoData.Tokens, sf); err != nil {
|
||||||
fmt.Fprintf(out, sf.FormatStatus("Error while retrieving image for tag: %s (%s); checking next endpoint\n"), askedTag, err)
|
fmt.Fprintf(out, sf.FormatStatus("Error while retrieving image for tag: %s (%s); checking next endpoint"), askedTag, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
success = true
|
success = true
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"index/suffixarray"
|
"index/suffixarray"
|
||||||
|
@ -557,6 +558,12 @@ func NewWriteFlusher(w io.Writer) *WriteFlusher {
|
||||||
return &WriteFlusher{w: w, flusher: flusher}
|
return &WriteFlusher{w: w, flusher: flusher}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type JsonMessage struct {
|
||||||
|
Status string `json:"status,omitempty"`
|
||||||
|
Progress string `json:"progress,omitempty"`
|
||||||
|
Error string `json:"error,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
type StreamFormatter struct {
|
type StreamFormatter struct {
|
||||||
json bool
|
json bool
|
||||||
used bool
|
used bool
|
||||||
|
@ -569,7 +576,11 @@ func NewStreamFormatter(json bool) *StreamFormatter {
|
||||||
func (sf *StreamFormatter) FormatStatus(str string) string {
|
func (sf *StreamFormatter) FormatStatus(str string) string {
|
||||||
sf.used = true
|
sf.used = true
|
||||||
if sf.json {
|
if sf.json {
|
||||||
return "{\"status\" : \"" + str + "\"}"
|
b, err := json.Marshal(&JsonMessage{Status:str});
|
||||||
|
if err != nil {
|
||||||
|
return sf.FormatError(err)
|
||||||
|
}
|
||||||
|
return string(b)
|
||||||
}
|
}
|
||||||
return str + "\r\n"
|
return str + "\r\n"
|
||||||
}
|
}
|
||||||
|
@ -577,7 +588,10 @@ func (sf *StreamFormatter) FormatStatus(str string) string {
|
||||||
func (sf *StreamFormatter) FormatError(err error) string {
|
func (sf *StreamFormatter) FormatError(err error) string {
|
||||||
sf.used = true
|
sf.used = true
|
||||||
if sf.json {
|
if sf.json {
|
||||||
return "{\"error\" : \"" + err.Error() + "\"}"
|
if b, err := json.Marshal(&JsonMessage{Error:err.Error()}); err == nil {
|
||||||
|
return string(b)
|
||||||
|
}
|
||||||
|
return "{\"error\":\"format error\"}"
|
||||||
}
|
}
|
||||||
return "Error: " + err.Error() + "\r\n"
|
return "Error: " + err.Error() + "\r\n"
|
||||||
}
|
}
|
||||||
|
@ -585,7 +599,11 @@ func (sf *StreamFormatter) FormatError(err error) string {
|
||||||
func (sf *StreamFormatter) FormatProgress(action, str string) string {
|
func (sf *StreamFormatter) FormatProgress(action, str string) string {
|
||||||
sf.used = true
|
sf.used = true
|
||||||
if sf.json {
|
if sf.json {
|
||||||
return "{\"progress\" : \"" + str + "\"}"
|
b, err := json.Marshal(&JsonMessage{Progress:str})
|
||||||
|
if err != nil {
|
||||||
|
return sf.FormatError(err)
|
||||||
|
}
|
||||||
|
return string(b)
|
||||||
}
|
}
|
||||||
return action + " " + str + "\r"
|
return action + " " + str + "\r"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue