Browse code

Windows: graphdriver refactor

Signed-off-by: John Howard <jhoward@microsoft.com>

John Howard authored on 2015/04/25 04:35:51
Showing 4 changed files
... ...
@@ -4,7 +4,7 @@ import (
4 4
 	"errors"
5 5
 	"fmt"
6 6
 	"os"
7
-	"path"
7
+	"path/filepath"
8 8
 	"strings"
9 9
 
10 10
 	"github.com/Sirupsen/logrus"
... ...
@@ -14,60 +14,17 @@ import (
14 14
 type FsMagic uint32
15 15
 
16 16
 const (
17
-	FsMagicAufs        = FsMagic(0x61756673)
18
-	FsMagicBtrfs       = FsMagic(0x9123683E)
19
-	FsMagicCramfs      = FsMagic(0x28cd3d45)
20
-	FsMagicExtfs       = FsMagic(0x0000EF53)
21
-	FsMagicF2fs        = FsMagic(0xF2F52010)
22
-	FsMagicJffs2Fs     = FsMagic(0x000072b6)
23
-	FsMagicJfs         = FsMagic(0x3153464a)
24
-	FsMagicNfsFs       = FsMagic(0x00006969)
25
-	FsMagicRamFs       = FsMagic(0x858458f6)
26
-	FsMagicReiserFs    = FsMagic(0x52654973)
27
-	FsMagicSmbFs       = FsMagic(0x0000517B)
28
-	FsMagicSquashFs    = FsMagic(0x73717368)
29
-	FsMagicTmpFs       = FsMagic(0x01021994)
30 17
 	FsMagicUnsupported = FsMagic(0x00000000)
31
-	FsMagicXfs         = FsMagic(0x58465342)
32
-	FsMagicZfs         = FsMagic(0x2fc12fc1)
33 18
 )
34 19
 
35 20
 var (
36 21
 	DefaultDriver string
37 22
 	// All registred drivers
38 23
 	drivers map[string]InitFunc
39
-	// Slice of drivers that should be used in an order
40
-	priority = []string{
41
-		"aufs",
42
-		"btrfs",
43
-		"zfs",
44
-		"devicemapper",
45
-		"overlay",
46
-		"vfs",
47
-	}
48 24
 
49 25
 	ErrNotSupported   = errors.New("driver not supported")
50 26
 	ErrPrerequisites  = errors.New("prerequisites for driver not satisfied (wrong filesystem?)")
51 27
 	ErrIncompatibleFS = fmt.Errorf("backing file system is unsupported for this graph driver")
52
-
53
-	FsNames = map[FsMagic]string{
54
-		FsMagicAufs:        "aufs",
55
-		FsMagicBtrfs:       "btrfs",
56
-		FsMagicCramfs:      "cramfs",
57
-		FsMagicExtfs:       "extfs",
58
-		FsMagicF2fs:        "f2fs",
59
-		FsMagicJffs2Fs:     "jffs2",
60
-		FsMagicJfs:         "jfs",
61
-		FsMagicNfsFs:       "nfs",
62
-		FsMagicRamFs:       "ramfs",
63
-		FsMagicReiserFs:    "reiserfs",
64
-		FsMagicSmbFs:       "smb",
65
-		FsMagicSquashFs:    "squashfs",
66
-		FsMagicTmpFs:       "tmpfs",
67
-		FsMagicUnsupported: "unsupported",
68
-		FsMagicXfs:         "xfs",
69
-		FsMagicZfs:         "zfs",
70
-	}
71 28
 )
72 29
 
73 30
 type InitFunc func(root string, options []string) (Driver, error)
... ...
@@ -139,7 +96,7 @@ func Register(name string, initFunc InitFunc) error {
139 139
 
140 140
 func GetDriver(name, home string, options []string) (Driver, error) {
141 141
 	if initFunc, exists := drivers[name]; exists {
142
-		return initFunc(path.Join(home, name), options)
142
+		return initFunc(filepath.Join(home, name), options)
143 143
 	}
144 144
 	return nil, ErrNotSupported
145 145
 }
... ...
@@ -210,7 +167,7 @@ func New(root string, options []string) (driver Driver, err error) {
210 210
 func scanPriorDrivers(root string) []string {
211 211
 	priorDrivers := []string{}
212 212
 	for driver := range drivers {
213
-		p := path.Join(root, driver)
213
+		p := filepath.Join(root, driver)
214 214
 		if _, err := os.Stat(p); err == nil {
215 215
 			priorDrivers = append(priorDrivers, driver)
216 216
 		}
... ...
@@ -222,7 +179,7 @@ func checkPriorDriver(name, root string) error {
222 222
 	priorDrivers := []string{}
223 223
 	for _, prior := range scanPriorDrivers(root) {
224 224
 		if prior != name && prior != "vfs" {
225
-			if _, err := os.Stat(path.Join(root, prior)); err == nil {
225
+			if _, err := os.Stat(filepath.Join(root, prior)); err == nil {
226 226
 				priorDrivers = append(priorDrivers, prior)
227 227
 			}
228 228
 		}
... ...
@@ -1,13 +1,64 @@
1
+// +build linux
2
+
1 3
 package graphdriver
2 4
 
3 5
 import (
4
-	"path"
6
+	"path/filepath"
5 7
 	"syscall"
6 8
 )
7 9
 
10
+const (
11
+	FsMagicAufs     = FsMagic(0x61756673)
12
+	FsMagicBtrfs    = FsMagic(0x9123683E)
13
+	FsMagicCramfs   = FsMagic(0x28cd3d45)
14
+	FsMagicExtfs    = FsMagic(0x0000EF53)
15
+	FsMagicF2fs     = FsMagic(0xF2F52010)
16
+	FsMagicJffs2Fs  = FsMagic(0x000072b6)
17
+	FsMagicJfs      = FsMagic(0x3153464a)
18
+	FsMagicNfsFs    = FsMagic(0x00006969)
19
+	FsMagicRamFs    = FsMagic(0x858458f6)
20
+	FsMagicReiserFs = FsMagic(0x52654973)
21
+	FsMagicSmbFs    = FsMagic(0x0000517B)
22
+	FsMagicSquashFs = FsMagic(0x73717368)
23
+	FsMagicTmpFs    = FsMagic(0x01021994)
24
+	FsMagicXfs      = FsMagic(0x58465342)
25
+	FsMagicZfs      = FsMagic(0x2fc12fc1)
26
+)
27
+
28
+var (
29
+	// Slice of drivers that should be used in an order
30
+	priority = []string{
31
+		"aufs",
32
+		"btrfs",
33
+		"zfs",
34
+		"devicemapper",
35
+		"overlay",
36
+		"vfs",
37
+	}
38
+
39
+	FsNames = map[FsMagic]string{
40
+		FsMagicAufs:        "aufs",
41
+		FsMagicBtrfs:       "btrfs",
42
+		FsMagicCramfs:      "cramfs",
43
+		FsMagicExtfs:       "extfs",
44
+		FsMagicF2fs:        "f2fs",
45
+		FsMagicJffs2Fs:     "jffs2",
46
+		FsMagicJfs:         "jfs",
47
+		FsMagicNfsFs:       "nfs",
48
+		FsMagicRamFs:       "ramfs",
49
+		FsMagicReiserFs:    "reiserfs",
50
+		FsMagicSmbFs:       "smb",
51
+		FsMagicSquashFs:    "squashfs",
52
+		FsMagicTmpFs:       "tmpfs",
53
+		FsMagicUnsupported: "unsupported",
54
+		FsMagicXfs:         "xfs",
55
+		FsMagicZfs:         "zfs",
56
+	}
57
+)
58
+
8 59
 func GetFSMagic(rootpath string) (FsMagic, error) {
9 60
 	var buf syscall.Statfs_t
10
-	if err := syscall.Statfs(path.Dir(rootpath), &buf); err != nil {
61
+	if err := syscall.Statfs(filepath.Dir(rootpath), &buf); err != nil {
11 62
 		return 0, err
12 63
 	}
13 64
 	return FsMagic(buf.Type), nil
... ...
@@ -1,7 +1,14 @@
1
-// +build !linux
1
+// +build !linux,!windows
2 2
 
3 3
 package graphdriver
4 4
 
5
+var (
6
+	// Slice of drivers that should be used in an order
7
+	priority = []string{
8
+		"unsupported",
9
+	}
10
+)
11
+
5 12
 func GetFSMagic(rootpath string) (FsMagic, error) {
6 13
 	return FsMagicUnsupported, nil
7 14
 }
8 15
new file mode 100644
... ...
@@ -0,0 +1,26 @@
0
+package graphdriver
1
+
2
+type DiffDiskDriver interface {
3
+	Driver
4
+	CopyDiff(id, sourceId string) error
5
+}
6
+
7
+const (
8
+	FsMagicWindows = FsMagic(0xa1b1830f)
9
+)
10
+
11
+var (
12
+	// Slice of drivers that should be used in an order
13
+	priority = []string{
14
+		"windows",
15
+	}
16
+
17
+	FsNames = map[FsMagic]string{
18
+		FsMagicWindows:     "windows",
19
+		FsMagicUnsupported: "unsupported",
20
+	}
21
+)
22
+
23
+func GetFSMagic(rootpath string) (FsMagic, error) {
24
+	return FsMagicWindows, nil
25
+}