瀏覽代碼

move legacy stuff outside the job

Docker-DCO-1.1-Signed-off-by: Victor Vieux <victor.vieux@docker.com> (github: vieux)
Victor Vieux 11 年之前
父節點
當前提交
16ca6a1c12
共有 6 個文件被更改,包括 58 次插入44 次删除
  1. 44 5
      api.go
  2. 2 2
      engine/table_test.go
  3. 1 1
      registry/registry.go
  4. 6 31
      server.go
  5. 1 1
      vendor/src/github.com/gorilla/context/context.go
  6. 4 4
      vendor/src/github.com/gorilla/mux/old_test.go

+ 44 - 5
api.go

@@ -10,6 +10,7 @@ import (
 	"fmt"
 	"fmt"
 	"github.com/dotcloud/docker/archive"
 	"github.com/dotcloud/docker/archive"
 	"github.com/dotcloud/docker/auth"
 	"github.com/dotcloud/docker/auth"
+	"github.com/dotcloud/docker/engine"
 	"github.com/dotcloud/docker/pkg/systemd"
 	"github.com/dotcloud/docker/pkg/systemd"
 	"github.com/dotcloud/docker/utils"
 	"github.com/dotcloud/docker/utils"
 	"github.com/gorilla/mux"
 	"github.com/gorilla/mux"
@@ -181,16 +182,54 @@ func getImagesJSON(srv *Server, version float64, w http.ResponseWriter, r *http.
 	if err := parseForm(r); err != nil {
 	if err := parseForm(r); err != nil {
 		return err
 		return err
 	}
 	}
-	job := srv.Eng.Job("images")
+
+	var (
+		buffer *bytes.Buffer
+		job    = srv.Eng.Job("images")
+	)
+
 	job.Setenv("filter", r.Form.Get("filter"))
 	job.Setenv("filter", r.Form.Get("filter"))
 	job.Setenv("all", r.Form.Get("all"))
 	job.Setenv("all", r.Form.Get("all"))
-	job.SetenvBool("list", version <= 1.8)
-	job.SetenvBool("legacy", version <= 1.7)
-	job.Stdout.Add(w)
-	w.WriteHeader(http.StatusOK)
+
+	if version >= 1.9 {
+		job.Stdout.Add(w)
+	} else {
+		buffer = bytes.NewBuffer(nil)
+		job.Stdout.Add(buffer)
+	}
+
 	if err := job.Run(); err != nil {
 	if err := job.Run(); err != nil {
 		return err
 		return err
 	}
 	}
+
+	if version < 1.9 { // Send as a valide JSON array
+		outs := engine.NewTable("Created", 0)
+		if _, err := outs.ReadFrom(buffer); err != nil {
+			return err
+		}
+		if version < 1.8 { // Convert to legacy format
+			outsLegacy := engine.NewTable("Created", 0)
+			for _, out := range outs.Data {
+				for _, repoTag := range out.GetList("RepoTags") {
+					parts := strings.Split(repoTag, ":")
+					outLegacy := &engine.Env{}
+					outLegacy.Set("Repository", parts[0])
+					outLegacy.Set("Tag", parts[1])
+					outLegacy.Set("ID", out.Get("ID"))
+					outLegacy.SetInt64("Created", out.GetInt64("Created"))
+					outLegacy.SetInt64("Size", out.GetInt64("Size"))
+					outLegacy.SetInt64("VirtualSize", out.GetInt64("VirtualSize"))
+					outsLegacy.Add(outLegacy)
+				}
+			}
+			if _, err := outsLegacy.WriteListTo(w); err != nil {
+				return err
+			}
+		} else if _, err := outs.WriteListTo(w); err != nil {
+			return err
+		}
+	}
+
 	return nil
 	return nil
 }
 }
 
 

+ 2 - 2
engine/table_test.go

