From 2171a393904051ab724fa08d01a964adbf7c1880 Mon Sep 17 00:00:00 2001
From: Miloslav Trmač <mitr@redhat.com>
Date: Wed, 9 Jan 2019 20:43:13 +0100
Subject: Use imageParts.referenceWithRegistry in getPullRefPair
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

CHANGES BEHAVIOR.

This bypasses .assemble, and preserves the original
lack of tag / original digest instead of adding :latest/:none
(still subject to ParseStoreReference normalization).

Using the original digest seems clearly correct; dropping the :latest
suffix from .image strings only affects user-visible input; later
uses of the return value of pullImageFrom... use ParseStoreReference,
which calls reference.TagNameOnly, so the image name should be processed
the same way whether it contains a tag or not.

Signed-off-by: Miloslav Trmač <mitr@redhat.com>
---
 libpod/image/pull.go      |  8 +++++---
 libpod/image/pull_test.go | 12 ++++--------
 2 files changed, 9 insertions(+), 11 deletions(-)

(limited to 'libpod')

diff --git a/libpod/image/pull.go b/libpod/image/pull.go
index ee5e333e3..70f89ea7d 100644
--- a/libpod/image/pull.go
+++ b/libpod/image/pull.go
@@ -76,9 +76,11 @@ func (ir *Runtime) getPullRefPair(srcRef types.ImageReference, destName string)
 	decomposedDest, err := decompose(destName)
 	if err == nil && !decomposedDest.hasRegistry {
 		// If the image doesn't have a registry, set it as the default repo
-		decomposedDest.registry = DefaultLocalRegistry
-		decomposedDest.hasRegistry = true
-		destName = decomposedDest.assemble()
+		ref, err := decomposedDest.referenceWithRegistry(DefaultLocalRegistry)
+		if err != nil {
+			return pullRefPair{}, err
+		}
+		destName = ref.String()
 	}
 
 	reference := destName
diff --git a/libpod/image/pull_test.go b/libpod/image/pull_test.go
index 4a0119070..2176678d3 100644
--- a/libpod/image/pull_test.go
+++ b/libpod/image/pull_test.go
@@ -76,9 +76,7 @@ func TestGetPullRefPair(t *testing.T) {
 		},
 		{ // name, no registry, no tag:
 			"dir:/dev/this-does-not-exist", "from-directory",
-			// FIXME(?) Adding a registry also adds a :latest tag.  OTOH that actually matches the used destination.
-			// Either way it is surprising that the localhost/ addition changes this.  (mitr hoping to remove the "image" member).
-			"localhost/from-directory:latest", "localhost/from-directory:latest",
+			"localhost/from-directory", "localhost/from-directory:latest",
 		},
 		{ // registry/name:tag :
 			"dir:/dev/this-does-not-exist", "example.com/from-directory:notlatest",
@@ -90,8 +88,7 @@ func TestGetPullRefPair(t *testing.T) {
 		},
 		{ // name@digest, no registry:
 			"dir:/dev/this-does-not-exist", "from-directory" + digestSuffix,
-			// FIXME?! Why is this dropping the digest, and adding :none?!
-			"localhost/from-directory:none", "localhost/from-directory:none",
+			"localhost/from-directory" + digestSuffix, "localhost/from-directory" + digestSuffix,
 		},
 		{ // registry/name@digest:
 			"dir:/dev/this-does-not-exist", "example.com/from-directory" + digestSuffix,
@@ -211,14 +208,13 @@ func TestPullGoalFromImageReference(t *testing.T) {
 			false,
 		},
 		{ // Relative path, single element.
-			// FIXME? Note the :latest difference in .image.
 			"dir:this-does-not-exist",
-			[]expected{{"localhost/this-does-not-exist:latest", "localhost/this-does-not-exist:latest"}},
+			[]expected{{"localhost/this-does-not-exist", "localhost/this-does-not-exist:latest"}},
 			false,
 		},
 		{ // Relative path, multiple elements.
 			"dir:testdata/this-does-not-exist",
-			[]expected{{"localhost/testdata/this-does-not-exist:latest", "localhost/testdata/this-does-not-exist:latest"}},
+			[]expected{{"localhost/testdata/this-does-not-exist", "localhost/testdata/this-does-not-exist:latest"}},
 			false,
 		},
 
-- 
cgit v1.2.3-54-g00ecf