Skip to content

Commit 21e8bbc

Browse files
committed
internal/registry: remove RepositoryInfo, add NewIndexInfo
Most places only use IndexInfo (and may not even need that), so replace the use of ParseRepositoryInfo for NewIndexInfo, and move the RepositoryInfo type to the trust package, which uses it as part of its ImageRefAndAuth struct. Signed-off-by: Sebastiaan van Stijn <[email protected]>
1 parent f86ad2e commit 21e8bbc

File tree

12 files changed

+62
-63
lines changed

12 files changed

+62
-63
lines changed

cli/command/image/push.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,10 @@ To push the complete multi-platform image, remove the --platform flag.
105105
}
106106

107107
// Resolve the Repository name from fqn to RepositoryInfo
108-
repoInfo := registry.ParseRepositoryInfo(ref)
108+
indexInfo := registry.NewIndexInfo(ref)
109109

110110
// Resolve the Auth config relevant for this server
111-
authConfig := command.ResolveAuthConfig(dockerCli.ConfigFile(), repoInfo.Index)
111+
authConfig := command.ResolveAuthConfig(dockerCli.ConfigFile(), indexInfo)
112112
encodedAuth, err := registrytypes.EncodeAuthConfig(authConfig)
113113
if err != nil {
114114
return err
@@ -134,7 +134,7 @@ To push the complete multi-platform image, remove the --platform flag.
134134
defer responseBody.Close()
135135
if !opts.untrusted {
136136
// TODO pushTrustedReference currently doesn't respect `--quiet`
137-
return pushTrustedReference(ctx, dockerCli, repoInfo, ref, authConfig, responseBody)
137+
return pushTrustedReference(ctx, dockerCli, indexInfo, ref, authConfig, responseBody)
138138
}
139139

140140
if opts.quiet {

cli/command/image/trust.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"github.com/docker/cli/cli/streams"
1212
"github.com/docker/cli/cli/trust"
1313
"github.com/docker/cli/internal/jsonstream"
14-
"github.com/docker/cli/internal/registry"
1514
"github.com/moby/moby/api/types/image"
1615
registrytypes "github.com/moby/moby/api/types/registry"
1716
"github.com/opencontainers/go-digest"
@@ -42,7 +41,11 @@ func newNotaryClient(cli command.Streams, imgRefAndAuth trust.ImageRefAndAuth) (
4241
}
4342

4443
// pushTrustedReference pushes a canonical reference to the trust server.
45-
func pushTrustedReference(ctx context.Context, ioStreams command.Streams, repoInfo *registry.RepositoryInfo, ref reference.Named, authConfig registrytypes.AuthConfig, in io.Reader) error {
44+
func pushTrustedReference(ctx context.Context, ioStreams command.Streams, indexInfo *registrytypes.IndexInfo, ref reference.Named, authConfig registrytypes.AuthConfig, in io.Reader) error {
45+
repoInfo := &trust.RepositoryInfo{
46+
Name: reference.TrimNamed(ref),
47+
Index: indexInfo,
48+
}
4649
return trust.PushTrustedReference(ctx, ioStreams, repoInfo, ref, authConfig, in, command.UserAgent())
4750
}
4851

cli/command/plugin/install.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func buildPullConfig(ctx context.Context, dockerCli command.Cli, opts pluginOpti
6666
return client.PluginInstallOptions{}, err
6767
}
6868

69-
repoInfo := registry.ParseRepositoryInfo(ref)
69+
indexInfo := registry.NewIndexInfo(ref)
7070
remote := ref.String()
7171

7272
_, isCanonical := ref.(reference.Canonical)
@@ -84,7 +84,7 @@ func buildPullConfig(ctx context.Context, dockerCli command.Cli, opts pluginOpti
8484
remote = reference.FamiliarString(trusted)
8585
}
8686

87-
authConfig := command.ResolveAuthConfig(dockerCli.ConfigFile(), repoInfo.Index)
87+
authConfig := command.ResolveAuthConfig(dockerCli.ConfigFile(), indexInfo)
8888
encodedAuth, err := registrytypes.EncodeAuthConfig(authConfig)
8989
if err != nil {
9090
return client.PluginInstallOptions{}, err

cli/command/plugin/push.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ func runPush(ctx context.Context, dockerCli command.Cli, opts pushOptions) error
4949

5050
named = reference.TagNameOnly(named)
5151

52-
repoInfo := registry.ParseRepositoryInfo(named)
53-
authConfig := command.ResolveAuthConfig(dockerCli.ConfigFile(), repoInfo.Index)
52+
indexInfo := registry.NewIndexInfo(named)
53+
authConfig := command.ResolveAuthConfig(dockerCli.ConfigFile(), indexInfo)
5454
encodedAuth, err := registrytypes.EncodeAuthConfig(authConfig)
5555
if err != nil {
5656
return err
@@ -65,6 +65,10 @@ func runPush(ctx context.Context, dockerCli command.Cli, opts pushOptions) error
6565
}()
6666

6767
if !opts.untrusted {
68+
repoInfo := &trust.RepositoryInfo{
69+
Name: reference.TrimNamed(named),
70+
Index: indexInfo,
71+
}
6872
return trust.PushTrustedReference(ctx, dockerCli, repoInfo, named, authConfig, responseBody, command.UserAgent())
6973
}
7074

cli/command/service/trust.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,12 @@ func resolveServiceImageDigestContentTrust(dockerCli command.Cli, service *swarm
5151
}
5252

5353
func trustedResolveDigest(cli command.Cli, ref reference.NamedTagged) (reference.Canonical, error) {
54-
repoInfo := registry.ParseRepositoryInfo(ref)
55-
authConfig := command.ResolveAuthConfig(cli.ConfigFile(), repoInfo.Index)
56-
54+
indexInfo := registry.NewIndexInfo(ref)
55+
authConfig := command.ResolveAuthConfig(cli.ConfigFile(), indexInfo)
56+
repoInfo := &trust.RepositoryInfo{
57+
Name: reference.TrimNamed(ref),
58+
Index: indexInfo,
59+
}
5760
notaryRepo, err := trust.GetNotaryRepository(cli.In(), cli.Out(), command.UserAgent(), repoInfo, &authConfig, "pull")
5861
if err != nil {
5962
return nil, errors.Wrap(err, "error establishing connection to trust repository")

cli/registry/client/endpoint.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ func (r repositoryEndpoint) BaseURL() string {
3434

3535
func newDefaultRepositoryEndpoint(ref reference.Named, insecure bool) (repositoryEndpoint, error) {
3636
repoName := reference.TrimNamed(ref)
37-
repoInfo := registry.ParseRepositoryInfo(ref)
38-
indexInfo := repoInfo.Index
37+
indexInfo := registry.NewIndexInfo(ref)
3938

4039
endpoint, err := getDefaultEndpoint(ref, !indexInfo.Secure)
4140
if err != nil {

cli/registry/client/fetcher.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,7 @@ func (c *client) iterateEndpoints(ctx context.Context, namedRef reference.Named,
221221
}
222222

223223
repoName := reference.TrimNamed(namedRef)
224-
repoInfo := registry.ParseRepositoryInfo(namedRef)
225-
indexInfo := repoInfo.Index
224+
indexInfo := registry.NewIndexInfo(namedRef)
226225

227226
confirmedTLSRegistries := make(map[string]bool)
228227
for _, endpoint := range endpoints {
@@ -285,8 +284,7 @@ func allEndpoints(namedRef reference.Named, insecure bool) ([]registry.APIEndpoi
285284
if err != nil {
286285
return nil, err
287286
}
288-
repoInfo := registry.ParseRepositoryInfo(namedRef)
289-
endpoints, err := registryService.Endpoints(context.TODO(), reference.Domain(repoInfo.Name))
287+
endpoints, err := registryService.Endpoints(context.TODO(), reference.Domain(namedRef))
290288
logrus.Debugf("endpoints for %s: %v", namedRef, endpoints)
291289
return endpoints, err
292290
}

cli/trust/trust.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func (simpleCredentialStore) SetRefreshToken(*url.URL, string, string) {}
9595
// GetNotaryRepository returns a NotaryRepository which stores all the
9696
// information needed to operate on a notary repository.
9797
// It creates an HTTP transport providing authentication support.
98-
func GetNotaryRepository(in io.Reader, out io.Writer, userAgent string, repoInfo *registry.RepositoryInfo, authConfig *registrytypes.AuthConfig, actions ...string) (client.Repository, error) {
98+
func GetNotaryRepository(in io.Reader, out io.Writer, userAgent string, repoInfo *RepositoryInfo, authConfig *registrytypes.AuthConfig, actions ...string) (client.Repository, error) {
9999
server, err := Server(repoInfo.Index)
100100
if err != nil {
101101
return nil, err
@@ -304,11 +304,18 @@ type ImageRefAndAuth struct {
304304
original string
305305
authConfig *registrytypes.AuthConfig
306306
reference reference.Named
307-
repoInfo *registry.RepositoryInfo
307+
repoInfo *RepositoryInfo
308308
tag string
309309
digest digest.Digest
310310
}
311311

312+
// RepositoryInfo describes a repository
313+
type RepositoryInfo struct {
314+
Name reference.Named
315+
// Index points to registry information
316+
Index *registrytypes.IndexInfo
317+
}
318+
312319
// GetImageReferencesAndAuth retrieves the necessary reference and auth information for an image name
313320
// as an ImageRefAndAuth struct
314321
func GetImageReferencesAndAuth(ctx context.Context,
@@ -321,15 +328,18 @@ func GetImageReferencesAndAuth(ctx context.Context,
321328
}
322329

323330
// Resolve the Repository name from fqn to RepositoryInfo
324-
repoInfo := registry.ParseRepositoryInfo(ref)
325-
authConfig := authResolver(ctx, repoInfo.Index)
331+
indexInfo := registry.NewIndexInfo(ref)
332+
authConfig := authResolver(ctx, indexInfo)
326333
return ImageRefAndAuth{
327334
original: imgName,
328335
authConfig: &authConfig,
329336
reference: ref,
330-
repoInfo: repoInfo,
331-
tag: getTag(ref),
332-
digest: getDigest(ref),
337+
repoInfo: &RepositoryInfo{
338+
Name: reference.TrimNamed(ref),
339+
Index: indexInfo,
340+
},
341+
tag: getTag(ref),
342+
digest: getDigest(ref),
333343
}, nil
334344
}
335345

@@ -366,7 +376,7 @@ func (imgRefAuth *ImageRefAndAuth) Reference() reference.Named {
366376
}
367377

368378
// RepoInfo returns the repository information for a given ImageRefAndAuth
369-
func (imgRefAuth *ImageRefAndAuth) RepoInfo() *registry.RepositoryInfo {
379+
func (imgRefAuth *ImageRefAndAuth) RepoInfo() *RepositoryInfo {
370380
return imgRefAuth.repoInfo
371381
}
372382

cli/trust/trust_push.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"github.com/distribution/reference"
1212
"github.com/docker/cli/cli/streams"
1313
"github.com/docker/cli/internal/jsonstream"
14-
"github.com/docker/cli/internal/registry"
1514
"github.com/moby/moby/api/types"
1615
registrytypes "github.com/moby/moby/api/types/registry"
1716
"github.com/opencontainers/go-digest"
@@ -32,7 +31,7 @@ type Streams interface {
3231
// PushTrustedReference pushes a canonical reference to the trust server.
3332
//
3433
//nolint:gocyclo
35-
func PushTrustedReference(ctx context.Context, ioStreams Streams, repoInfo *registry.RepositoryInfo, ref reference.Named, authConfig registrytypes.AuthConfig, in io.Reader, userAgent string) error {
34+
func PushTrustedReference(ctx context.Context, ioStreams Streams, repoInfo *RepositoryInfo, ref reference.Named, authConfig registrytypes.AuthConfig, in io.Reader, userAgent string) error {
3635
// If it is a trusted push we would like to find the target entry which match the
3736
// tag provided in the function and then do an AddTarget later.
3837
notaryTarget := &client.Target{}

internal/registry/config.go

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -252,27 +252,22 @@ func validateHostPort(s string) error {
252252
return nil
253253
}
254254

255-
// ParseRepositoryInfo performs the breakdown of a repository name into a
256-
// [RepositoryInfo], but lacks registry configuration.
257-
func ParseRepositoryInfo(reposName reference.Named) *RepositoryInfo {
255+
// NewIndexInfo creates a new [registry.IndexInfo] or the given
256+
// repository-name, and detects whether the registry is considered
257+
// "secure" (non-localhost).
258+
func NewIndexInfo(reposName reference.Named) *registry.IndexInfo {
258259
indexName := normalizeIndexName(reference.Domain(reposName))
259260
if indexName == IndexName {
260-
return &RepositoryInfo{
261-
Name: reference.TrimNamed(reposName),
262-
Index: &registry.IndexInfo{
263-
Name: IndexName,
264-
Secure: true,
265-
Official: true,
266-
},
261+
return &registry.IndexInfo{
262+
Name: IndexName,
263+
Secure: true,
264+
Official: true,
267265
}
268266
}
269267

270-
return &RepositoryInfo{
271-
Name: reference.TrimNamed(reposName),
272-
Index: &registry.IndexInfo{
273-
Name: indexName,
274-
Secure: !isInsecure(indexName),
275-
},
268+
return &registry.IndexInfo{
269+
Name: indexName,
270+
Secure: !isInsecure(indexName),
276271
}
277272
}
278273

0 commit comments

Comments
 (0)