summaryrefslogtreecommitdiff
path: root/libpod/image
diff options
context:
space:
mode:
authorMiloslav Trmač <mitr@redhat.com>2018-07-28 06:42:43 +0200
committerAtomic Bot <atomic-devel@projectatomic.io>2018-08-01 18:22:59 +0000
commitdbe2395769933a53058e81386f8f7a072acd15a2 (patch)
treea90b245a29cd4eb396b472a8db883d2f4a83abed /libpod/image
parent8d73e456631ac283eb238584f963ee0df8c84973 (diff)
downloadpodman-dbe2395769933a53058e81386f8f7a072acd15a2.tar.gz
podman-dbe2395769933a53058e81386f8f7a072acd15a2.tar.bz2
podman-dbe2395769933a53058e81386f8f7a072acd15a2.zip
Do not re-parse the list of search registries just for an error message
... when we even only count them. This eliminates a rare error case, and saves time re-reading and re-parsing the input. (We still compute registryPath redundantly, and it may get out of sync.) Should not change behavior (but does not add unit tests). Signed-off-by: Miloslav Trmač <mitr@redhat.com> Closes: #1176 Approved by: rhatdan
Diffstat (limited to 'libpod/image')
-rw-r--r--libpod/image/pull.go20
-rw-r--r--libpod/image/pull_test.go6
2 files changed, 17 insertions, 9 deletions
diff --git a/libpod/image/pull.go b/libpod/image/pull.go
index f63a68a69..1e3ac44b1 100644
--- a/libpod/image/pull.go
+++ b/libpod/image/pull.go
@@ -58,8 +58,9 @@ type pullRefPair struct {
// pullGoal represents the prepared image references and decided behavior to be executed by imagePull
type pullGoal struct {
refPairs []pullRefPair
- pullAllPairs bool // Pull all refPairs instead of stopping on first success.
- usedSearchRegistries bool // refPairs construction has depended on registries.GetRegistries()
+ pullAllPairs bool // Pull all refPairs instead of stopping on first success.
+ usedSearchRegistries bool // refPairs construction has depended on registries.GetRegistries()
+ searchedRegistries []string // The list of search registries used; set only if usedSearchRegistries
}
// pullRefName records a prepared source reference and a destination name to pull.
@@ -72,8 +73,9 @@ type pullRefName struct {
// pullGoalNames is an intermediate variant of pullGoal which uses pullRefName instead of pullRefPair.
type pullGoalNames struct {
refNames []pullRefName
- pullAllPairs bool // Pull all refNames instead of stopping on first success.
- usedSearchRegistries bool // refPairs construction has depended on registries.GetRegistries()
+ pullAllPairs bool // Pull all refNames instead of stopping on first success.
+ usedSearchRegistries bool // refPairs construction has depended on registries.GetRegistries()
+ searchedRegistries []string // The list of search registries used; set only if usedSearchRegistries
}
func singlePullRefNameGoal(rn pullRefName) *pullGoalNames {
@@ -81,6 +83,7 @@ func singlePullRefNameGoal(rn pullRefName) *pullGoalNames {
refNames: []pullRefName{rn},
pullAllPairs: false, // Does not really make a difference.
usedSearchRegistries: false,
+ searchedRegistries: nil,
}
}
@@ -148,6 +151,7 @@ func pullGoalNamesFromImageReference(ctx context.Context, srcRef types.ImageRefe
refNames: res,
pullAllPairs: true,
usedSearchRegistries: false,
+ searchedRegistries: nil,
}, nil
case OCIArchive:
@@ -260,11 +264,7 @@ func (i *Image) pullImage(ctx context.Context, writer io.Writer, authfile, signa
// If no image was found, we should handle. Lets be nicer to the user and see if we can figure out why.
if len(images) == 0 {
registryPath := sysregistries.RegistriesConfPath(&types.SystemContext{})
- searchRegistries, err := registries.GetRegistries()
- if err != nil {
- return nil, err
- }
- if goal.usedSearchRegistries && len(searchRegistries) == 0 {
+ if goal.usedSearchRegistries && len(goal.searchedRegistries) == 0 {
return nil, errors.Errorf("image name provided is a short name and no search registries are defined in %s.", registryPath)
}
return nil, errors.Errorf("unable to find image in the registries defined in %q", registryPath)
@@ -334,6 +334,7 @@ func pullGoalNamesFromPossiblyUnqualifiedName(inputName string) (*pullGoalNames,
refNames: pullNames,
pullAllPairs: false,
usedSearchRegistries: true,
+ searchedRegistries: searchRegistries,
}, nil
}
@@ -369,5 +370,6 @@ func (ir *Runtime) pullGoalFromGoalNames(goalNames *pullGoalNames) (pullGoal, er
refPairs: res,
pullAllPairs: goalNames.pullAllPairs,
usedSearchRegistries: goalNames.usedSearchRegistries,
+ searchedRegistries: goalNames.searchedRegistries,
}, nil
}
diff --git a/libpod/image/pull_test.go b/libpod/image/pull_test.go
index 3a914526d..13ba759c8 100644
--- a/libpod/image/pull_test.go
+++ b/libpod/image/pull_test.go
@@ -200,6 +200,7 @@ func TestPullGoalNamesFromImageReference(t *testing.T) {
}
assert.Equal(t, c.expectedPullAllPairs, res.pullAllPairs, c.srcName)
assert.False(t, res.usedSearchRegistries, c.srcName)
+ assert.Nil(t, res.searchedRegistries, c.srcName)
}
}
}
@@ -326,6 +327,11 @@ func TestPullGoalNamesFromPossiblyUnqualifiedName(t *testing.T) {
assert.Equal(t, c.expected, strings, c.input)
assert.False(t, res.pullAllPairs, c.input)
assert.Equal(t, c.expectedUsedSearchRegistries, res.usedSearchRegistries, c.input)
+ if !c.expectedUsedSearchRegistries {
+ assert.Nil(t, res.searchedRegistries, c.input)
+ } else {
+ assert.Equal(t, []string{"example.com", "docker.io"}, res.searchedRegistries, c.input)
+ }
}
}
}