| 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 |
| } |