diff --git a/commands.go b/commands.go index 7a6e4b332c..4325201f20 100644 --- a/commands.go +++ b/commands.go @@ -384,7 +384,7 @@ func (srv *Server) CmdImport(stdin io.ReadCloser, stdout io.Writer, args ...stri } archive = ProgressReader(resp.Body, int(resp.ContentLength), stdout) } - img, err := srv.runtime.graph.Create(archive, "", "Imported from "+src) + img, err := srv.runtime.graph.Create(archive, nil, "Imported from "+src) if err != nil { return err } diff --git a/container_test.go b/container_test.go index 64558871ac..94db11408d 100644 --- a/container_test.go +++ b/container_test.go @@ -46,7 +46,7 @@ func TestCommitRun(t *testing.T) { if err != nil { t.Error(err) } - img, err := runtime.graph.Create(rwTar, container1.Image, "unit test commited image") + img, err := runtime.graph.Create(rwTar, container1, "unit test commited image") if err != nil { t.Error(err) } diff --git a/graph.go b/graph.go index b0440518ad..c6bb30353a 100644 --- a/graph.go +++ b/graph.go @@ -47,13 +47,17 @@ func (graph *Graph) Get(id string) (*Image, error) { return img, nil } -func (graph *Graph) Create(layerData Archive, parent, comment string) (*Image, error) { +func (graph *Graph) Create(layerData Archive, container *Container, comment string) (*Image, error) { img := &Image{ Id: GenerateId(), - Parent: parent, Comment: comment, Created: time.Now(), } + if container != nil { + img.Parent = container.Image + img.ParentContainer = container.Id + img.ParentCommand = append([]string{container.Path}, container.Args...) + } if err := graph.Register(layerData, img); err != nil { return nil, err } diff --git a/graph_test.go b/graph_test.go index 20e879e52c..b9bdc5140f 100644 --- a/graph_test.go +++ b/graph_test.go @@ -35,7 +35,7 @@ func TestGraphCreate(t *testing.T) { if err != nil { t.Fatal(err) } - image, err := graph.Create(archive, "", "Testing") + image, err := graph.Create(archive, nil, "Testing") if err != nil { t.Fatal(err) } @@ -92,7 +92,7 @@ func TestMount(t *testing.T) { if err != nil { t.Fatal(err) } - image, err := graph.Create(archive, "", "Testing") + image, err := graph.Create(archive, nil, "Testing") if err != nil { t.Fatal(err) } @@ -128,7 +128,7 @@ func TestDelete(t *testing.T) { t.Fatal(err) } assertNImages(graph, t, 0) - img, err := graph.Create(archive, "", "Bla bla") + img, err := graph.Create(archive, nil, "Bla bla") if err != nil { t.Fatal(err) } @@ -139,11 +139,11 @@ func TestDelete(t *testing.T) { assertNImages(graph, t, 0) // Test 2 create (same name) / 1 delete - img1, err := graph.Create(archive, "foo", "Testing") + img1, err := graph.Create(archive, nil, "Testing") if err != nil { t.Fatal(err) } - if _, err = graph.Create(archive, "foo", "Testing"); err != nil { + if _, err = graph.Create(archive, nil, "Testing"); err != nil { t.Fatal(err) } assertNImages(graph, t, 2) diff --git a/image.go b/image.go index e508a164ea..84935e3996 100644 --- a/image.go +++ b/image.go @@ -15,11 +15,13 @@ import ( ) type Image struct { - Id string - Parent string - Comment string - Created time.Time - graph *Graph + Id string + Parent string + Comment string + Created time.Time + ParentContainer string + ParentCommand []string + graph *Graph } func LoadImage(root string) (*Image, error) { diff --git a/runtime.go b/runtime.go index 5df3b7b5b8..dcaaec6366 100644 --- a/runtime.go +++ b/runtime.go @@ -214,7 +214,7 @@ func (runtime *Runtime) Commit(id, repository, tag string) (*Image, error) { return nil, err } // Create a new image from the container's base layers + a new layer from container changes - img, err := runtime.graph.Create(rwTar, container.Image, "") + img, err := runtime.graph.Create(rwTar, container, "") if err != nil { return nil, err }