From b351b12e273cde1f6973420b5aa911c92c51db58 Mon Sep 17 00:00:00 2001 From: baude Date: Sat, 24 Feb 2018 19:52:55 -0600 Subject: Tagging an image alias by shortname When trying to tag an alias (tag) of an image using only the shortname and no tag, we were unable to find the image in storage. This corrects that issue and adds an integration test to protect against regression. I also updated the man page per the filed issue. While writing the integration test, I discovered that inspect could also not find a tagged image without its :tag. Resolves Issue #385 Resolves Issue #384 Signed-off-by: baude Closes: #398 Approved by: mheon --- cmd/podman/inspect.go | 8 ++++++-- cmd/podman/tag.go | 5 ++++- docs/podman-tag.1.md | 14 ++++---------- test/e2e/tag_test.go | 14 ++++++++++++++ 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/cmd/podman/inspect.go b/cmd/podman/inspect.go index 7820842e8..adb714901 100644 --- a/cmd/podman/inspect.go +++ b/cmd/podman/inspect.go @@ -127,7 +127,9 @@ func iterateInput(c *cli.Context, args []string, runtime *libpod.Runtime, inspec break } case inspectTypeImage: - image, err := runtime.GetImage(input) + newImage := runtime.NewImage(input) + newImage.GetLocalImageName() + image, err := runtime.GetImage(newImage.LocalName) if err != nil { inspectError = errors.Wrapf(err, "error getting image %q", input) break @@ -140,7 +142,9 @@ func iterateInput(c *cli.Context, args []string, runtime *libpod.Runtime, inspec case inspectAll: ctr, err := runtime.LookupContainer(input) if err != nil { - image, err := runtime.GetImage(input) + newImage := runtime.NewImage(input) + newImage.GetLocalImageName() + image, err := runtime.GetImage(newImage.LocalName) if err != nil { inspectError = errors.Wrapf(err, "error getting image %q", input) break diff --git a/cmd/podman/tag.go b/cmd/podman/tag.go index f29c8c182..b71ee97b8 100644 --- a/cmd/podman/tag.go +++ b/cmd/podman/tag.go @@ -30,7 +30,10 @@ func tagCmd(c *cli.Context) error { } defer runtime.Shutdown(false) - img, err := runtime.GetImage(args[0]) + newImage := runtime.NewImage(args[0]) + newImage.GetLocalImageName() + + img, err := runtime.GetImage(newImage.LocalName) if err != nil { return err } diff --git a/docs/podman-tag.1.md b/docs/podman-tag.1.md index 0728f1997..12afb4b91 100644 --- a/docs/podman-tag.1.md +++ b/docs/podman-tag.1.md @@ -6,20 +6,14 @@ podman tag - Add an additional name to a local image ## SYNOPSIS -**podman tag** +**podman [GLOBAL OPTIONS] tag IMAGE[:TAG] TARGET_NAME[:TAG]** [**--help**|**-h**] ## DESCRIPTION -Assigns a new alias to an image in a registry. An alias refers to the entire image name, including the optional **TAG** after the ':' +Assigns a new alias to an image. An alias refers to the entire image name, including the optional +**TAG** after the ':' If you do not provide a :TAG, podman will assume a :TAG of "latest" for both +the IMAGE and the TARGET_NAME. -**podman [GLOBAL OPTIONS]** - -**podman [GLOBAL OPTIONS] tag [OPTIONS]** - -## GLOBAL OPTIONS - -**--help, -h** - Print usage statement ## EXAMPLES diff --git a/test/e2e/tag_test.go b/test/e2e/tag_test.go index 7f14c7eb4..5b578ee07 100644 --- a/test/e2e/tag_test.go +++ b/test/e2e/tag_test.go @@ -66,4 +66,18 @@ var _ = Describe("Podman tag", func() { Expect(StringInSlice("docker.io/library/alpine:latest", inspectData[0].RepoTags)).To(BeTrue()) Expect(StringInSlice("foobar:new", inspectData[0].RepoTags)).To(BeTrue()) }) + + It("podman tag shortname image no tag", func() { + session := podmanTest.Podman([]string{"tag", ALPINE, "foobar"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + + results := podmanTest.Podman([]string{"tag", "foobar", "barfoo"}) + results.WaitWithDefaultTimeout() + Expect(results.ExitCode()).To(Equal(0)) + + verify := podmanTest.Podman([]string{"inspect", "barfoo"}) + verify.WaitWithDefaultTimeout() + Expect(verify.ExitCode()).To(Equal(0)) + }) }) -- cgit v1.2.3-54-g00ecf