in container_images/registry-image-forked/types.go [117:152]
func (source Source) Mirror() (Source, bool, error) {
if source.RegistryMirror == nil {
return Source{}, false, nil
}
repo, err := name.NewRepository(source.Repository)
if err != nil {
return Source{}, false, fmt.Errorf("parse repository: %w", err)
}
if repo.Registry.String() != name.DefaultRegistry {
// only use registry_mirror for the default registry so that a mirror can
// be configured as a global default
//
// note that this matches the behavior of the `docker` CLI
return Source{}, false, nil
}
// resolve implicit namespace by re-parsing .Name()
mirror, err := name.NewRepository(repo.Name())
if err != nil {
return Source{}, false, fmt.Errorf("resolve implicit namespace: %w", err)
}
mirror.Registry, err = name.NewRegistry(source.RegistryMirror.Host)
if err != nil {
return Source{}, false, fmt.Errorf("parse mirror registry: %w", err)
}
copy := source
copy.Repository = mirror.Name()
copy.BasicCredentials = source.RegistryMirror.BasicCredentials
copy.RegistryMirror = nil
return copy, true, nil
}