Merge pull request #9280 from vvoland/push-inherit-distribution-source
push: always inherit distribution sources from parent
This commit is contained in:
commit
d682b16f9c
@ -342,8 +342,15 @@ func annotateDistributionSourceHandler(f images.HandlerFunc, provider content.In
|
|||||||
return children, nil
|
return children, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// parentInfo can be used to inherit info for non-existent blobs
|
parentSourceAnnotations := desc.Annotations
|
||||||
var parentInfo *content.Info
|
var parentLabels map[string]string
|
||||||
|
if pi, err := provider.Info(ctx, desc.Digest); err != nil {
|
||||||
|
if !errdefs.IsNotFound(err) {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
parentLabels = pi.Labels
|
||||||
|
}
|
||||||
|
|
||||||
for i := range children {
|
for i := range children {
|
||||||
child := children[i]
|
child := children[i]
|
||||||
@ -353,32 +360,35 @@ func annotateDistributionSourceHandler(f images.HandlerFunc, provider content.In
|
|||||||
if !errdefs.IsNotFound(err) {
|
if !errdefs.IsNotFound(err) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if parentInfo == nil {
|
|
||||||
pi, err := provider.Info(ctx, desc.Digest)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
parentInfo = &pi
|
|
||||||
}
|
|
||||||
// Blob may not exist locally, annotate with parent labels for cross repo
|
|
||||||
// mount or fetch. Parent sources may apply to all children since most
|
|
||||||
// registries enforce that children exist before the manifests.
|
|
||||||
info = *parentInfo
|
|
||||||
}
|
}
|
||||||
|
copyDistributionSourceLabels(info.Labels, &child)
|
||||||
|
|
||||||
for k, v := range info.Labels {
|
// Annotate with parent labels for cross repo mount or fetch.
|
||||||
if !strings.HasPrefix(k, labels.LabelDistributionSource+".") {
|
// Parent sources may apply to all children since most registries
|
||||||
continue
|
// enforce that children exist before the manifests.
|
||||||
}
|
copyDistributionSourceLabels(parentSourceAnnotations, &child)
|
||||||
|
copyDistributionSourceLabels(parentLabels, &child)
|
||||||
if child.Annotations == nil {
|
|
||||||
child.Annotations = map[string]string{}
|
|
||||||
}
|
|
||||||
child.Annotations[k] = v
|
|
||||||
}
|
|
||||||
|
|
||||||
children[i] = child
|
children[i] = child
|
||||||
}
|
}
|
||||||
return children, nil
|
return children, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func copyDistributionSourceLabels(from map[string]string, to *ocispec.Descriptor) {
|
||||||
|
for k, v := range from {
|
||||||
|
if !strings.HasPrefix(k, labels.LabelDistributionSource+".") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if to.Annotations == nil {
|
||||||
|
to.Annotations = make(map[string]string)
|
||||||
|
} else {
|
||||||
|
// Only propagate the parent label if the child doesn't already have it.
|
||||||
|
if _, has := to.Annotations[k]; has {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
to.Annotations[k] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user