diff --git a/integration_tests/context/foo b/integration_tests/context/foo old mode 100644 new mode 100755 diff --git a/pkg/commands/copy.go b/pkg/commands/copy.go index cbdba436b..96fded65d 100644 --- a/pkg/commands/copy.go +++ b/pkg/commands/copy.go @@ -21,7 +21,6 @@ import ( "github.com/containers/image/manifest" "github.com/docker/docker/builder/dockerfile/instructions" "github.com/sirupsen/logrus" - "io/ioutil" "os" "path/filepath" "strings" @@ -65,11 +64,12 @@ func (c *CopyCommand) ExecuteCommand(config *manifest.Schema2Config) error { } else { // ... Else, we want to copy over a file logrus.Infof("Copying file %s to %s", file, destPath) - contents, err := ioutil.ReadFile(filepath.Join(c.buildcontext, file)) + srcFile, err := os.Open(filepath.Join(c.buildcontext, file)) if err != nil { return err } - if err := util.CreateFile(destPath, contents, fi.Mode()); err != nil { + defer srcFile.Close() + if err := util.CreateFile(destPath, srcFile, fi.Mode()); err != nil { return err } } diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index 386ebe19c..c0ba9008e 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -23,7 +23,6 @@ import ( "github.com/containers/image/docker" "github.com/sirupsen/logrus" "io" - "io/ioutil" "os" "path/filepath" "strings" @@ -124,8 +123,8 @@ func FilepathExists(path string) bool { return !os.IsNotExist(err) } -// CreateFile creates a file at path with contents specified -func CreateFile(path string, contents []byte, perm os.FileMode) error { +// CreateFile creates a file at path and copies over contents from the reader +func CreateFile(path string, reader io.Reader, perm os.FileMode) error { // Create directory path if it doesn't exist baseDir := filepath.Dir(path) if _, err := os.Stat(baseDir); os.IsNotExist(err) { @@ -134,5 +133,12 @@ func CreateFile(path string, contents []byte, perm os.FileMode) error { return err } } - return ioutil.WriteFile(path, contents, perm) + dest, err := os.Create(path) + if err != nil { + return err + } + if _, err := io.Copy(dest, reader); err != nil { + return err + } + return dest.Chmod(perm) }