| package distribution | |
| import ( | |
| "context" | |
| "github.com/docker/distribution" | |
| "github.com/docker/distribution/reference" | |
| "github.com/docker/docker/errdefs" | |
| ) | |
| // GetRepository returns a repository from the registry. | |
| func GetRepository(ctx context.Context, ref reference.Named, config *ImagePullConfig) (repository distribution.Repository, lastError error) { | |
| repoInfo, err := config.RegistryService.ResolveRepository(ref) | |
| if err != nil { | |
| return nil, errdefs.InvalidParameter(err) | |
| } | |
| // makes sure name is not empty or `scratch` | |
| if err := validateRepoName(repoInfo.Name); err != nil { | |
| return nil, errdefs.InvalidParameter(err) | |
| } | |
| endpoints, err := config.RegistryService.LookupPullEndpoints(reference.Domain(repoInfo.Name)) | |
| if err != nil { | |
| return nil, err | |
| } | |
| for _, endpoint := range endpoints { | |
| repository, lastError = newRepository(ctx, repoInfo, endpoint, nil, config.AuthConfig, "pull") | |
| if lastError == nil { | |
| break | |
| } | |
| } | |
| return repository, lastError | |
| } |