From bf57339527f153b502a6443a495824a40768e39f Mon Sep 17 00:00:00 2001 From: David Young Date: Sun, 4 Jan 2015 14:47:01 +0800 Subject: [PATCH 1/3] Add comment column in docker history command output Signed-off-by: David Young --- api/client/history.go | 5 ++- api/types/types.go | 1 + docs/man/docker-history.1.md | 20 ++++++++- docs/sources/reference/commandline/cli.md | 21 ++++++++++ graph/history.go | 1 + integration-cli/docker_cli_history_test.go | 47 ++++++++++++++++++++++ 6 files changed, 92 insertions(+), 3 deletions(-) diff --git a/api/client/history.go b/api/client/history.go index 6e0cdb24c..8736b057b 100644 --- a/api/client/history.go +++ b/api/client/history.go @@ -36,7 +36,7 @@ func (cli *DockerCli) CmdHistory(args ...string) error { w := tabwriter.NewWriter(cli.out, 20, 1, 3, ' ', 0) if !*quiet { - fmt.Fprintln(w, "IMAGE\tCREATED\tCREATED BY\tSIZE") + fmt.Fprintln(w, "IMAGE\tCREATED\tCREATED BY\tSIZE\tCOMMENT") } for _, entry := range history { @@ -53,7 +53,8 @@ func (cli *DockerCli) CmdHistory(args ...string) error { } else { fmt.Fprintf(w, "%s\t", utils.Trunc(entry.CreatedBy, 45)) } - fmt.Fprintf(w, "%s", units.HumanSize(float64(entry.Size))) + fmt.Fprintf(w, "%s\t", units.HumanSize(float64(entry.Size))) + fmt.Fprintf(w, "%s\n", entry.Comment) } fmt.Fprintf(w, "\n") } diff --git a/api/types/types.go b/api/types/types.go index 77b211705..774203d02 100644 --- a/api/types/types.go +++ b/api/types/types.go @@ -49,6 +49,7 @@ type ImageHistory struct { CreatedBy string Tags []string Size int64 + Comment string } // DELETE "/images/{name:.*}" diff --git a/docs/man/docker-history.1.md b/docs/man/docker-history.1.md index 24f928c29..0c322d795 100644 --- a/docs/man/docker-history.1.md +++ b/docs/man/docker-history.1.md @@ -26,11 +26,29 @@ Show the history of when and how an image was created. Only show numeric IDs. The default is *false*. # EXAMPLES +<<<<<<< HEAD $ docker history fedora IMAGE CREATED CREATED BY SIZE +======= + +## Show the history of images created through docker build command + + $ sudo docker history fedora + IMAGE CREATED CREATED BY SIZE COMMENT +>>>>>>> Add comment column in docker history command output 105182bb5e8b 5 days ago /bin/sh -c #(nop) ADD file:71356d2ad59aa3119d 372.7 MB 73bd853d2ea5 13 days ago /bin/sh -c #(nop) MAINTAINER Lokesh Mandvekar 0 B - 511136ea3c5a 10 months ago 0 B + 511136ea3c5a 10 months ago 0 B Imported from - + +## Show the history of images created through docker commit command +`docker commit` command accepts a **-m** parameter to provide comment messages to the image. You can see these messages in image history. + + $ sudo docker history docker:scm + IMAGE CREATED CREATED BY SIZE COMMENT + 2ac9d1098bf1 3 months ago /bin/bash 241.4 MB Added Apache to Fedora base image + 88b42ffd1f7c 5 months ago /bin/sh -c #(nop) ADD file:1fd8d7f9f6557cafc7 373.7 MB + c69cab00d6ef 5 months ago /bin/sh -c #(nop) MAINTAINER Lokesh Mandvekar 0 B + 511136ea3c5a 19 months ago 0 B Imported from - # HISTORY April 2014, Originally compiled by William Henry (whenry at redhat dot com) diff --git a/docs/sources/reference/commandline/cli.md b/docs/sources/reference/commandline/cli.md index 9f8daa03f..f7d47edb0 100644 --- a/docs/sources/reference/commandline/cli.md +++ b/docs/sources/reference/commandline/cli.md @@ -1151,6 +1151,7 @@ This will create a new Bash session in the container `ubuntu_bash`. To see how the `docker:latest` image was built: +<<<<<<< HEAD $ docker history docker IMAGE CREATED CREATED BY SIZE 3e23a5875458790b7a806f95f7ec0d0b2a5c1659bfc899c89f939f6d5b8f7094 8 days ago /bin/sh -c #(nop) ENV LC_ALL=C.UTF-8 0 B @@ -1159,6 +1160,26 @@ To see how the `docker:latest` image was built: 4b137612be55ca69776c7f30c2d2dd0aa2e7d72059820abf3e25b629f887a084 6 weeks ago /bin/sh -c #(nop) ADD jessie.tar.xz in / 121 MB 750d58736b4b6cc0f9a9abe8f258cef269e3e9dceced1146503522be9f985ada 6 weeks ago /bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -t jessie.tar.xz jessie http://http.debian.net/debian 0 B 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158 9 months ago 0 B +======= + $ sudo docker history docker + IMAGE CREATED CREATED BY SIZE COMMENT + 3e23a5875458 8 days ago /bin/sh -c #(nop) ENV LC_ALL=C.UTF-8 0 B + 8578938dd170 8 days ago /bin/sh -c dpkg-reconfigure locales && loc 1.245 MB + be51b77efb42 8 days ago /bin/sh -c apt-get update && apt-get install 338.3 MB + 4b137612be55 6 weeks ago /bin/sh -c #(nop) ADD jessie.tar.xz in / 121 MB + 750d58736b4b 6 weeks ago /bin/sh -c #(nop) MAINTAINER Tianon Gravi >>>>>> Add comment column in docker history command output ## images diff --git a/graph/history.go b/graph/history.go index 1290de9a3..9c3efabaf 100644 --- a/graph/history.go +++ b/graph/history.go @@ -41,6 +41,7 @@ func (s *TagStore) CmdHistory(job *engine.Job) error { CreatedBy: strings.Join(img.ContainerConfig.Cmd, " "), Tags: lookupMap[img.ID], Size: img.Size, + Comment: img.Comment, }) return nil }) diff --git a/integration-cli/docker_cli_history_test.go b/integration-cli/docker_cli_history_test.go index ecb0a3a07..89bb53e71 100644 --- a/integration-cli/docker_cli_history_test.go +++ b/integration-cli/docker_cli_history_test.go @@ -3,6 +3,7 @@ package main import ( "fmt" "os/exec" + "regexp" "strings" "testing" ) @@ -82,3 +83,49 @@ func TestHistoryNonExistentImage(t *testing.T) { } logDone("history - history on non-existent image must pass") } + +func TestHistoryImageWithComment(t *testing.T) { + + // make a image through docker commit [ -m messages ] + runCmd := exec.Command(dockerBinary, "run", "-i", "-a", "stdin", "busybox", "echo", "foo") + out, _, _, err := runCommandWithStdoutStderr(runCmd) + if err != nil { + t.Fatalf("failed to run container: %s, %v", out, err) + } + + cleanedContainerID := stripTrailingCharacters(out) + + waitCmd := exec.Command(dockerBinary, "wait", cleanedContainerID) + if _, _, err = runCommandWithOutput(waitCmd); err != nil { + t.Fatalf("error thrown while waiting for container: %s, %v", out, err) + } + + commitCmd := exec.Command(dockerBinary, "commit", "-m=This is a comment", cleanedContainerID) + out, _, err = runCommandWithOutput(commitCmd) + if err != nil { + t.Fatalf("failed to commit container to image: %s, %v", out, err) + } + + cleanedImageID := stripTrailingCharacters(out) + deleteContainer(cleanedContainerID) + defer deleteImages(cleanedImageID) + + // test docker history to check comment messages + historyCmd := exec.Command(dockerBinary, "history", cleanedImageID) + out, exitCode, err := runCommandWithOutput(historyCmd) + if err != nil || exitCode != 0 { + t.Fatalf("failed to get image history: %s, %v", out, err) + } + + expectedValue := "This is a comment" + + outputLine := strings.Split(out, "\n")[1] + outputTabs := regexp.MustCompile(" +").Split(outputLine, -1) + actualValue := outputTabs[len(outputTabs)-1] + + if !strings.Contains(actualValue, expectedValue) { + t.Fatalf("Expected comments \"%s\", but found \"%s\"", expectedValue, actualValue) + } + + logDone("history - history on image with comment") +} From 8d682bf734539ade2d618349f82b8b5e83a87167 Mon Sep 17 00:00:00 2001 From: David Young Date: Thu, 26 Mar 2015 12:39:50 +0800 Subject: [PATCH 2/3] Refine document by review comments Signed-off-by: David Young --- docs/man/docker-history.1.md | 2 +- docs/sources/reference/commandline/cli.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/man/docker-history.1.md b/docs/man/docker-history.1.md index 0c322d795..cd8fb6e6d 100644 --- a/docs/man/docker-history.1.md +++ b/docs/man/docker-history.1.md @@ -41,7 +41,7 @@ Show the history of when and how an image was created. 511136ea3c5a 10 months ago 0 B Imported from - ## Show the history of images created through docker commit command -`docker commit` command accepts a **-m** parameter to provide comment messages to the image. You can see these messages in image history. +The `docker commit` command has a **-m** flag for adding comments to the image. These comments will be displayed in the image history. $ sudo docker history docker:scm IMAGE CREATED CREATED BY SIZE COMMENT diff --git a/docs/sources/reference/commandline/cli.md b/docs/sources/reference/commandline/cli.md index f7d47edb0..ec26d0418 100644 --- a/docs/sources/reference/commandline/cli.md +++ b/docs/sources/reference/commandline/cli.md @@ -1170,7 +1170,7 @@ To see how the `docker:latest` image was built: 750d58736b4b 6 weeks ago /bin/sh -c #(nop) MAINTAINER Tianon Gravi Date: Wed, 8 Apr 2015 19:43:25 -0400 Subject: [PATCH 3/3] Rebase + some fixes Signed-off-by: Tibor Vass --- api/client/history.go | 2 +- docs/man/docker-history.1.md | 10 +----- docs/sources/reference/commandline/cli.md | 13 +------- integration-cli/docker_cli_history_test.go | 38 ++++++++++------------ 4 files changed, 20 insertions(+), 43 deletions(-) diff --git a/api/client/history.go b/api/client/history.go index 8736b057b..844a6fb77 100644 --- a/api/client/history.go +++ b/api/client/history.go @@ -54,7 +54,7 @@ func (cli *DockerCli) CmdHistory(args ...string) error { fmt.Fprintf(w, "%s\t", utils.Trunc(entry.CreatedBy, 45)) } fmt.Fprintf(w, "%s\t", units.HumanSize(float64(entry.Size))) - fmt.Fprintf(w, "%s\n", entry.Comment) + fmt.Fprintf(w, "%s", entry.Comment) } fmt.Fprintf(w, "\n") } diff --git a/docs/man/docker-history.1.md b/docs/man/docker-history.1.md index cd8fb6e6d..2b38d83e6 100644 --- a/docs/man/docker-history.1.md +++ b/docs/man/docker-history.1.md @@ -26,21 +26,13 @@ Show the history of when and how an image was created. Only show numeric IDs. The default is *false*. # EXAMPLES -<<<<<<< HEAD $ docker history fedora - IMAGE CREATED CREATED BY SIZE -======= - -## Show the history of images created through docker build command - - $ sudo docker history fedora IMAGE CREATED CREATED BY SIZE COMMENT ->>>>>>> Add comment column in docker history command output 105182bb5e8b 5 days ago /bin/sh -c #(nop) ADD file:71356d2ad59aa3119d 372.7 MB 73bd853d2ea5 13 days ago /bin/sh -c #(nop) MAINTAINER Lokesh Mandvekar 0 B 511136ea3c5a 10 months ago 0 B Imported from - -## Show the history of images created through docker commit command +## Display comments in the image history The `docker commit` command has a **-m** flag for adding comments to the image. These comments will be displayed in the image history. $ sudo docker history docker:scm diff --git a/docs/sources/reference/commandline/cli.md b/docs/sources/reference/commandline/cli.md index ec26d0418..507f2990b 100644 --- a/docs/sources/reference/commandline/cli.md +++ b/docs/sources/reference/commandline/cli.md @@ -1151,17 +1151,7 @@ This will create a new Bash session in the container `ubuntu_bash`. To see how the `docker:latest` image was built: -<<<<<<< HEAD $ docker history docker - IMAGE CREATED CREATED BY SIZE - 3e23a5875458790b7a806f95f7ec0d0b2a5c1659bfc899c89f939f6d5b8f7094 8 days ago /bin/sh -c #(nop) ENV LC_ALL=C.UTF-8 0 B - 8578938dd17054dce7993d21de79e96a037400e8d28e15e7290fea4f65128a36 8 days ago /bin/sh -c dpkg-reconfigure locales && locale-gen C.UTF-8 && /usr/sbin/update-locale LANG=C.UTF-8 1.245 MB - be51b77efb42f67a5e96437b3e102f81e0a1399038f77bf28cea0ed23a65cf60 8 days ago /bin/sh -c apt-get update && apt-get install -y git libxml2-dev python build-essential make gcc python-dev locales python-pip 338.3 MB - 4b137612be55ca69776c7f30c2d2dd0aa2e7d72059820abf3e25b629f887a084 6 weeks ago /bin/sh -c #(nop) ADD jessie.tar.xz in / 121 MB - 750d58736b4b6cc0f9a9abe8f258cef269e3e9dceced1146503522be9f985ada 6 weeks ago /bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -t jessie.tar.xz jessie http://http.debian.net/debian 0 B - 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158 9 months ago 0 B -======= - $ sudo docker history docker IMAGE CREATED CREATED BY SIZE COMMENT 3e23a5875458 8 days ago /bin/sh -c #(nop) ENV LC_ALL=C.UTF-8 0 B 8578938dd170 8 days ago /bin/sh -c dpkg-reconfigure locales && loc 1.245 MB @@ -1172,14 +1162,13 @@ To see how the `docker:latest` image was built: To see how the `docker:apache` image was added to a container's base image: - $ sudo docker history docker:scm + $ docker history docker:scm IMAGE CREATED CREATED BY SIZE COMMENT 2ac9d1098bf1 3 months ago /bin/bash 241.4 MB Added Apache to Fedora base image 88b42ffd1f7c 5 months ago /bin/sh -c #(nop) ADD file:1fd8d7f9f6557cafc7 373.7 MB c69cab00d6ef 5 months ago /bin/sh -c #(nop) MAINTAINER Lokesh Mandvekar 0 B 511136ea3c5a 19 months ago 0 B Imported from - ->>>>>>> Add comment column in docker history command output ## images diff --git a/integration-cli/docker_cli_history_test.go b/integration-cli/docker_cli_history_test.go index 89bb53e71..9fd2180d3 100644 --- a/integration-cli/docker_cli_history_test.go +++ b/integration-cli/docker_cli_history_test.go @@ -3,7 +3,6 @@ package main import ( "fmt" "os/exec" - "regexp" "strings" "testing" ) @@ -85,46 +84,43 @@ func TestHistoryNonExistentImage(t *testing.T) { } func TestHistoryImageWithComment(t *testing.T) { + name := "testhistoryimagewithcomment" + defer deleteContainer(name) + defer deleteImages(name) // make a image through docker commit [ -m messages ] - runCmd := exec.Command(dockerBinary, "run", "-i", "-a", "stdin", "busybox", "echo", "foo") - out, _, _, err := runCommandWithStdoutStderr(runCmd) + //runCmd := exec.Command(dockerBinary, "run", "-i", "-a", "stdin", "busybox", "echo", "foo") + runCmd := exec.Command(dockerBinary, "run", "--name", name, "busybox", "true") + out, _, err := runCommandWithOutput(runCmd) if err != nil { t.Fatalf("failed to run container: %s, %v", out, err) } - cleanedContainerID := stripTrailingCharacters(out) - - waitCmd := exec.Command(dockerBinary, "wait", cleanedContainerID) - if _, _, err = runCommandWithOutput(waitCmd); err != nil { + waitCmd := exec.Command(dockerBinary, "wait", name) + if out, _, err := runCommandWithOutput(waitCmd); err != nil { t.Fatalf("error thrown while waiting for container: %s, %v", out, err) } - commitCmd := exec.Command(dockerBinary, "commit", "-m=This is a comment", cleanedContainerID) - out, _, err = runCommandWithOutput(commitCmd) - if err != nil { + comment := "This_is_a_comment" + + commitCmd := exec.Command(dockerBinary, "commit", "-m="+comment, name, name) + if out, _, err := runCommandWithOutput(commitCmd); err != nil { t.Fatalf("failed to commit container to image: %s, %v", out, err) } - cleanedImageID := stripTrailingCharacters(out) - deleteContainer(cleanedContainerID) - defer deleteImages(cleanedImageID) - // test docker history to check comment messages - historyCmd := exec.Command(dockerBinary, "history", cleanedImageID) + historyCmd := exec.Command(dockerBinary, "history", name) out, exitCode, err := runCommandWithOutput(historyCmd) if err != nil || exitCode != 0 { t.Fatalf("failed to get image history: %s, %v", out, err) } - expectedValue := "This is a comment" - - outputLine := strings.Split(out, "\n")[1] - outputTabs := regexp.MustCompile(" +").Split(outputLine, -1) + outputTabs := strings.Fields(strings.Split(out, "\n")[1]) + //outputTabs := regexp.MustCompile(" +").Split(outputLine, -1) actualValue := outputTabs[len(outputTabs)-1] - if !strings.Contains(actualValue, expectedValue) { - t.Fatalf("Expected comments \"%s\", but found \"%s\"", expectedValue, actualValue) + if !strings.Contains(actualValue, comment) { + t.Fatalf("Expected comments %q, but found %q", comment, actualValue) } logDone("history - history on image with comment")