@@ -1,9 +1,9 @@
 package engine
 package engine
 
 
 import (
 import (
-	"testing"
 	"bytes"
 	"bytes"
 	"encoding/json"
 	"encoding/json"
+	"testing"
 )
 )
 
 
 func TestTableWriteTo(t *testing.T) {
 func TestTableWriteTo(t *testing.T) {
@@ -19,7 +19,7 @@ func TestTableWriteTo(t *testing.T) {
 	if err := json.Unmarshal(buf.Bytes(), &output); err != nil {
 	if err := json.Unmarshal(buf.Bytes(), &output); err != nil {
 		t.Fatal(err)
 		t.Fatal(err)
 	}
 	}
-	if len(output) != 1  {
+	if len(output) != 1 {
 		t.Fatalf("Incorrect output: %v", output)
 		t.Fatalf("Incorrect output: %v", output)
 	}
 	}
 	if val, exists := output["foo"]; !exists || val != "bar" {
 	if val, exists := output["foo"]; !exists || val != "bar" {

+ 1 - 1
registry/registry.go

@@ -59,7 +59,7 @@ func pingRegistryEndpoint(endpoint string) (bool, error) {
 	// versions of the registry
 	// versions of the registry
 	if standalone == "" {
 	if standalone == "" {
 		return true, nil
 		return true, nil
-	// Accepted values are "true" (case-insensitive) and "1".
+		// Accepted values are "true" (case-insensitive) and "1".
 	} else if strings.EqualFold(standalone, "true") || standalone == "1" {
 	} else if strings.EqualFold(standalone, "true") || standalone == "1" {
 		return true, nil
 		return true, nil
 	}
 	}

+ 6 - 31
server.go

@@ -601,27 +601,12 @@ func (srv *Server) Images(job *engine.Job) engine.Status {
 			}
 			}
 
 
 			if out, exists := lookup[id]; exists {
 			if out, exists := lookup[id]; exists {
-				if job.GetenvBool("legacy") {
-					out2 := &engine.Env{}
-					out2.Set("Repository", name)
-					out2.Set("Tag", tag)
-					out2.Set("ID", out.Get("ID"))
-					out2.SetInt64("Created", out.GetInt64("Created"))
-					out2.SetInt64("Size", out.GetInt64("Size"))
-					out2.SetInt64("VirtualSize", out.GetInt64("VirtualSize"))
-				} else {
-					out.SetList("RepoTags", append(out.GetList("RepoTags"), fmt.Sprintf("%s:%s", name, tag)))
-				}
+				out.SetList("RepoTags", append(out.GetList("RepoTags"), fmt.Sprintf("%s:%s", name, tag)))
 			} else {
 			} else {
 				out := &engine.Env{}
 				out := &engine.Env{}
 				delete(allImages, id)
 				delete(allImages, id)
-				if job.GetenvBool("legacy") {
-					out.Set("Repository", name)
-					out.Set("Tag", tag)
-				} else {
-					out.Set("ParentId", image.Parent)
-					out.SetList("RepoTags", []string{fmt.Sprintf("%s:%s", name, tag)})
-				}
+				out.Set("ParentId", image.Parent)
+				out.SetList("RepoTags", []string{fmt.Sprintf("%s:%s", name, tag)})
 				out.Set("ID", image.ID)
 				out.Set("ID", image.ID)
 				out.SetInt64("Created", image.Created.Unix())
 				out.SetInt64("Created", image.Created.Unix())
 				out.SetInt64("Size", image.Size)
 				out.SetInt64("Size", image.Size)
@@ -641,13 +626,8 @@ func (srv *Server) Images(job *engine.Job) engine.Status {
 	if job.Getenv("filter") == "" {
 	if job.Getenv("filter") == "" {
 		for _, image := range allImages {
 		for _, image := range allImages {
 			out := &engine.Env{}
 			out := &engine.Env{}
-			if job.GetenvBool("legacy") {
-				out.Set("Repository", "<none>")
-				out.Set("Tag", "<none>")
-			} else {
-				out.Set("ParentId", image.Parent)
-				out.SetList("RepoTags", []string{"<none>:<none>"})
-			}
+			out.Set("ParentId", image.Parent)
+			out.SetList("RepoTags", []string{"<none>:<none>"})
 			out.Set("ID", image.ID)
 			out.Set("ID", image.ID)
 			out.SetInt64("Created", image.Created.Unix())
 			out.SetInt64("Created", image.Created.Unix())
 			out.SetInt64("Size", image.Size)
 			out.SetInt64("Size", image.Size)
@@ -657,12 +637,7 @@ func (srv *Server) Images(job *engine.Job) engine.Status {
 	}
 	}
 
 
 	outs.ReverseSort()
 	outs.ReverseSort()
-	if job.GetenvBool("list") {
-		if _, err := outs.WriteListTo(job.Stdout); err != nil {
-			job.Errorf("%s", err)
-			return engine.StatusErr
-		}
-	} else if _, err := outs.WriteTo(job.Stdout); err != nil {
+	if _, err := outs.WriteTo(job.Stdout); err != nil {
 		job.Errorf("%s", err)
 		job.Errorf("%s", err)
 		return engine.StatusErr
 		return engine.StatusErr
 	}
 	}

+ 1 - 1
vendor/src/github.com/gorilla/context/context.go

@@ -92,7 +92,7 @@ func Purge(maxAge int) int {
 		datat = make(map[*http.Request]int64)
 		datat = make(map[*http.Request]int64)
 	} else {
 	} else {
 		min := time.Now().Unix() - int64(maxAge)
 		min := time.Now().Unix() - int64(maxAge)
-		for r, _ := range data {
+		for r := range data {
 			if datat[r] < min {
 			if datat[r] < min {
 				clear(r)
 				clear(r)
 				count++
 				count++

+ 4 - 4
vendor/src/github.com/gorilla/mux/old_test.go

@@ -96,8 +96,8 @@ func TestRouteMatchers(t *testing.T) {
 		method = "GET"
 		method = "GET"
 		headers = map[string]string{"X-Requested-With": "XMLHttpRequest"}
 		headers = map[string]string{"X-Requested-With": "XMLHttpRequest"}
 		resultVars = map[bool]map[string]string{
 		resultVars = map[bool]map[string]string{
-			true:  map[string]string{"var1": "www", "var2": "product", "var3": "42"},
-			false: map[string]string{},
+			true:  {"var1": "www", "var2": "product", "var3": "42"},
+			false: {},
 		}
 		}
 	}
 	}
 
 
@@ -110,8 +110,8 @@ func TestRouteMatchers(t *testing.T) {
 		method = "POST"
 		method = "POST"
 		headers = map[string]string{"Content-Type": "application/json"}
 		headers = map[string]string{"Content-Type": "application/json"}
 		resultVars = map[bool]map[string]string{
 		resultVars = map[bool]map[string]string{
-			true:  map[string]string{"var4": "google", "var5": "product", "var6": "42"},
-			false: map[string]string{},
+			true:  {"var4": "google", "var5": "product", "var6": "42"},
+			false: {},
 		}
 		}
 	}
 	}