Merge pull request #1462 from dotcloud/fix_build_events_output

Fix docker build and docker events output
This commit is contained in:
Michael Crosby 2013-08-09 12:41:18 -07:00
commit 25e7227c81
2 changed files with 9 additions and 12 deletions

View File

@ -422,7 +422,7 @@ func (srv *Server) pullImage(r *registry.Registry, out io.Writer, imgID, endpoin
// FIXME: Launch the getRemoteImage() in goroutines // FIXME: Launch the getRemoteImage() in goroutines
for _, id := range history { for _, id := range history {
if !srv.runtime.graph.Exists(id) { if !srv.runtime.graph.Exists(id) {
out.Write(sf.FormatStatus(utils.TruncateID(id), "Pulling metadata")) out.Write(sf.FormatProgress(utils.TruncateID(id), "Pulling", "metadata"))
imgJSON, imgSize, err := r.GetRemoteImageJSON(id, endpoint, token) imgJSON, imgSize, err := r.GetRemoteImageJSON(id, endpoint, token)
if err != nil { if err != nil {
// FIXME: Keep goging in case of error? // FIXME: Keep goging in case of error?
@ -434,7 +434,7 @@ func (srv *Server) pullImage(r *registry.Registry, out io.Writer, imgID, endpoin
} }
// Get the layer // Get the layer
out.Write(sf.FormatStatus(utils.TruncateID(id), "Pulling fs layer")) out.Write(sf.FormatProgress(utils.TruncateID(id), "Pulling", "fs layer"))
layer, err := r.GetRemoteImageLayer(img.ID, endpoint, token) layer, err := r.GetRemoteImageLayer(img.ID, endpoint, token)
if err != nil { if err != nil {
return err return err
@ -500,7 +500,7 @@ func (srv *Server) pullRepository(r *registry.Registry, out io.Writer, localName
errors <- nil errors <- nil
return return
} }
out.Write(sf.FormatStatus(utils.TruncateID(img.ID), "Pulling image (%s) from %s", img.Tag, localName)) out.Write(sf.FormatProgress(utils.TruncateID(img.ID), "Pulling", fmt.Sprintf("image (%s) from %s", img.Tag, localName)))
success := false success := false
for _, ep := range repoData.Endpoints { for _, ep := range repoData.Endpoints {
if err := srv.pullImage(r, out, img.ID, ep, repoData.Tokens, sf); err != nil { if err := srv.pullImage(r, out, img.ID, ep, repoData.Tokens, sf); err != nil {
@ -716,11 +716,12 @@ func (srv *Server) pushImage(r *registry.Registry, out io.Writer, remote, imgID,
} }
// Send the layer // Send the layer
if checksum, err := r.PushImageLayerRegistry(imgData.ID, utils.ProgressReader(layerData, int(layerData.Size), out, sf.FormatProgress("", "Pushing", "%8v/%v (%v)"), sf, true), ep, token, jsonRaw); err != nil { if checksum, err := r.PushImageLayerRegistry(imgData.ID, utils.ProgressReader(layerData, int(layerData.Size), out, sf.FormatProgress("", "Pushing", "%8v/%v (%v)"), sf, false), ep, token, jsonRaw); err != nil {
return "", err return "", err
} else { } else {
imgData.Checksum = checksum imgData.Checksum = checksum
} }
out.Write(sf.FormatStatus("", ""))
// Send the checksum // Send the checksum
if err := r.PushImageChecksumRegistry(imgData, ep, token); err != nil { if err := r.PushImageChecksumRegistry(imgData, ep, token); err != nil {

View File

@ -79,7 +79,6 @@ type progressReader struct {
func (r *progressReader) Read(p []byte) (n int, err error) { func (r *progressReader) Read(p []byte) (n int, err error) {
read, err := io.ReadCloser(r.reader).Read(p) read, err := io.ReadCloser(r.reader).Read(p)
r.readProgress += read r.readProgress += read
updateEvery := 1024 * 512 //512kB updateEvery := 1024 * 512 //512kB
if r.readTotal > 0 { if r.readTotal > 0 {
// Update progress for every 1% read if 1% < 512kB // Update progress for every 1% read if 1% < 512kB
@ -645,7 +644,6 @@ func (jm *JSONMessage) Display(out io.Writer) error {
} }
return jm.Error return jm.Error
} }
fmt.Fprintf(out, "%c[2K", 27)
if jm.Time != 0 { if jm.Time != 0 {
fmt.Fprintf(out, "[%s] ", time.Unix(jm.Time, 0)) fmt.Fprintf(out, "[%s] ", time.Unix(jm.Time, 0))
} }
@ -653,28 +651,26 @@ func (jm *JSONMessage) Display(out io.Writer) error {
fmt.Fprintf(out, "%s: ", jm.ID) fmt.Fprintf(out, "%s: ", jm.ID)
} }
if jm.Progress != "" { if jm.Progress != "" {
fmt.Fprintf(out, "%c[2K", 27)
fmt.Fprintf(out, "%s %s\r", jm.Status, jm.Progress) fmt.Fprintf(out, "%s %s\r", jm.Status, jm.Progress)
} else { } else {
fmt.Fprintf(out, "%s\r", jm.Status) fmt.Fprintf(out, "%s\r\n", jm.Status)
}
if jm.ID == "" {
fmt.Fprintf(out, "\n")
} }
return nil return nil
} }
func DisplayJSONMessagesStream(in io.Reader, out io.Writer) error { func DisplayJSONMessagesStream(in io.Reader, out io.Writer) error {
dec := json.NewDecoder(in) dec := json.NewDecoder(in)
jm := JSONMessage{}
ids := make(map[string]int) ids := make(map[string]int)
diff := 0 diff := 0
for { for {
jm := JSONMessage{}
if err := dec.Decode(&jm); err == io.EOF { if err := dec.Decode(&jm); err == io.EOF {
break break
} else if err != nil { } else if err != nil {
return err return err
} }
if jm.ID != "" { if jm.Progress != "" && jm.ID != "" {
line, ok := ids[jm.ID] line, ok := ids[jm.ID]
if !ok { if !ok {
line = len(ids) line = len(ids)