github.com/mizzy/docker@v1.5.0/graph/import.go (about) 1 package graph 2 3 import ( 4 "net/http" 5 "net/url" 6 7 log "github.com/Sirupsen/logrus" 8 "github.com/docker/docker/engine" 9 "github.com/docker/docker/pkg/archive" 10 "github.com/docker/docker/utils" 11 ) 12 13 func (s *TagStore) CmdImport(job *engine.Job) engine.Status { 14 if n := len(job.Args); n != 2 && n != 3 { 15 return job.Errorf("Usage: %s SRC REPO [TAG]", job.Name) 16 } 17 var ( 18 src = job.Args[0] 19 repo = job.Args[1] 20 tag string 21 sf = utils.NewStreamFormatter(job.GetenvBool("json")) 22 archive archive.ArchiveReader 23 resp *http.Response 24 ) 25 if len(job.Args) > 2 { 26 tag = job.Args[2] 27 } 28 29 if src == "-" { 30 archive = job.Stdin 31 } else { 32 u, err := url.Parse(src) 33 if err != nil { 34 return job.Error(err) 35 } 36 if u.Scheme == "" { 37 u.Scheme = "http" 38 u.Host = src 39 u.Path = "" 40 } 41 job.Stdout.Write(sf.FormatStatus("", "Downloading from %s", u)) 42 resp, err = utils.Download(u.String()) 43 if err != nil { 44 return job.Error(err) 45 } 46 progressReader := utils.ProgressReader(resp.Body, int(resp.ContentLength), job.Stdout, sf, true, "", "Importing") 47 defer progressReader.Close() 48 archive = progressReader 49 } 50 img, err := s.graph.Create(archive, "", "", "Imported from "+src, "", nil, nil) 51 if err != nil { 52 return job.Error(err) 53 } 54 // Optionally register the image at REPO/TAG 55 if repo != "" { 56 if err := s.Set(repo, tag, img.ID, true); err != nil { 57 return job.Error(err) 58 } 59 } 60 job.Stdout.Write(sf.FormatStatus("", img.ID)) 61 logID := img.ID 62 if tag != "" { 63 logID += ":" + tag 64 } 65 if err = job.Eng.Job("log", "import", logID, "").Run(); err != nil { 66 log.Errorf("Error logging event 'import' for %s: %s", logID, err) 67 } 68 return engine.StatusOK 69 }