diff --git a/vendor.conf b/vendor.conf index 1b4e23694b4cc..800233514d611 100644 --- a/vendor.conf +++ b/vendor.conf @@ -26,8 +26,8 @@ github.com/imdario/mergo 7c29201646fa3de8506f70121347 golang.org/x/sync e225da77a7e68af35c70ccbf71af2b83e6acac3c # buildkit -github.com/moby/buildkit 928f3b480d7460aacb401f68610058ffdb549aca -github.com/tonistiigi/fsutil 3d2716dd0a4d06ff854241c7e8b6f3f904e1719f +github.com/moby/buildkit 926935b590c94c3659ebcc49cf44da47c1a65ff6 +github.com/tonistiigi/fsutil 0f039a052ca1da01626278199624b62aed9b3729 github.com/grpc-ecosystem/grpc-opentracing 8e809c8a86450a29b90dcc9efbf062d0fe6d9746 github.com/opentracing/opentracing-go 1361b9cd60be79c4c3a7fa9841b3c132e40066a7 github.com/google/shlex 6f45313302b9c56850fc17f99e40caebce98c716 diff --git a/vendor/github.com/moby/buildkit/frontend/dockerfile/dockerfile2llb/convert.go b/vendor/github.com/moby/buildkit/frontend/dockerfile/dockerfile2llb/convert.go index bb21476c936f5..cb6b2828f0466 100644 --- a/vendor/github.com/moby/buildkit/frontend/dockerfile/dockerfile2llb/convert.go +++ b/vendor/github.com/moby/buildkit/frontend/dockerfile/dockerfile2llb/convert.go @@ -345,9 +345,10 @@ func Dockerfile2LLB(ctx context.Context, dt []byte, opt ConvertOpt) (*llb.State, opt.copyImage = DefaultCopyImage } - if err = dispatchOnBuild(d, d.image.Config.OnBuild, opt); err != nil { + if err = dispatchOnBuildTriggers(d, d.image.Config.OnBuild, opt); err != nil { return nil, nil, err } + d.image.Config.OnBuild = nil for _, cmd := range d.commands { if err := dispatch(d, cmd, opt); err != nil { @@ -586,7 +587,7 @@ type command struct { sources []*dispatchState } -func dispatchOnBuild(d *dispatchState, triggers []string, opt dispatchOpt) error { +func dispatchOnBuildTriggers(d *dispatchState, triggers []string, opt dispatchOpt) error { for _, trigger := range triggers { ast, err := parser.Parse(strings.NewReader(trigger)) if err != nil { diff --git a/vendor/github.com/moby/buildkit/go.mod b/vendor/github.com/moby/buildkit/go.mod index 0d238c760ffbb..6258bee4ca163 100644 --- a/vendor/github.com/moby/buildkit/go.mod +++ b/vendor/github.com/moby/buildkit/go.mod @@ -53,7 +53,7 @@ require ( github.com/sirupsen/logrus v1.3.0 github.com/stretchr/testify v1.3.0 github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2 // indirect - github.com/tonistiigi/fsutil v0.0.0-20190819224149-3d2716dd0a4d + github.com/tonistiigi/fsutil v0.0.0-20191018213012-0f039a052ca1 github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea github.com/uber/jaeger-client-go v0.0.0-20180103221425-e02c85f9069e github.com/uber/jaeger-lib v1.2.1 // indirect diff --git a/vendor/github.com/moby/buildkit/solver/combinedcache.go b/vendor/github.com/moby/buildkit/solver/combinedcache.go index 07c494d1cb15c..89361bcc04d97 100644 --- a/vendor/github.com/moby/buildkit/solver/combinedcache.go +++ b/vendor/github.com/moby/buildkit/solver/combinedcache.go @@ -87,6 +87,9 @@ func (cm *combinedCacheManager) Load(ctx context.Context, rec *CacheRecord) (res } } } + if len(results) == 0 { // TODO: handle gracefully + return nil, errors.Errorf("failed to load deleted cache") + } return results[0].Result, nil } diff --git a/vendor/github.com/moby/buildkit/util/flightcontrol/flightcontrol.go b/vendor/github.com/moby/buildkit/util/flightcontrol/flightcontrol.go index 120be2f125559..f06d4e8954999 100644 --- a/vendor/github.com/moby/buildkit/util/flightcontrol/flightcontrol.go +++ b/vendor/github.com/moby/buildkit/util/flightcontrol/flightcontrol.go @@ -116,7 +116,9 @@ func newCall(fn func(ctx context.Context) (interface{}, error)) *call { func (c *call) run() { defer c.closeProgressWriter() - v, err := c.fn(c.ctx) + ctx, cancel := context.WithCancel(c.ctx) + defer cancel() + v, err := c.fn(ctx) c.mu.Lock() c.result = v c.err = err diff --git a/vendor/github.com/tonistiigi/fsutil/diff.go b/vendor/github.com/tonistiigi/fsutil/diff.go index acad9f4f2235d..1cbc32b30669f 100644 --- a/vendor/github.com/tonistiigi/fsutil/diff.go +++ b/vendor/github.com/tonistiigi/fsutil/diff.go @@ -5,6 +5,7 @@ import ( "hash" "os" + "github.com/pkg/errors" "github.com/tonistiigi/fsutil/types" ) @@ -25,9 +26,14 @@ func GetWalkerFn(root string) walkerFn { return err } + stat, ok := f.Sys().(*types.Stat) + if !ok { + return errors.Errorf("%T invalid file without stat information", f.Sys()) + } + p := ¤tPath{ path: path, - f: f, + stat: stat, } select { diff --git a/vendor/github.com/tonistiigi/fsutil/diff_containerd.go b/vendor/github.com/tonistiigi/fsutil/diff_containerd.go index e63ee916a6af1..370271523bf42 100644 --- a/vendor/github.com/tonistiigi/fsutil/diff_containerd.go +++ b/vendor/github.com/tonistiigi/fsutil/diff_containerd.go @@ -37,12 +37,12 @@ type ChangeFunc func(ChangeKind, string, os.FileInfo, error) error type currentPath struct { path string - f os.FileInfo + stat *types.Stat // fullPath string } // doubleWalkDiff walks both directories to create a diff -func doubleWalkDiff(ctx context.Context, changeFn ChangeFunc, a, b walkerFn) (err error) { +func doubleWalkDiff(ctx context.Context, changeFn ChangeFunc, a, b walkerFn, filter FilterFunc) (err error) { g, ctx := errgroup.WithContext(ctx) var ( @@ -86,14 +86,22 @@ func doubleWalkDiff(ctx context.Context, changeFn ChangeFunc, a, b walkerFn) (er continue } - var f os.FileInfo - k, p := pathChange(f1, f2) + var f *types.Stat + var f2copy *currentPath + if f2 != nil { + statCopy := *f2.stat + if filter != nil { + filter(f2.path, &statCopy) + } + f2copy = ¤tPath{path: f2.path, stat: &statCopy} + } + k, p := pathChange(f1, f2copy) switch k { case ChangeKindAdd: if rmdir != "" { rmdir = "" } - f = f2.f + f = f2.stat f2 = nil case ChangeKindDelete: // Check if this file is already removed by being @@ -101,30 +109,30 @@ func doubleWalkDiff(ctx context.Context, changeFn ChangeFunc, a, b walkerFn) (er if rmdir != "" && strings.HasPrefix(f1.path, rmdir) { f1 = nil continue - } else if rmdir == "" && f1.f.IsDir() { + } else if rmdir == "" && f1.stat.IsDir() { rmdir = f1.path + string(os.PathSeparator) } else if rmdir != "" { rmdir = "" } f1 = nil case ChangeKindModify: - same, err := sameFile(f1, f2) + same, err := sameFile(f1, f2copy) if err != nil { return err } - if f1.f.IsDir() && !f2.f.IsDir() { + if f1.stat.IsDir() && !f2copy.stat.IsDir() { rmdir = f1.path + string(os.PathSeparator) } else if rmdir != "" { rmdir = "" } - f = f2.f + f = f2.stat f1 = nil f2 = nil if same { continue loop0 } } - if err := changeFn(k, p, f, nil); err != nil { + if err := changeFn(k, p, &StatInfo{f}, nil); err != nil { return err } } @@ -159,28 +167,17 @@ func pathChange(lower, upper *currentPath) (ChangeKind, string) { func sameFile(f1, f2 *currentPath) (same bool, retErr error) { // If not a directory also check size, modtime, and content - if !f1.f.IsDir() { - if f1.f.Size() != f2.f.Size() { + if !f1.stat.IsDir() { + if f1.stat.Size_ != f2.stat.Size_ { return false, nil } - t1 := f1.f.ModTime() - t2 := f2.f.ModTime() - if t1.UnixNano() != t2.UnixNano() { + if f1.stat.ModTime != f2.stat.ModTime { return false, nil } } - ls1, ok := f1.f.Sys().(*types.Stat) - if !ok { - return false, nil - } - ls2, ok := f2.f.Sys().(*types.Stat) - if !ok { - return false, nil - } - - return compareStat(ls1, ls2) + return compareStat(f1.stat, f2.stat) } // compareStat returns whether the stats are equivalent, diff --git a/vendor/github.com/tonistiigi/fsutil/diskwriter.go b/vendor/github.com/tonistiigi/fsutil/diskwriter.go index 79a1673b7877d..70323c88c9f38 100644 --- a/vendor/github.com/tonistiigi/fsutil/diskwriter.go +++ b/vendor/github.com/tonistiigi/fsutil/diskwriter.go @@ -194,7 +194,7 @@ func (dw *DiskWriter) HandleChange(kind ChangeKind, p string, fi os.FileInfo, er if isRegularFile { if dw.opt.AsyncDataCb != nil { - dw.requestAsyncFileData(p, destPath, fi) + dw.requestAsyncFileData(p, destPath, fi, &statCopy) } } else { return dw.processChange(kind, p, fi, nil) @@ -203,7 +203,7 @@ func (dw *DiskWriter) HandleChange(kind ChangeKind, p string, fi os.FileInfo, er return nil } -func (dw *DiskWriter) requestAsyncFileData(p, dest string, fi os.FileInfo) { +func (dw *DiskWriter) requestAsyncFileData(p, dest string, fi os.FileInfo, st *types.Stat) { // todo: limit worker threads dw.eg.Go(func() error { if err := dw.processChange(ChangeKindAdd, p, fi, &lazyFileWriter{ @@ -211,7 +211,7 @@ func (dw *DiskWriter) requestAsyncFileData(p, dest string, fi os.FileInfo) { }); err != nil { return err } - return chtimes(dest, fi.ModTime().UnixNano()) // TODO: parent dirs + return chtimes(dest, st.ModTime) // TODO: parent dirs }) } diff --git a/vendor/github.com/tonistiigi/fsutil/go.mod b/vendor/github.com/tonistiigi/fsutil/go.mod index 0e26f72085ee9..c6485f6155cf4 100644 --- a/vendor/github.com/tonistiigi/fsutil/go.mod +++ b/vendor/github.com/tonistiigi/fsutil/go.mod @@ -19,7 +19,7 @@ require ( github.com/pkg/errors v0.8.1 github.com/sirupsen/logrus v1.0.3 // indirect github.com/stretchr/testify v1.3.0 - golang.org/x/crypto v0.0.0-20190129210102-0709b304e793 // indirect + golang.org/x/crypto v0.0.0-20180904163835-0709b304e793 // indirect golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e gopkg.in/airbrake/gobrake.v2 v2.0.9 // indirect diff --git a/vendor/github.com/tonistiigi/fsutil/receive.go b/vendor/github.com/tonistiigi/fsutil/receive.go index 4de7ec5f0bbc6..0210dcdb1add9 100644 --- a/vendor/github.com/tonistiigi/fsutil/receive.go +++ b/vendor/github.com/tonistiigi/fsutil/receive.go @@ -133,7 +133,7 @@ func (r *receiver) run(ctx context.Context) error { if !r.merge { destWalker = GetWalkerFn(r.dest) } - err := doubleWalkDiff(ctx, dw.HandleChange, destWalker, w.fill) + err := doubleWalkDiff(ctx, dw.HandleChange, destWalker, w.fill, r.filter) if err != nil { return err } @@ -180,11 +180,11 @@ func (r *receiver) run(ctx context.Context) error { r.mu.Unlock() } i++ - cp := ¤tPath{path: p.Stat.Path, f: &StatInfo{p.Stat}} - if err := r.orderValidator.HandleChange(ChangeKindAdd, cp.path, cp.f, nil); err != nil { + cp := ¤tPath{path: p.Stat.Path, stat: p.Stat} + if err := r.orderValidator.HandleChange(ChangeKindAdd, cp.path, &StatInfo{cp.stat}, nil); err != nil { return err } - if err := r.hlValidator.HandleChange(ChangeKindAdd, cp.path, cp.f, nil); err != nil { + if err := r.hlValidator.HandleChange(ChangeKindAdd, cp.path, &StatInfo{cp.stat}, nil); err != nil { return err } if err := w.update(cp); err != nil { diff --git a/vendor/github.com/tonistiigi/fsutil/types/stat.go b/vendor/github.com/tonistiigi/fsutil/types/stat.go new file mode 100644 index 0000000000000..b79fd2bd76d42 --- /dev/null +++ b/vendor/github.com/tonistiigi/fsutil/types/stat.go @@ -0,0 +1,7 @@ +package types + +import "os" + +func (s Stat) IsDir() bool { + return os.FileMode(s.Mode).IsDir() +}