From 684633f734f86b6a66873b42c9356eb543e12917 Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Sat, 18 Mar 2017 12:29:56 -0700 Subject: [PATCH] Fix relative path on windows for uuid paths Signed-off-by: Tonis Tiigi --- builder/remotecontext/lazycontext.go | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/builder/remotecontext/lazycontext.go b/builder/remotecontext/lazycontext.go index 3b7625ed3a..1f89c8d884 100644 --- a/builder/remotecontext/lazycontext.go +++ b/builder/remotecontext/lazycontext.go @@ -5,6 +5,8 @@ import ( "io" "os" "path/filepath" + "runtime" + "strings" "github.com/docker/docker/builder" "github.com/docker/docker/pkg/pools" @@ -56,7 +58,7 @@ func (c *lazyContext) Stat(path string) (string, builder.FileInfo, error) { return "", nil, errors.WithStack(convertPathError(err, cleanPath)) } - relPath, err := filepath.Rel(c.root, fullPath) + relPath, err := rel(c.root, fullPath) if err != nil { return "", nil, errors.WithStack(convertPathError(err, cleanPath)) } @@ -82,7 +84,7 @@ func (c *lazyContext) Walk(root string, walkFn builder.WalkFunc) error { return err } return filepath.Walk(fullPath, func(fullPath string, fi os.FileInfo, err error) error { - relPath, err := filepath.Rel(c.root, fullPath) + relPath, err := rel(c.root, fullPath) if err != nil { return errors.WithStack(err) } @@ -147,3 +149,18 @@ func convertPathError(err error, cleanpath string) error { } return err } + +func rel(basepath, targpath string) (string, error) { + // filepath.Rel can't handle UUID paths in windows + if runtime.GOOS == "windows" { + pfx := basepath + `\` + if strings.HasPrefix(targpath, pfx) { + p := strings.TrimPrefix(targpath, pfx) + if p == "" { + p = "." + } + return p, nil + } + } + return filepath.Rel(basepath, targpath) +}