graph/import.go
fa27580c
 package graph
 
 import (
6e38a53f
 	"io"
fa27580c
 	"net/http"
 	"net/url"
 
30d5a42c
 	"github.com/docker/docker/pkg/archive"
c30a55f1
 	"github.com/docker/docker/pkg/httputils"
12b278d3
 	"github.com/docker/docker/pkg/progressreader"
0cd6c05d
 	"github.com/docker/docker/pkg/streamformatter"
17abfc3d
 	"github.com/docker/docker/runconfig"
fa27580c
 	"github.com/docker/docker/utils"
 )
 
6e38a53f
 type ImageImportConfig struct {
ae406358
 	Changes         []string
 	InConfig        io.ReadCloser
 	OutStream       io.Writer
 	ContainerConfig *runconfig.Config
6e38a53f
 }
 
ae406358
 func (s *TagStore) Import(src string, repo string, tag string, imageImportConfig *ImageImportConfig) error {
fa27580c
 	var (
6b700bda
 		sf      = streamformatter.NewJSONStreamFormatter()
ae406358
 		archive archive.ArchiveReader
 		resp    *http.Response
fa27580c
 	)
 
 	if src == "-" {
6e38a53f
 		archive = imageImportConfig.InConfig
fa27580c
 	} else {
 		u, err := url.Parse(src)
 		if err != nil {
c79b9bab
 			return err
fa27580c
 		}
 		if u.Scheme == "" {
 			u.Scheme = "http"
 			u.Host = src
 			u.Path = ""
 		}
6e38a53f
 		imageImportConfig.OutStream.Write(sf.FormatStatus("", "Downloading from %s", u))
c30a55f1
 		resp, err = httputils.Download(u.String())
fa27580c
 		if err != nil {
c79b9bab
 			return err
fa27580c
 		}
12b278d3
 		progressReader := progressreader.New(progressreader.Config{
 			In:        resp.Body,
6e38a53f
 			Out:       imageImportConfig.OutStream,
12b278d3
 			Formatter: sf,
 			Size:      int(resp.ContentLength),
 			NewLines:  true,
 			ID:        "",
 			Action:    "Importing",
 		})
fa27580c
 		defer progressReader.Close()
 		archive = progressReader
 	}
17abfc3d
 
ae406358
 	img, err := s.graph.Create(archive, "", "", "Imported from "+src, "", nil, imageImportConfig.ContainerConfig)
fa27580c
 	if err != nil {
c79b9bab
 		return err
fa27580c
 	}
 	// Optionally register the image at REPO/TAG
 	if repo != "" {
99f6309b
 		if err := s.Tag(repo, tag, img.ID, true); err != nil {
c79b9bab
 			return err
fa27580c
 		}
 	}
6e38a53f
 	imageImportConfig.OutStream.Write(sf.FormatStatus("", img.ID))
ef741525
 	logID := img.ID
 	if tag != "" {
a2b0c977
 		logID = utils.ImageReference(logID, tag)
ef741525
 	}
c9eb37f9
 
 	s.eventsService.Log("import", logID, "")
c79b9bab
 	return nil
fa27580c
 }