浏览代码

pkg/system: make IsAbs() platform-agnostic

filepath.IsAbs() will short-circuit on Linux/Unix, so having a single
implementation should not affect those platforms.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
(cherry picked from commit 2640aec0d78e4ba51e0d171cdcf79b14a38a6599)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Sebastiaan van Stijn 2 年之前
父节点
当前提交
40515da6d6
共有 3 个文件被更改,包括 20 次插入24 次删除
  1. 19 0
      pkg/system/filesys.go
  2. 1 9
      pkg/system/filesys_unix.go
  3. 0 15
      pkg/system/filesys_windows.go

+ 19 - 0
pkg/system/filesys.go

@@ -0,0 +1,19 @@
+package system
+
+import (
+	"os"
+	"path/filepath"
+	"strings"
+)
+
+// IsAbs is a platform-agnostic wrapper for filepath.IsAbs.
+//
+// On Windows, golang filepath.IsAbs does not consider a path \windows\system32
+// as absolute as it doesn't start with a drive-letter/colon combination. However,
+// in docker we need to verify things such as WORKDIR /windows/system32 in
+// a Dockerfile (which gets translated to \windows\system32 when being processed
+// by the daemon). This SHOULD be treated as absolute from a docker processing
+// perspective.
+func IsAbs(path string) bool {
+	return filepath.IsAbs(path) || strings.HasPrefix(path, string(os.PathSeparator))
+}

+ 1 - 9
pkg/system/filesys_unix.go

@@ -3,10 +3,7 @@
 
 
 package system // import "github.com/docker/docker/pkg/system"
 package system // import "github.com/docker/docker/pkg/system"
 
 
-import (
-	"os"
-	"path/filepath"
-)
+import "os"
 
 
 // MkdirAllWithACL is a wrapper for os.MkdirAll on unix systems.
 // MkdirAllWithACL is a wrapper for os.MkdirAll on unix systems.
 func MkdirAllWithACL(path string, perm os.FileMode, sddl string) error {
 func MkdirAllWithACL(path string, perm os.FileMode, sddl string) error {
@@ -19,11 +16,6 @@ func MkdirAll(path string, perm os.FileMode) error {
 	return os.MkdirAll(path, perm)
 	return os.MkdirAll(path, perm)
 }
 }
 
 
-// IsAbs is a platform-specific wrapper for filepath.IsAbs.
-func IsAbs(path string) bool {
-	return filepath.IsAbs(path)
-}
-
 // The functions below here are wrappers for the equivalents in the os and ioutils packages.
 // The functions below here are wrappers for the equivalents in the os and ioutils packages.
 // They are passthrough on Unix platforms, and only relevant on Windows.
 // They are passthrough on Unix platforms, and only relevant on Windows.
 
 

+ 0 - 15
pkg/system/filesys_windows.go

@@ -5,7 +5,6 @@ import (
 	"path/filepath"
 	"path/filepath"
 	"regexp"
 	"regexp"
 	"strconv"
 	"strconv"
-	"strings"
 	"sync"
 	"sync"
 	"syscall"
 	"syscall"
 	"time"
 	"time"
@@ -122,20 +121,6 @@ func mkdirWithACL(name string, sddl string) error {
 	return nil
 	return nil
 }
 }
 
 
-// IsAbs is a platform-specific wrapper for filepath.IsAbs. On Windows,
-// golang filepath.IsAbs does not consider a path \windows\system32 as absolute
-// as it doesn't start with a drive-letter/colon combination. However, in
-// docker we need to verify things such as WORKDIR /windows/system32 in
-// a Dockerfile (which gets translated to \windows\system32 when being processed
-// by the daemon. This SHOULD be treated as absolute from a docker processing
-// perspective.
-func IsAbs(path string) bool {
-	if filepath.IsAbs(path) || strings.HasPrefix(path, string(os.PathSeparator)) {
-		return true
-	}
-	return false
-}
-
 // The origin of the functions below here are the golang OS and windows packages,
 // The origin of the functions below here are the golang OS and windows packages,
 // slightly modified to only cope with files, not directories due to the
 // slightly modified to only cope with files, not directories due to the
 // specific use case.
 // specific use case.