зеркало из https://github.com/microsoft/docker.git
Fix relative path on windows for uuid paths
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
Родитель
f95f58283b
Коммит
684633f734
|
@ -5,6 +5,8 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"runtime"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/docker/docker/builder"
|
"github.com/docker/docker/builder"
|
||||||
"github.com/docker/docker/pkg/pools"
|
"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))
|
return "", nil, errors.WithStack(convertPathError(err, cleanPath))
|
||||||
}
|
}
|
||||||
|
|
||||||
relPath, err := filepath.Rel(c.root, fullPath)
|
relPath, err := rel(c.root, fullPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", nil, errors.WithStack(convertPathError(err, cleanPath))
|
return "", nil, errors.WithStack(convertPathError(err, cleanPath))
|
||||||
}
|
}
|
||||||
|
@ -82,7 +84,7 @@ func (c *lazyContext) Walk(root string, walkFn builder.WalkFunc) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return filepath.Walk(fullPath, func(fullPath string, fi os.FileInfo, err error) error {
|
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 {
|
if err != nil {
|
||||||
return errors.WithStack(err)
|
return errors.WithStack(err)
|
||||||
}
|
}
|
||||||
|
@ -147,3 +149,18 @@ func convertPathError(err error, cleanpath string) error {
|
||||||
}
|
}
|
||||||
return err
|
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)
|
||||||
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче