mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
7a7357dae1
This enables docker cp and ADD/COPY docker build support for LCOW. Originally, the graphdriver.Get() interface returned a local path to the container root filesystem. This does not work for LCOW, so the Get() method now returns an interface that LCOW implements to support copying to and from the container. Signed-off-by: Akash Gupta <akagup@microsoft.com>
48 lines
1.3 KiB
Go
48 lines
1.3 KiB
Go
// +build !windows
|
|
|
|
package dockerfile
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/docker/docker/pkg/containerfs"
|
|
"github.com/docker/docker/pkg/idtools"
|
|
)
|
|
|
|
func fixPermissions(source, destination string, rootIDs idtools.IDPair, overrideSkip bool) error {
|
|
var (
|
|
skipChownRoot bool
|
|
err error
|
|
)
|
|
if !overrideSkip {
|
|
destEndpoint := ©Endpoint{driver: containerfs.NewLocalDriver(), path: destination}
|
|
skipChownRoot, err = isExistingDirectory(destEndpoint)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// We Walk on the source rather than on the destination because we don't
|
|
// want to change permissions on things we haven't created or modified.
|
|
return filepath.Walk(source, func(fullpath string, info os.FileInfo, err error) error {
|
|
// Do not alter the walk root iff. it existed before, as it doesn't fall under
|
|
// the domain of "things we should chown".
|
|
if skipChownRoot && source == fullpath {
|
|
return nil
|
|
}
|
|
|
|
// Path is prefixed by source: substitute with destination instead.
|
|
cleaned, err := filepath.Rel(source, fullpath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
fullpath = filepath.Join(destination, cleaned)
|
|
return os.Lchown(fullpath, rootIDs.UID, rootIDs.GID)
|
|
})
|
|
}
|
|
|
|
func validateCopySourcePath(imageSource *imageMount, origPath, platform string) error {
|
|
return nil
|
|
}
|