From 409ed259c6b3ea9122c697e9e20b4b1572f485d1 Mon Sep 17 00:00:00 2001
From: baude <bbaude@redhat.com>
Date: Thu, 15 Feb 2018 10:33:18 -0600
Subject: Return imageid from podman pull

When using podman to pull an image, print the image id after
the image is pulled.

Resolves issue #329

Signed-off-by: baude <bbaude@redhat.com>

Closes: #342
Approved by: rhatdan
---
 cmd/podman/pull.go    |  9 +++++++++
 docs/podman-pull.1.md |  7 ++++++-
 test/e2e/pull_test.go | 19 +++++++++++++++++++
 3 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/cmd/podman/pull.go b/cmd/podman/pull.go
index c19e6715b..886f82dd5 100644
--- a/cmd/podman/pull.go
+++ b/cmd/podman/pull.go
@@ -4,6 +4,7 @@ import (
 	"io"
 	"os"
 
+	"fmt"
 	"github.com/containers/image/types"
 	"github.com/pkg/errors"
 	"github.com/projectatomic/libpod/libpod"
@@ -106,5 +107,13 @@ func pullCmd(c *cli.Context) error {
 	if _, err := runtime.PullImage(image, options); err != nil {
 		return errors.Wrapf(err, "error pulling image %q", image)
 	}
+
+	newImage := runtime.NewImage(image)
+	iid, err := newImage.GetImageID()
+	// Intentially choosing to ignore if there is an error because
+	// outputting the image ID is a NTH and not integral to the pull
+	if err == nil {
+		fmt.Println(iid)
+	}
 	return nil
 }
diff --git a/docs/podman-pull.1.md b/docs/podman-pull.1.md
index 1a1611fd0..f7b24995a 100644
--- a/docs/podman-pull.1.md
+++ b/docs/podman-pull.1.md
@@ -14,7 +14,8 @@ podman pull - Pull an image from a registry
 Copies an image from a registry onto the local machine. **podman pull** pulls an
 image from Docker Hub if a registry is not specified in the command line argument.
 If an image tag is not specified, **podman pull** defaults to the image with the
-**latest** tag (if it exists) and pulls it. **podman pull** can also pull an image
+**latest** tag (if it exists) and pulls it. After the image is pulled, podman will
+print the full image ID.  **podman pull** can also pull an image
 using its digest **podman pull [image]@[digest]**. **podman pull** can be used to pull
 images from archives and local storage using different transports.
 
@@ -97,6 +98,7 @@ Copying config sha256:76da55c8019d7a47c347c0dceb7a6591144d232a7dd616242a367b8bed
  1.48 KB / 1.48 KB [========================================================] 0s
 Writing manifest to image destination
 Storing signatures
+04660052281190168dbb2362eb15bf7067a8dc642d2498055e0e72efa961a4b6
 ```
 
 ```
@@ -108,6 +110,7 @@ Copying config sha256:ad4686094d8f0186ec8249fc4917b71faa2c1030d7b5a025c29f26e19d
  1.41 KB / 1.41 KB [========================================================] 0s
 Writing manifest to image destination
 Storing signatures
+03290064078cb797f3e0a530e78c20c13dd22a3dd3adf84a5da2127b48df0438
 ```
 
 ```
@@ -119,6 +122,7 @@ Copying config sha256:ad4686094d8f0186ec8249fc4917b71faa2c1030d7b5a025c29f26e19d
  1.41 KB / 1.41 KB [========================================================] 0s
 Writing manifest to image destination
 Storing signatures
+03290064078cb797f3e0a530e78c20c13dd22a3dd3adf84a5da2127b48df0438
 ```
 
 ```
@@ -130,6 +134,7 @@ Copying config sha256:ad4686094d8f0186ec8249fc4917b71faa2c1030d7b5a025c29f26e19d
  1.41 KB / 1.41 KB [========================================================] 0s
 Writing manifest to image destination
 Storing signatures
+03290064078cb797f3e0a530e78c20c13dd22a3dd3adf84a5da2127b48df0438
 ```
 
 ## SEE ALSO
diff --git a/test/e2e/pull_test.go b/test/e2e/pull_test.go
index e24d8a5a7..25e33240e 100644
--- a/test/e2e/pull_test.go
+++ b/test/e2e/pull_test.go
@@ -5,6 +5,7 @@ import (
 
 	. "github.com/onsi/ginkgo"
 	. "github.com/onsi/gomega"
+	"strings"
 )
 
 var _ = Describe("Podman pull", func() {
@@ -138,4 +139,22 @@ var _ = Describe("Podman pull", func() {
 		clean := podmanTest.SystemExec("rm", []string{"-fr", "/tmp/podmantestdir"})
 		clean.WaitWithDefaultTimeout()
 	})
+
+	It("podman pull from local directory", func() {
+		podmanTest.RestoreArtifact(ALPINE)
+		setup := podmanTest.Podman([]string{"images", ALPINE, "-q", "--no-trunc"})
+		setup.WaitWithDefaultTimeout()
+		Expect(setup.ExitCode()).To(Equal(0))
+		shortImageId := strings.Split(setup.OutputToString(), ":")[1]
+
+		rmi := podmanTest.Podman([]string{"rmi", ALPINE})
+		rmi.WaitWithDefaultTimeout()
+		Expect(rmi.ExitCode()).To(Equal(0))
+
+		pull := podmanTest.Podman([]string{"pull", "-q", ALPINE})
+		pull.WaitWithDefaultTimeout()
+		Expect(pull.ExitCode()).To(Equal(0))
+
+		Expect(pull.OutputToString()).To(ContainSubstring(shortImageId))
+	})
 })
-- 
cgit v1.2.3-54-g00ecf