Make sure the remote ADD are cached properly

Docker-DCO-1.0-Signed-off-by: Guillaume J. Charmes <guillaume.charmes@docker.com> (github: creack)
This commit is contained in:
Guillaume J. Charmes 2014-01-08 14:20:50 -08:00
parent 762a0cc472
commit 0fd9c98de3

View file

@ -353,8 +353,9 @@ func (b *buildFile) CmdAdd(args string) error {
// FIXME: do we really need this?
var (
origPath = orig
destPath = dest
origPath = orig
destPath = dest
remoteHash string
)
if utils.IsURL(orig) {
@ -373,11 +374,20 @@ func (b *buildFile) CmdAdd(args string) error {
}
defer os.RemoveAll(tmpDirName)
if _, err = io.Copy(tmpFile, resp.Body); err != nil {
tmpFile.Close()
return err
}
origPath = path.Join(filepath.Base(tmpDirName), filepath.Base(tmpFileName))
tmpFile.Close()
// Process the checksum
r, err := archive.Tar(tmpFileName, archive.Uncompressed)
if err != nil {
return err
}
tarSum := utils.TarSum{Reader: r, DisableCompression: true}
remoteHash = tarSum.Sum(nil)
// If the destination is a directory, figure out the filename.
if strings.HasSuffix(dest, "/") {
u, err := url.Parse(orig)
@ -408,7 +418,9 @@ func (b *buildFile) CmdAdd(args string) error {
sums = b.context.GetSums()
)
if fi, err := os.Stat(path.Join(b.contextPath, origPath)); err != nil {
if remoteHash != "" {
hash = remoteHash
} else if fi, err := os.Stat(path.Join(b.contextPath, origPath)); err != nil {
return err
} else if fi.IsDir() {
var subfiles []string