Bläddra i källkod

Return weird behaviour of returning json errors

We need this, so client can get error from stream and not from status
code, which is already 200, because write to ResponseWriter was occured.

Signed-off-by: Alexander Morozov <lk4d4@docker.com>
Alexander Morozov 10 år sedan
förälder
incheckning
ec51ba01db
1 ändrade filer med 6 tillägg och 2 borttagningar
  1. 6 2
      api/server/server.go

+ 6 - 2
api/server/server.go

@@ -861,11 +861,12 @@ func (s *Server) postImagesPush(eng *engine.Engine, version version.Version, w h
 	useJSON := version.GreaterThan("1.0")
 	name := vars["name"]
 
+	output := utils.NewWriteFlusher(w)
 	imagePushConfig := &graph.ImagePushConfig{
 		MetaHeaders: metaHeaders,
 		AuthConfig:  authConfig,
 		Tag:         r.Form.Get("tag"),
-		OutStream:   utils.NewWriteFlusher(w),
+		OutStream:   output,
 		Json:        useJSON,
 	}
 	if useJSON {
@@ -873,8 +874,11 @@ func (s *Server) postImagesPush(eng *engine.Engine, version version.Version, w h
 	}
 
 	if err := s.daemon.Repositories().Push(name, imagePushConfig); err != nil {
+		if !output.Flushed() {
+			return err
+		}
 		sf := streamformatter.NewStreamFormatter(useJSON)
-		return fmt.Errorf(string(sf.FormatError(err)))
+		output.Write(sf.FormatError(err))
 	}
 	return nil