Skip to content

Commit fcfaa8d

Browse files
authored
Merge pull request docker#6234 from thaJeztah/ParseRepositoryInfo_no_err_step2
internal/registry: remove RepositoryInfo, add NewIndexInfo
2 parents a629a84 + 21e8bbc commit fcfaa8d

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)