mirror of
https://github.com/containers/podman.git
synced 2025-12-12 09:50:25 +08:00
short-name aliasing
Add support for short-name aliasing. Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
This commit is contained in:
17
vendor/github.com/containers/buildah/imagebuildah/build.go
generated
vendored
17
vendor/github.com/containers/buildah/imagebuildah/build.go
generated
vendored
@@ -216,20 +216,19 @@ func BuildDockerfiles(ctx context.Context, store storage.Store, options BuildOpt
|
||||
}
|
||||
data = resp.Body
|
||||
} else {
|
||||
// If the Dockerfile isn't found try prepending the
|
||||
// context directory to it.
|
||||
dinfo, err := os.Stat(dfile)
|
||||
if os.IsNotExist(err) {
|
||||
// If they are "/workDir/Dockerfile" and "/workDir"
|
||||
// so don't joint it
|
||||
if err != nil {
|
||||
// If the Dockerfile isn't available, try again with
|
||||
// context directory prepended (if not prepended yet).
|
||||
if !strings.HasPrefix(dfile, options.ContextDirectory) {
|
||||
dfile = filepath.Join(options.ContextDirectory, dfile)
|
||||
}
|
||||
dinfo, err = os.Stat(dfile)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
dinfo, err = os.Stat(dfile)
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
|
||||
// If given a directory, add '/Dockerfile' to it.
|
||||
if dinfo.Mode().IsDir() {
|
||||
dfile = filepath.Join(dfile, "Dockerfile")
|
||||
|
||||
44
vendor/github.com/containers/buildah/imagebuildah/executor.go
generated
vendored
44
vendor/github.com/containers/buildah/imagebuildah/executor.go
generated
vendored
@@ -17,6 +17,7 @@ import (
|
||||
"github.com/containers/buildah/util"
|
||||
"github.com/containers/common/pkg/config"
|
||||
"github.com/containers/image/v5/docker/reference"
|
||||
"github.com/containers/image/v5/manifest"
|
||||
is "github.com/containers/image/v5/storage"
|
||||
"github.com/containers/image/v5/transports"
|
||||
"github.com/containers/image/v5/transports/alltransports"
|
||||
@@ -111,6 +112,15 @@ type Executor struct {
|
||||
stagesSemaphore *semaphore.Weighted
|
||||
jobs int
|
||||
logRusage bool
|
||||
imageInfoLock sync.Mutex
|
||||
imageInfoCache map[string]imageTypeAndHistoryAndDiffIDs
|
||||
}
|
||||
|
||||
type imageTypeAndHistoryAndDiffIDs struct {
|
||||
manifestType string
|
||||
history []v1.History
|
||||
diffIDs []digest.Digest
|
||||
err error
|
||||
}
|
||||
|
||||
// NewExecutor creates a new instance of the imagebuilder.Executor interface.
|
||||
@@ -215,6 +225,7 @@ func NewExecutor(store storage.Store, options BuildOptions, mainNode *parser.Nod
|
||||
terminatedStage: make(map[string]struct{}),
|
||||
jobs: jobs,
|
||||
logRusage: options.LogRusage,
|
||||
imageInfoCache: make(map[string]imageTypeAndHistoryAndDiffIDs),
|
||||
}
|
||||
if exec.err == nil {
|
||||
exec.err = os.Stderr
|
||||
@@ -335,22 +346,43 @@ func (b *Executor) waitForStage(ctx context.Context, name string, stages imagebu
|
||||
}
|
||||
}
|
||||
|
||||
// getImageHistoryAndDiffIDs returns the history and diff IDs list of imageID.
|
||||
func (b *Executor) getImageHistoryAndDiffIDs(ctx context.Context, imageID string) ([]v1.History, []digest.Digest, error) {
|
||||
// getImageTypeAndHistoryAndDiffIDs returns the manifest type, history, and diff IDs list of imageID.
|
||||
func (b *Executor) getImageTypeAndHistoryAndDiffIDs(ctx context.Context, imageID string) (string, []v1.History, []digest.Digest, error) {
|
||||
b.imageInfoLock.Lock()
|
||||
imageInfo, ok := b.imageInfoCache[imageID]
|
||||
b.imageInfoLock.Unlock()
|
||||
if ok {
|
||||
return imageInfo.manifestType, imageInfo.history, imageInfo.diffIDs, imageInfo.err
|
||||
}
|
||||
imageRef, err := is.Transport.ParseStoreReference(b.store, "@"+imageID)
|
||||
if err != nil {
|
||||
return nil, nil, errors.Wrapf(err, "error getting image reference %q", imageID)
|
||||
return "", nil, nil, errors.Wrapf(err, "error getting image reference %q", imageID)
|
||||
}
|
||||
ref, err := imageRef.NewImage(ctx, nil)
|
||||
if err != nil {
|
||||
return nil, nil, errors.Wrapf(err, "error creating new image from reference to image %q", imageID)
|
||||
return "", nil, nil, errors.Wrapf(err, "error creating new image from reference to image %q", imageID)
|
||||
}
|
||||
defer ref.Close()
|
||||
oci, err := ref.OCIConfig(ctx)
|
||||
if err != nil {
|
||||
return nil, nil, errors.Wrapf(err, "error getting possibly-converted OCI config of image %q", imageID)
|
||||
return "", nil, nil, errors.Wrapf(err, "error getting possibly-converted OCI config of image %q", imageID)
|
||||
}
|
||||
return oci.History, oci.RootFS.DiffIDs, nil
|
||||
manifestBytes, manifestFormat, err := ref.Manifest(ctx)
|
||||
if err != nil {
|
||||
return "", nil, nil, errors.Wrapf(err, "error getting manifest of image %q", imageID)
|
||||
}
|
||||
if manifestFormat == "" && len(manifestBytes) > 0 {
|
||||
manifestFormat = manifest.GuessMIMEType(manifestBytes)
|
||||
}
|
||||
b.imageInfoLock.Lock()
|
||||
b.imageInfoCache[imageID] = imageTypeAndHistoryAndDiffIDs{
|
||||
manifestType: manifestFormat,
|
||||
history: oci.History,
|
||||
diffIDs: oci.RootFS.DiffIDs,
|
||||
err: nil,
|
||||
}
|
||||
b.imageInfoLock.Unlock()
|
||||
return manifestFormat, oci.History, oci.RootFS.DiffIDs, nil
|
||||
}
|
||||
|
||||
func (b *Executor) buildStage(ctx context.Context, cleanupStages map[int]*StageExecutor, stages imagebuilder.Stages, stageIndex int) (imageID string, ref reference.Canonical, err error) {
|
||||
|
||||
11
vendor/github.com/containers/buildah/imagebuildah/stage_executor.go
generated
vendored
11
vendor/github.com/containers/buildah/imagebuildah/stage_executor.go
generated
vendored
@@ -1110,7 +1110,7 @@ func (s *StageExecutor) intermediateImageExists(ctx context.Context, currNode *p
|
||||
var baseHistory []v1.History
|
||||
var baseDiffIDs []digest.Digest
|
||||
if s.builder.FromImageID != "" {
|
||||
baseHistory, baseDiffIDs, err = s.executor.getImageHistoryAndDiffIDs(ctx, s.builder.FromImageID)
|
||||
_, baseHistory, baseDiffIDs, err = s.executor.getImageTypeAndHistoryAndDiffIDs(ctx, s.builder.FromImageID)
|
||||
if err != nil {
|
||||
return "", errors.Wrapf(err, "error getting history of base image %q", s.builder.FromImageID)
|
||||
}
|
||||
@@ -1142,10 +1142,15 @@ func (s *StageExecutor) intermediateImageExists(ctx context.Context, currNode *p
|
||||
}
|
||||
// Next we double check that the history of this image is equivalent to the previous
|
||||
// lines in the Dockerfile up till the point we are at in the build.
|
||||
history, diffIDs, err := s.executor.getImageHistoryAndDiffIDs(ctx, image.ID)
|
||||
manifestType, history, diffIDs, err := s.executor.getImageTypeAndHistoryAndDiffIDs(ctx, image.ID)
|
||||
if err != nil {
|
||||
return "", errors.Wrapf(err, "error getting history of %q", image.ID)
|
||||
}
|
||||
// If this candidate isn't of the type that we're building, then it may have lost
|
||||
// some format-specific information that a building-without-cache run wouldn't lose.
|
||||
if manifestType != s.executor.outputFormat {
|
||||
continue
|
||||
}
|
||||
// children + currNode is the point of the Dockerfile we are currently at.
|
||||
if s.historyAndDiffIDsMatch(baseHistory, baseDiffIDs, currNode, history, diffIDs, addedContentDigest, buildAddsLayer) {
|
||||
return image.ID, nil
|
||||
@@ -1276,5 +1281,5 @@ func (s *StageExecutor) commit(ctx context.Context, createdBy string, emptyLayer
|
||||
}
|
||||
|
||||
func (s *StageExecutor) EnsureContainerPath(path string) error {
|
||||
return copier.Mkdir(s.mountPoint, path, copier.MkdirOptions{})
|
||||
return copier.Mkdir(s.mountPoint, filepath.Join(s.mountPoint, path), copier.MkdirOptions{})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user