Make "docker insert" errors obvious

Closes #1130
See also #1942
This commit is contained in:
David Sissitka 2013-09-20 04:55:17 -04:00 committed by Mark Allen
parent f417c4b099
commit 5957dd9091
3 changed files with 14 additions and 20 deletions

7
api.go
View File

@ -479,15 +479,12 @@ func postImagesInsert(srv *Server, version float64, w http.ResponseWriter, r *ht
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
} }
sf := utils.NewStreamFormatter(version > 1.0) sf := utils.NewStreamFormatter(version > 1.0)
imgID, err := srv.ImageInsert(name, url, path, w, sf) err := srv.ImageInsert(name, url, path, w, sf)
if err != nil { if err != nil {
if sf.Used() {
w.Write(sf.FormatError(err)) w.Write(sf.FormatError(err))
return nil
}
} }
return writeJSON(w, http.StatusOK, &APIID{ID: imgID}) return nil
} }
func postImagesPush(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error { func postImagesPush(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {

View File

@ -130,10 +130,7 @@ func (cli *DockerCli) CmdInsert(args ...string) error {
v.Set("url", cmd.Arg(1)) v.Set("url", cmd.Arg(1))
v.Set("path", cmd.Arg(2)) v.Set("path", cmd.Arg(2))
if err := cli.stream("POST", "/images/"+cmd.Arg(0)+"/insert?"+v.Encode(), nil, cli.out, nil); err != nil { return cli.stream("POST", "/images/"+cmd.Arg(0)+"/insert?"+v.Encode(), nil, cli.out, nil)
return err
}
return nil
} }
// mkBuildContext returns an archive of an empty context with the contents // mkBuildContext returns an archive of an empty context with the contents

View File

@ -198,39 +198,39 @@ func (srv *Server) ImagesSearch(term string) ([]registry.SearchResult, error) {
return results.Results, nil return results.Results, nil
} }
func (srv *Server) ImageInsert(name, url, path string, out io.Writer, sf *utils.StreamFormatter) (string, error) { func (srv *Server) ImageInsert(name, url, path string, out io.Writer, sf *utils.StreamFormatter) error {
out = utils.NewWriteFlusher(out) out = utils.NewWriteFlusher(out)
img, err := srv.runtime.repositories.LookupImage(name) img, err := srv.runtime.repositories.LookupImage(name)
if err != nil { if err != nil {
return "", err return err
} }
file, err := utils.Download(url, out) file, err := utils.Download(url, out)
if err != nil { if err != nil {
return "", err return err
} }
defer file.Body.Close() defer file.Body.Close()
config, _, _, err := ParseRun([]string{img.ID, "echo", "insert", url, path}, srv.runtime.capabilities) config, _, _, err := ParseRun([]string{img.ID, "echo", "insert", url, path}, srv.runtime.capabilities)
if err != nil { if err != nil {
return "", err return err
} }
c, _, err := srv.runtime.Create(config, "") c, _, err := srv.runtime.Create(config, "")
if err != nil { if err != nil {
return "", err return err
} }
if err := c.Inject(utils.ProgressReader(file.Body, int(file.ContentLength), out, sf.FormatProgress("", "Downloading", "%8v/%v (%v)"), sf, true), path); err != nil { if err := c.Inject(utils.ProgressReader(file.Body, int(file.ContentLength), out, sf.FormatProgress("", "Downloading", "%8v/%v (%v)"), sf, false), path); err != nil {
return "", err return err
} }
// FIXME: Handle custom repo, tag comment, author // FIXME: Handle custom repo, tag comment, author
img, err = srv.runtime.Commit(c, "", "", img.Comment, img.Author, nil) img, err = srv.runtime.Commit(c, "", "", img.Comment, img.Author, nil)
if err != nil { if err != nil {
return "", err return err
} }
out.Write(sf.FormatStatus("", img.ID)) out.Write(sf.FormatStatus(utils.TruncateID(img.ID), "Image created"))
return img.ShortID(), nil return nil
} }
func (srv *Server) ImagesViz(out io.Writer) error { func (srv *Server) ImagesViz(out io.Writer) error {