diff --git a/components/engine/api_params.go b/components/engine/api_params.go index 3c53d0f2aa..f666ac2393 100644 --- a/components/engine/api_params.go +++ b/components/engine/api_params.go @@ -78,11 +78,6 @@ type APIContainersOld struct { SizeRootFs int64 } -type APISearch struct { - Name string - Description string -} - type APIID struct { ID string `json:"Id"` } diff --git a/components/engine/commands.go b/components/engine/commands.go index 0e06f47947..ee87781e91 100644 --- a/components/engine/commands.go +++ b/components/engine/commands.go @@ -1420,19 +1420,19 @@ func (cli *DockerCli) CmdSearch(args ...string) error { return err } - outs := []APISearch{} + outs := []registry.SearchResult{} err = json.Unmarshal(body, &outs) if err != nil { return err } fmt.Fprintf(cli.out, "Found %d results matching your query (\"%s\")\n", len(outs), cmd.Arg(0)) - w := tabwriter.NewWriter(cli.out, 33, 1, 3, ' ', 0) - fmt.Fprintf(w, "NAME\tDESCRIPTION\n") + w := tabwriter.NewWriter(cli.out, 10, 1, 3, ' ', 0) + fmt.Fprintf(w, "NAME\tDESCRIPTION\tSTARS\tOFFICIAL\tTRUSTED\n") _, width := cli.getTtySize() if width == 0 { width = 45 } else { - width = width - 33 //remote the first column + width = width - 10 - 54 //remote the first column } for _, out := range outs { desc := strings.Replace(out.Description, "\n", " ", -1) @@ -1440,7 +1440,16 @@ func (cli *DockerCli) CmdSearch(args ...string) error { if !*noTrunc && len(desc) > width { desc = utils.Trunc(desc, width-3) + "..." } - fmt.Fprintf(w, "%s\t%s\n", out.Name, desc) + fmt.Fprintf(w, "%s\t%s\t%d\t", out.Name, desc, out.StarCount) + if out.IsOfficial { + fmt.Fprint(w, "[OK]") + + } + fmt.Fprint(w, "\t") + if out.IsTrusted { + fmt.Fprint(w, "[OK]") + } + fmt.Fprint(w, "\n") } w.Flush() return nil diff --git a/components/engine/registry/registry.go b/components/engine/registry/registry.go index 9e49f35660..f02e3cf477 100644 --- a/components/engine/registry/registry.go +++ b/components/engine/registry/registry.go @@ -615,10 +615,18 @@ func (r *Registry) GetAuthConfig(withPasswd bool) *auth.AuthConfig { } } +type SearchResult struct { + StarCount int `json:"star_count"` + IsOfficial bool `json:"is_official"` + Name string `json:"name"` + IsTrusted bool `json:"is_trusted"` + Description string `json:"description"` +} + type SearchResults struct { - Query string `json:"query"` - NumResults int `json:"num_results"` - Results []map[string]string `json:"results"` + Query string `json:"query"` + NumResults int `json:"num_results"` + Results []SearchResult `json:"results"` } type RepositoryData struct { diff --git a/components/engine/server.go b/components/engine/server.go index 815ed3fe7c..40e38a6617 100644 --- a/components/engine/server.go +++ b/components/engine/server.go @@ -183,7 +183,7 @@ func (srv *Server) ContainerExport(name string, out io.Writer) error { return fmt.Errorf("No such container: %s", name) } -func (srv *Server) ImagesSearch(term string) ([]APISearch, error) { +func (srv *Server) ImagesSearch(term string) ([]registry.SearchResult, error) { r, err := registry.NewRegistry(srv.runtime.config.Root, nil, srv.HTTPRequestFactory(nil)) if err != nil { return nil, err @@ -192,15 +192,7 @@ func (srv *Server) ImagesSearch(term string) ([]APISearch, error) { if err != nil { return nil, err } - - var outs []APISearch - for _, repo := range results.Results { - var out APISearch - out.Description = repo["description"] - out.Name = repo["name"] - outs = append(outs, out) - } - return outs, nil + return results.Results, nil } func (srv *Server) ImageInsert(name, url, path string, out io.Writer, sf *utils.StreamFormatter) (string, error) {