Merge pull request #10901 from containerd/dependabot/go_modules/github.com/containerd/continuity-0.4.4
build(deps): bump github.com/containerd/continuity from 0.4.3 to 0.4.4
This commit is contained in:
		
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							| @@ -14,7 +14,7 @@ require ( | ||||
| 	github.com/containerd/cgroups/v3 v3.0.3 | ||||
| 	github.com/containerd/console v1.0.4 | ||||
| 	github.com/containerd/containerd/api v1.8.0-rc.4 | ||||
| 	github.com/containerd/continuity v0.4.3 | ||||
| 	github.com/containerd/continuity v0.4.4 | ||||
| 	github.com/containerd/errdefs v0.3.0 | ||||
| 	github.com/containerd/errdefs/pkg v0.3.0 | ||||
| 	github.com/containerd/fifo v1.1.0 | ||||
|   | ||||
							
								
								
									
										4
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.sum
									
									
									
									
									
								
							| @@ -673,8 +673,8 @@ github.com/containerd/containerd v1.7.23 h1:H2CClyUkmpKAGlhQp95g2WXHfLYc7whAuvZG | ||||
| github.com/containerd/containerd v1.7.23/go.mod h1:7QUzfURqZWCZV7RLNEn1XjUCQLEf0bkaK4GjUaZehxw= | ||||
| github.com/containerd/containerd/api v1.8.0-rc.4 h1:Z650GHP0OxsoTwwii5U2hyTt7eCRQvvDnRM7pEH/DE0= | ||||
| github.com/containerd/containerd/api v1.8.0-rc.4/go.mod h1:dFv4lt6S20wTu/hMcP4350RL87qPWLVa/OHOwmmdnYc= | ||||
| github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8= | ||||
| github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= | ||||
| github.com/containerd/continuity v0.4.4 h1:/fNVfTJ7wIl/YPMHjf+5H32uFhl63JucB34PlCpMKII= | ||||
| github.com/containerd/continuity v0.4.4/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE= | ||||
| github.com/containerd/errdefs v0.3.0 h1:FSZgGOeK4yuT/+DnF07/Olde/q4KBoMsaamhXxIMDp4= | ||||
| github.com/containerd/errdefs v0.3.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= | ||||
| github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= | ||||
|   | ||||
| @@ -33,7 +33,17 @@ const umountflags int = 0 | ||||
| var rootEnabled bool | ||||
|  | ||||
| func init() { | ||||
| 	if flag.Lookup("test.root") == nil { | ||||
| 		flag.BoolVar(&rootEnabled, "test.root", false, "enable tests that require root") | ||||
| 	} else { | ||||
| 		// The flag is already registered by continuity/testutil | ||||
| 		for _, f := range os.Args { | ||||
| 			if f == "-test.root" || f == "-test.root=true" { | ||||
| 				rootEnabled = true | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // DumpDir prints the contents of the directory to the testing logger. | ||||
|   | ||||
							
								
								
									
										6
									
								
								vendor/github.com/containerd/continuity/.golangci.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/containerd/continuity/.golangci.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -12,5 +12,11 @@ linters: | ||||
|   disable: | ||||
|     - errcheck | ||||
|  | ||||
| issues: | ||||
|   exclude-rules: | ||||
|     - linters: | ||||
|         - revive | ||||
|       text: "unused-parameter" | ||||
|  | ||||
| run: | ||||
|   timeout: 3m | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/containerd/continuity/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/containerd/continuity/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -57,7 +57,7 @@ test: | ||||
|  | ||||
| root-test: | ||||
| 	@echo "+ $@" | ||||
| 	@go test -exec sudo ${TEST_REQUIRES_ROOT_PACKAGES} -test.root | ||||
| 	@go test -exec sudo ${TEST_REQUIRES_ROOT_PACKAGES} -test.root -test.v | ||||
|  | ||||
| test-compile: | ||||
| 	@echo "+ $@" | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/devices/devices_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/devices/devices_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !windows | ||||
| // +build !windows | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/devices/mknod_freebsd.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/devices/mknod_freebsd.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build freebsd || dragonfly | ||||
| // +build freebsd dragonfly | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/devices/mknod_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/devices/mknod_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !(freebsd || windows) | ||||
| // +build !freebsd,!windows | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/driver/driver_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/driver/driver_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !windows | ||||
| // +build !windows | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/driver/driver_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/driver/driver_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build go1.13 | ||||
| // +build go1.13 | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/driver/lchmod_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/driver/lchmod_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build darwin || freebsd || netbsd || openbsd || dragonfly || solaris | ||||
| // +build darwin freebsd netbsd openbsd dragonfly solaris | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/github.com/containerd/continuity/fs/copy.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/containerd/continuity/fs/copy.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -22,7 +22,7 @@ import ( | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
|  | ||||
| 	"github.com/sirupsen/logrus" | ||||
| 	"github.com/containerd/log" | ||||
| ) | ||||
|  | ||||
| // XAttrErrorHandler transform a non-nil xattr error. | ||||
| @@ -161,7 +161,7 @@ func copyDirectory(dst, src string, inodes map[uint64]string, o *copyDirOpts) er | ||||
| 				return fmt.Errorf("failed to create irregular file: %w", err) | ||||
| 			} | ||||
| 		default: | ||||
| 			logrus.Warnf("unsupported mode: %s: %s", source, fileInfo.Mode()) | ||||
| 			log.L.Warnf("unsupported mode: %s: %s", source, fileInfo.Mode()) | ||||
| 			return nil | ||||
| 		} | ||||
|  | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/copy_irregular_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/copy_irregular_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !windows && !freebsd | ||||
| // +build !windows,!freebsd | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/github.com/containerd/continuity/fs/copy_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/containerd/continuity/fs/copy_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -17,6 +17,7 @@ | ||||
| package fs | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"syscall" | ||||
| @@ -64,6 +65,9 @@ func copyFileInfo(fi os.FileInfo, src, name string) error { | ||||
| func copyXAttrs(dst, src string, excludes map[string]struct{}, errorHandler XAttrErrorHandler) error { | ||||
| 	xattrKeys, err := sysx.LListxattr(src) | ||||
| 	if err != nil { | ||||
| 		if errors.Is(err, unix.ENOTSUP) { | ||||
| 			return nil | ||||
| 		} | ||||
| 		e := fmt.Errorf("failed to list xattrs on %s: %w", src, err) | ||||
| 		if errorHandler != nil { | ||||
| 			e = errorHandler(dst, src, "", e) | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/copy_nondarwin.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/copy_nondarwin.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !darwin | ||||
| // +build !darwin | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										6
									
								
								vendor/github.com/containerd/continuity/fs/copy_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/containerd/continuity/fs/copy_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build darwin || freebsd || openbsd || netbsd || dragonfly || solaris | ||||
| // +build darwin freebsd openbsd netbsd dragonfly solaris | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
| @@ -20,12 +19,14 @@ | ||||
| package fs | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"runtime" | ||||
| 	"syscall" | ||||
|  | ||||
| 	"github.com/containerd/continuity/sysx" | ||||
| 	"golang.org/x/sys/unix" | ||||
| ) | ||||
|  | ||||
| func copyFileInfo(fi os.FileInfo, src, name string) error { | ||||
| @@ -67,6 +68,9 @@ func copyXAttrs(dst, src string, excludes map[string]struct{}, errorHandler XAtt | ||||
| 			// On darwin, character devices do not permit listing xattrs | ||||
| 			return nil | ||||
| 		} | ||||
| 		if errors.Is(err, unix.ENOTSUP) { | ||||
| 			return nil | ||||
| 		} | ||||
| 		e := fmt.Errorf("failed to list xattrs on %s: %w", src, err) | ||||
| 		if errorHandler != nil { | ||||
| 			e = errorHandler(dst, src, "", e) | ||||
|   | ||||
							
								
								
									
										89
									
								
								vendor/github.com/containerd/continuity/fs/diff.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										89
									
								
								vendor/github.com/containerd/continuity/fs/diff.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -18,11 +18,12 @@ package fs | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/sirupsen/logrus" | ||||
| 	"github.com/containerd/log" | ||||
| 	"golang.org/x/sync/errgroup" | ||||
| ) | ||||
|  | ||||
| @@ -100,14 +101,11 @@ type ChangeFunc func(ChangeKind, string, os.FileInfo, error) error | ||||
| // is to account for timestamp truncation during archiving. | ||||
| func Changes(ctx context.Context, a, b string, changeFn ChangeFunc) error { | ||||
| 	if a == "" { | ||||
| 		logrus.Debugf("Using single walk diff for %s", b) | ||||
| 		log.G(ctx).Debugf("Using single walk diff for %s", b) | ||||
| 		return addDirChanges(ctx, changeFn, b) | ||||
| 	} else if diffOptions := detectDirDiff(b, a); diffOptions != nil { | ||||
| 		logrus.Debugf("Using single walk diff for %s from %s", diffOptions.diffDir, a) | ||||
| 		return diffDirChanges(ctx, changeFn, a, diffOptions) | ||||
| 	} | ||||
|  | ||||
| 	logrus.Debugf("Using double walk diff for %s from %s", b, a) | ||||
| 	log.G(ctx).Debugf("Using double walk diff for %s from %s", b, a) | ||||
| 	return doubleWalkDiff(ctx, changeFn, a, b) | ||||
| } | ||||
|  | ||||
| @@ -134,24 +132,53 @@ func addDirChanges(ctx context.Context, changeFn ChangeFunc, root string) error | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| // DiffChangeSource is the source of diff directory. | ||||
| type DiffSource int | ||||
|  | ||||
| const ( | ||||
| 	// DiffSourceOverlayFS indicates that a diff directory is from | ||||
| 	// OverlayFS. | ||||
| 	DiffSourceOverlayFS DiffSource = iota | ||||
| ) | ||||
|  | ||||
| // diffDirOptions is used when the diff can be directly calculated from | ||||
| // a diff directory to its base, without walking both trees. | ||||
| type diffDirOptions struct { | ||||
| 	diffDir      string | ||||
| 	skipChange   func(string) (bool, error) | ||||
| 	deleteChange func(string, string, os.FileInfo) (string, error) | ||||
| 	skipChange   func(string, os.FileInfo) (bool, error) | ||||
| 	deleteChange func(string, string, os.FileInfo, ChangeFunc) (bool, error) | ||||
| } | ||||
|  | ||||
| // diffDirChanges walks the diff directory and compares changes against the base. | ||||
| func diffDirChanges(ctx context.Context, changeFn ChangeFunc, base string, o *diffDirOptions) error { | ||||
| // DiffDirChanges walks the diff directory and compares changes against the base. | ||||
| // | ||||
| // NOTE: If all the children of a dir are removed, or that dir are recreated | ||||
| // after remove, we will mark non-existing `.wh..opq` file as deleted. It's | ||||
| // unlikely to create explicit whiteout files for all the children and all | ||||
| // descendants. And based on OCI spec, it's not possible to create a file or | ||||
| // dir with a name beginning with `.wh.`. So, after `.wh..opq` file has been | ||||
| // deleted, the ChangeFunc, the receiver will add whiteout prefix to create a | ||||
| // opaque whiteout `.wh..wh..opq`. | ||||
| // | ||||
| // REF: https://github.com/opencontainers/image-spec/blob/v1.0/layer.md#whiteouts | ||||
| func DiffDirChanges(ctx context.Context, baseDir, diffDir string, source DiffSource, changeFn ChangeFunc) error { | ||||
| 	var o *diffDirOptions | ||||
|  | ||||
| 	switch source { | ||||
| 	case DiffSourceOverlayFS: | ||||
| 		o = &diffDirOptions{ | ||||
| 			deleteChange: overlayFSWhiteoutConvert, | ||||
| 		} | ||||
| 	default: | ||||
| 		return errors.New("unknown diff change source") | ||||
| 	} | ||||
|  | ||||
| 	changedDirs := make(map[string]struct{}) | ||||
| 	return filepath.Walk(o.diffDir, func(path string, f os.FileInfo, err error) error { | ||||
| 	return filepath.Walk(diffDir, func(path string, f os.FileInfo, err error) error { | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
|  | ||||
| 		// Rebase path | ||||
| 		path, err = filepath.Rel(o.diffDir, path) | ||||
| 		path, err = filepath.Rel(diffDir, path) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| @@ -163,38 +190,45 @@ func diffDirChanges(ctx context.Context, changeFn ChangeFunc, base string, o *di | ||||
| 			return nil | ||||
| 		} | ||||
|  | ||||
| 		// TODO: handle opaqueness, start new double walker at this | ||||
| 		// location to get deletes, and skip tree in single walker | ||||
|  | ||||
| 		if o.skipChange != nil { | ||||
| 			if skip, err := o.skipChange(path); skip { | ||||
| 			if skip, err := o.skipChange(path, f); skip { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		var kind ChangeKind | ||||
|  | ||||
| 		deletedFile, err := o.deleteChange(o.diffDir, path, f) | ||||
| 		deletedFile := false | ||||
|  | ||||
| 		if o.deleteChange != nil { | ||||
| 			deletedFile, err = o.deleteChange(diffDir, path, f, changeFn) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
|  | ||||
| 			_, err = os.Stat(filepath.Join(baseDir, path)) | ||||
| 			if err != nil { | ||||
| 				if !os.IsNotExist(err) { | ||||
| 					return err | ||||
| 				} | ||||
| 				deletedFile = false | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		// Find out what kind of modification happened | ||||
| 		if deletedFile != "" { | ||||
| 			path = deletedFile | ||||
| 		if deletedFile { | ||||
| 			kind = ChangeKindDelete | ||||
| 			f = nil | ||||
| 		} else { | ||||
| 			// Otherwise, the file was added | ||||
| 			kind = ChangeKindAdd | ||||
|  | ||||
| 			// ...Unless it already existed in a base, in which case, it's a modification | ||||
| 			stat, err := os.Stat(filepath.Join(base, path)) | ||||
| 			// ...Unless it already existed in a baseDir, in which case, it's a modification | ||||
| 			stat, err := os.Stat(filepath.Join(baseDir, path)) | ||||
| 			if err != nil && !os.IsNotExist(err) { | ||||
| 				return err | ||||
| 			} | ||||
| 			if err == nil { | ||||
| 				// The file existed in the base, so that's a modification | ||||
| 				// The file existed in the baseDir, so that's a modification | ||||
|  | ||||
| 				// However, if it's a directory, maybe it wasn't actually modified. | ||||
| 				// If you modify /foo/bar/baz, then /foo will be part of the changed files only because it's the parent of bar | ||||
| @@ -215,10 +249,12 @@ func diffDirChanges(ctx context.Context, changeFn ChangeFunc, base string, o *di | ||||
| 		if f.IsDir() { | ||||
| 			changedDirs[path] = struct{}{} | ||||
| 		} | ||||
|  | ||||
| 		if kind == ChangeKindAdd || kind == ChangeKindDelete { | ||||
| 			parent := filepath.Dir(path) | ||||
|  | ||||
| 			if _, ok := changedDirs[parent]; !ok && parent != "/" { | ||||
| 				pi, err := os.Stat(filepath.Join(o.diffDir, parent)) | ||||
| 				pi, err := os.Stat(filepath.Join(diffDir, parent)) | ||||
| 				if err := changeFn(ChangeKindModify, parent, pi, err); err != nil { | ||||
| 					return err | ||||
| 				} | ||||
| @@ -226,6 +262,9 @@ func diffDirChanges(ctx context.Context, changeFn ChangeFunc, base string, o *di | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		if kind == ChangeKindDelete { | ||||
| 			f = nil | ||||
| 		} | ||||
| 		return changeFn(kind, path, f, nil) | ||||
| 	}) | ||||
| } | ||||
|   | ||||
							
								
								
									
										101
									
								
								vendor/github.com/containerd/continuity/fs/diff_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								vendor/github.com/containerd/continuity/fs/diff_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|  | ||||
|    Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|    you may not use this file except in compliance with the License. | ||||
|    You may obtain a copy of the License at | ||||
|  | ||||
|        http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  | ||||
|    Unless required by applicable law or agreed to in writing, software | ||||
|    distributed under the License is distributed on an "AS IS" BASIS, | ||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|    See the License for the specific language governing permissions and | ||||
|    limitations under the License. | ||||
| */ | ||||
|  | ||||
| package fs | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"syscall" | ||||
|  | ||||
| 	"github.com/containerd/continuity/devices" | ||||
| 	"github.com/containerd/continuity/sysx" | ||||
|  | ||||
| 	"golang.org/x/sys/unix" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	// whiteoutPrefix prefix means file is a whiteout. If this is followed | ||||
| 	// by a filename this means that file has been removed from the base | ||||
| 	// layer. | ||||
| 	// | ||||
| 	// See https://github.com/opencontainers/image-spec/blob/master/layer.md#whiteouts | ||||
| 	whiteoutPrefix = ".wh." | ||||
| ) | ||||
|  | ||||
| // overlayFSWhiteoutConvert detects whiteouts and opaque directories. | ||||
| // | ||||
| // It returns deleted indicator if the file is a character device with 0/0 | ||||
| // device number. And call changeFn with ChangeKindDelete for opaque | ||||
| // directories. | ||||
| // | ||||
| // Check: https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt | ||||
| func overlayFSWhiteoutConvert(diffDir, path string, f os.FileInfo, changeFn ChangeFunc) (deleted bool, _ error) { | ||||
| 	if f.Mode()&os.ModeCharDevice != 0 { | ||||
| 		if _, ok := f.Sys().(*syscall.Stat_t); !ok { | ||||
| 			return false, nil | ||||
| 		} | ||||
|  | ||||
| 		maj, min, err := devices.DeviceInfo(f) | ||||
| 		if err != nil { | ||||
| 			return false, err | ||||
| 		} | ||||
| 		return (maj == 0 && min == 0), nil | ||||
| 	} | ||||
|  | ||||
| 	if f.IsDir() { | ||||
| 		originalPath := filepath.Join(diffDir, path) | ||||
| 		opaque, err := getOpaqueValue(originalPath) | ||||
| 		if err != nil { | ||||
| 			if errors.Is(err, unix.ENODATA) { | ||||
| 				return false, nil | ||||
| 			} | ||||
| 			return false, err | ||||
| 		} | ||||
|  | ||||
| 		if len(opaque) == 1 && opaque[0] == 'y' { | ||||
| 			opaqueDirPath := filepath.Join(path, whiteoutPrefix+".opq") | ||||
| 			return false, changeFn(ChangeKindDelete, opaqueDirPath, nil, nil) | ||||
| 		} | ||||
| 	} | ||||
| 	return false, nil | ||||
| } | ||||
|  | ||||
| // getOpaqueValue returns opaque value for a given file. | ||||
| func getOpaqueValue(filePath string) ([]byte, error) { | ||||
| 	for _, xattr := range []string{ | ||||
| 		"trusted.overlay.opaque", | ||||
| 		// TODO(fuweid): | ||||
| 		// | ||||
| 		// user.overlay.* is available since 5.11. We should check | ||||
| 		// kernel version before read. | ||||
| 		// | ||||
| 		// REF: https://github.com/torvalds/linux/commit/2d2f2d7322ff43e0fe92bf8cccdc0b09449bf2e1 | ||||
| 		"user.overlay.opaque", | ||||
| 	} { | ||||
| 		opaque, err := sysx.LGetxattr(filePath, xattr) | ||||
| 		if err != nil { | ||||
| 			if errors.Is(err, unix.ENODATA) || errors.Is(err, unix.ENOTSUP) { | ||||
| 				continue | ||||
| 			} | ||||
| 			return nil, fmt.Errorf("failed to retrieve %s attr: %w", xattr, err) | ||||
| 		} | ||||
| 		return opaque, nil | ||||
| 	} | ||||
| 	return nil, unix.ENODATA | ||||
| } | ||||
							
								
								
									
										28
									
								
								vendor/github.com/containerd/continuity/fs/diff_nonlinux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								vendor/github.com/containerd/continuity/fs/diff_nonlinux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| //go:build !linux | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|  | ||||
|    Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|    you may not use this file except in compliance with the License. | ||||
|    You may obtain a copy of the License at | ||||
|  | ||||
|        http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  | ||||
|    Unless required by applicable law or agreed to in writing, software | ||||
|    distributed under the License is distributed on an "AS IS" BASIS, | ||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|    See the License for the specific language governing permissions and | ||||
|    limitations under the License. | ||||
| */ | ||||
|  | ||||
| package fs | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"os" | ||||
| ) | ||||
|  | ||||
| func overlayFSWhiteoutConvert(string, string, os.FileInfo, ChangeFunc) (bool, error) { | ||||
| 	return false, errors.New("unsupported") | ||||
| } | ||||
							
								
								
									
										11
									
								
								vendor/github.com/containerd/continuity/fs/diff_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/github.com/containerd/continuity/fs/diff_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !windows | ||||
| // +build !windows | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
| @@ -28,16 +27,6 @@ import ( | ||||
| 	"github.com/containerd/continuity/sysx" | ||||
| ) | ||||
|  | ||||
| // detectDirDiff returns diff dir options if a directory could | ||||
| // be found in the mount info for upper which is the direct | ||||
| // diff with the provided lower directory | ||||
| func detectDirDiff(upper, lower string) *diffDirOptions { | ||||
| 	// TODO: get mount options for upper | ||||
| 	// TODO: detect AUFS | ||||
| 	// TODO: detect overlay | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // compareSysStat returns whether the stats are equivalent, | ||||
| // whether the files are considered the same file, and | ||||
| // an error | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/github.com/containerd/continuity/fs/diff_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/containerd/continuity/fs/diff_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -22,10 +22,6 @@ import ( | ||||
| 	"golang.org/x/sys/windows" | ||||
| ) | ||||
|  | ||||
| func detectDirDiff(upper, lower string) *diffDirOptions { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func compareSysStat(s1, s2 interface{}) (bool, error) { | ||||
| 	f1, ok := s1.(windows.Win32FileAttributeData) | ||||
| 	if !ok { | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/dtype_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/dtype_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build linux | ||||
| // +build linux | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/du_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/du_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !windows | ||||
| // +build !windows | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/du_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/du_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build windows | ||||
| // +build windows | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/fstest/compare_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/fstest/compare_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !windows | ||||
| // +build !windows | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										11
									
								
								vendor/github.com/containerd/continuity/fs/fstest/file_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/github.com/containerd/continuity/fs/fstest/file_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !windows | ||||
| // +build !windows | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
| @@ -20,9 +19,11 @@ | ||||
| package fstest | ||||
|  | ||||
| import ( | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/containerd/continuity/devices" | ||||
| 	"github.com/containerd/continuity/sysx" | ||||
| 	"golang.org/x/sys/unix" | ||||
| ) | ||||
| @@ -46,6 +47,14 @@ func Lchtimes(name string, atime, mtime time.Time) Applier { | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| // CreateDeviceFile provides creates devices Applier. | ||||
| func CreateDeviceFile(name string, mode os.FileMode, maj, min int) Applier { | ||||
| 	return applyFn(func(root string) error { | ||||
| 		fullPath := filepath.Join(root, name) | ||||
| 		return devices.Mknod(fullPath, mode, maj, min) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func Base() Applier { | ||||
| 	return applyFn(func(root string) error { | ||||
| 		// do nothing, as the base is not special | ||||
|   | ||||
							
								
								
									
										15
									
								
								vendor/github.com/containerd/continuity/fs/fstest/file_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								vendor/github.com/containerd/continuity/fs/fstest/file_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -18,9 +18,17 @@ package fstest | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"os" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // SetXAttr sets the xatter for the file | ||||
| func SetXAttr(name, key, value string) Applier { | ||||
| 	return applyFn(func(root string) error { | ||||
| 		return errors.New("Not implemented") | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| // Lchtimes changes access and mod time of file without following symlink | ||||
| func Lchtimes(name string, atime, mtime time.Time) Applier { | ||||
| 	return applyFn(func(root string) error { | ||||
| @@ -28,6 +36,13 @@ func Lchtimes(name string, atime, mtime time.Time) Applier { | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| // CreateDeviceFile provides creates devices Applier. | ||||
| func CreateDeviceFile(name string, mode os.FileMode, maj, min int) Applier { | ||||
| 	return applyFn(func(root string) error { | ||||
| 		return errors.New("Not implemented") | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| // Base applies the files required to make a valid Windows container layer | ||||
| // that the filter will mount. It is used for testing the snapshotter | ||||
| func Base() Applier { | ||||
|   | ||||
							
								
								
									
										44
									
								
								vendor/github.com/containerd/continuity/fs/fstest/mkfs_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								vendor/github.com/containerd/continuity/fs/fstest/mkfs_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|  | ||||
|    Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|    you may not use this file except in compliance with the License. | ||||
|    You may obtain a copy of the License at | ||||
|  | ||||
|        http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  | ||||
|    Unless required by applicable law or agreed to in writing, software | ||||
|    distributed under the License is distributed on an "AS IS" BASIS, | ||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|    See the License for the specific language governing permissions and | ||||
|    limitations under the License. | ||||
| */ | ||||
|  | ||||
| package fstest | ||||
|  | ||||
| import ( | ||||
| 	"os/exec" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/containerd/continuity/testutil" | ||||
| 	"github.com/containerd/continuity/testutil/loopback" | ||||
| ) | ||||
|  | ||||
| func WithMkfs(t *testing.T, f func(), mkfs ...string) { | ||||
| 	testutil.RequiresRoot(t) | ||||
| 	mnt := t.TempDir() | ||||
| 	loop, err := loopback.New(100 << 20) // 100 MB | ||||
| 	if err != nil { | ||||
| 		t.Fatal(err) | ||||
| 	} | ||||
| 	defer loop.Close() | ||||
| 	if out, err := exec.Command(mkfs[0], append(mkfs[1:], loop.Device)...).CombinedOutput(); err != nil { | ||||
| 		t.Fatalf("could not mkfs (%v) %s: %v (out: %q)", mkfs, loop.Device, err, string(out)) | ||||
| 	} | ||||
| 	if out, err := exec.Command("mount", loop.Device, mnt).CombinedOutput(); err != nil { | ||||
| 		t.Fatalf("could not mount %s: %v (out: %q)", loop.Device, err, string(out)) | ||||
| 	} | ||||
| 	defer testutil.Unmount(t, mnt) | ||||
| 	t.Setenv("TMPDIR", mnt) | ||||
| 	f() | ||||
| } | ||||
							
								
								
									
										25
									
								
								vendor/github.com/containerd/continuity/fs/fstest/mkfs_others.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								vendor/github.com/containerd/continuity/fs/fstest/mkfs_others.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| //go:build !linux | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|  | ||||
|    Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|    you may not use this file except in compliance with the License. | ||||
|    You may obtain a copy of the License at | ||||
|  | ||||
|        http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  | ||||
|    Unless required by applicable law or agreed to in writing, software | ||||
|    distributed under the License is distributed on an "AS IS" BASIS, | ||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|    See the License for the specific language governing permissions and | ||||
|    limitations under the License. | ||||
| */ | ||||
|  | ||||
| package fstest | ||||
|  | ||||
| import "testing" | ||||
|  | ||||
| func WithMkfs(t *testing.T, f func(), mkfs ...string) { | ||||
| 	t.Fatal("WithMkfs requires Linux") | ||||
| } | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/hardlink_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/hardlink_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !windows | ||||
| // +build !windows | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										123
									
								
								vendor/github.com/containerd/continuity/fs/magic_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								vendor/github.com/containerd/continuity/fs/magic_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,123 @@ | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|  | ||||
|    Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|    you may not use this file except in compliance with the License. | ||||
|    You may obtain a copy of the License at | ||||
|  | ||||
|        http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  | ||||
|    Unless required by applicable law or agreed to in writing, software | ||||
|    distributed under the License is distributed on an "AS IS" BASIS, | ||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|    See the License for the specific language governing permissions and | ||||
|    limitations under the License. | ||||
| */ | ||||
|  | ||||
| /* | ||||
| Copyright 2013-2018 Docker, Inc. | ||||
|  | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
| You may obtain a copy of the License at | ||||
|  | ||||
| 	https://www.apache.org/licenses/LICENSE-2.0 | ||||
|  | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
|  | ||||
| // Original source: https://github.com/moby/moby/blob/v26.0.0/daemon/graphdriver/driver_linux.go | ||||
|  | ||||
| package fs | ||||
|  | ||||
| import ( | ||||
| 	"path/filepath" | ||||
| 	"syscall" | ||||
| ) | ||||
|  | ||||
| // Magic unsigned id of the filesystem in use. | ||||
| type Magic uint32 | ||||
|  | ||||
| const ( | ||||
| 	// MagicUnsupported is a predefined constant value other than a valid filesystem id. | ||||
| 	MagicUnsupported = Magic(0x00000000) | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	// MagicAufs filesystem id for Aufs | ||||
| 	MagicAufs = Magic(0x61756673) | ||||
| 	// MagicBtrfs filesystem id for Btrfs | ||||
| 	MagicBtrfs = Magic(0x9123683E) | ||||
| 	// MagicCramfs filesystem id for Cramfs | ||||
| 	MagicCramfs = Magic(0x28cd3d45) | ||||
| 	// MagicEcryptfs filesystem id for eCryptfs | ||||
| 	MagicEcryptfs = Magic(0xf15f) | ||||
| 	// MagicExtfs filesystem id for Extfs | ||||
| 	MagicExtfs = Magic(0x0000EF53) | ||||
| 	// MagicF2fs filesystem id for F2fs | ||||
| 	MagicF2fs = Magic(0xF2F52010) | ||||
| 	// MagicGPFS filesystem id for GPFS | ||||
| 	MagicGPFS = Magic(0x47504653) | ||||
| 	// MagicJffs2Fs filesystem if for Jffs2Fs | ||||
| 	MagicJffs2Fs = Magic(0x000072b6) | ||||
| 	// MagicJfs filesystem id for Jfs | ||||
| 	MagicJfs = Magic(0x3153464a) | ||||
| 	// MagicNfsFs filesystem id for NfsFs | ||||
| 	MagicNfsFs = Magic(0x00006969) | ||||
| 	// MagicRAMFs filesystem id for RamFs | ||||
| 	MagicRAMFs = Magic(0x858458f6) | ||||
| 	// MagicReiserFs filesystem id for ReiserFs | ||||
| 	MagicReiserFs = Magic(0x52654973) | ||||
| 	// MagicSmbFs filesystem id for SmbFs | ||||
| 	MagicSmbFs = Magic(0x0000517B) | ||||
| 	// MagicSquashFs filesystem id for SquashFs | ||||
| 	MagicSquashFs = Magic(0x73717368) | ||||
| 	// MagicTmpFs filesystem id for TmpFs | ||||
| 	MagicTmpFs = Magic(0x01021994) | ||||
| 	// MagicVxFS filesystem id for VxFs | ||||
| 	MagicVxFS = Magic(0xa501fcf5) | ||||
| 	// MagicXfs filesystem id for Xfs | ||||
| 	MagicXfs = Magic(0x58465342) | ||||
| 	// MagicZfs filesystem id for Zfs | ||||
| 	MagicZfs = Magic(0x2fc12fc1) | ||||
| 	// MagicOverlay filesystem id for overlay | ||||
| 	MagicOverlay = Magic(0x794C7630) | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	// FsNames maps filesystem id to name of the filesystem. | ||||
| 	FsNames = map[Magic]string{ | ||||
| 		MagicAufs:        "aufs", | ||||
| 		MagicBtrfs:       "btrfs", | ||||
| 		MagicCramfs:      "cramfs", | ||||
| 		MagicExtfs:       "extfs", | ||||
| 		MagicF2fs:        "f2fs", | ||||
| 		MagicGPFS:        "gpfs", | ||||
| 		MagicJffs2Fs:     "jffs2", | ||||
| 		MagicJfs:         "jfs", | ||||
| 		MagicNfsFs:       "nfs", | ||||
| 		MagicOverlay:     "overlayfs", | ||||
| 		MagicRAMFs:       "ramfs", | ||||
| 		MagicReiserFs:    "reiserfs", | ||||
| 		MagicSmbFs:       "smb", | ||||
| 		MagicSquashFs:    "squashfs", | ||||
| 		MagicTmpFs:       "tmpfs", | ||||
| 		MagicUnsupported: "unsupported", | ||||
| 		MagicVxFS:        "vxfs", | ||||
| 		MagicXfs:         "xfs", | ||||
| 		MagicZfs:         "zfs", | ||||
| 	} | ||||
| ) | ||||
|  | ||||
| // GetMagic returns the filesystem id given the path. | ||||
| func GetMagic(rootpath string) (Magic, error) { | ||||
| 	var buf syscall.Statfs_t | ||||
| 	if err := syscall.Statfs(filepath.Dir(rootpath), &buf); err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	return Magic(buf.Type), nil | ||||
| } | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/stat_darwinbsd.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/stat_darwinbsd.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build darwin || freebsd || netbsd | ||||
| // +build darwin freebsd netbsd | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
| @@ -1,5 +1,4 @@ | ||||
| //go:build linux || openbsd || dragonfly || solaris | ||||
| // +build linux openbsd dragonfly solaris | ||||
| 
 | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
| @@ -20,10 +19,36 @@ | ||||
| package fs | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"io/fs" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| func Atime(st fs.FileInfo) (time.Time, error) { | ||||
| 	stSys, ok := st.Sys().(*syscall.Stat_t) | ||||
| 	if !ok { | ||||
| 		return time.Time{}, fmt.Errorf("expected st.Sys() to be *syscall.Stat_t, got %T", st.Sys()) | ||||
| 	} | ||||
| 	return StatATimeAsTime(stSys), nil | ||||
| } | ||||
| 
 | ||||
| func Ctime(st fs.FileInfo) (time.Time, error) { | ||||
| 	stSys, ok := st.Sys().(*syscall.Stat_t) | ||||
| 	if !ok { | ||||
| 		return time.Time{}, fmt.Errorf("expected st.Sys() to be *syscall.Stat_t, got %T", st.Sys()) | ||||
| 	} | ||||
| 	return time.Unix(stSys.Atim.Unix()), nil | ||||
| } | ||||
| 
 | ||||
| func Mtime(st fs.FileInfo) (time.Time, error) { | ||||
| 	stSys, ok := st.Sys().(*syscall.Stat_t) | ||||
| 	if !ok { | ||||
| 		return time.Time{}, fmt.Errorf("expected st.Sys() to be *syscall.Stat_t, got %T", st.Sys()) | ||||
| 	} | ||||
| 	return time.Unix(stSys.Mtim.Unix()), nil | ||||
| } | ||||
| 
 | ||||
| // StatAtime returns the Atim | ||||
| func StatAtime(st *syscall.Stat_t) syscall.Timespec { | ||||
| 	return st.Atim | ||||
							
								
								
									
										33
									
								
								vendor/github.com/containerd/continuity/fs/stat_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								vendor/github.com/containerd/continuity/fs/stat_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|  | ||||
|    Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|    you may not use this file except in compliance with the License. | ||||
|    You may obtain a copy of the License at | ||||
|  | ||||
|        http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  | ||||
|    Unless required by applicable law or agreed to in writing, software | ||||
|    distributed under the License is distributed on an "AS IS" BASIS, | ||||
|    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|    See the License for the specific language governing permissions and | ||||
|    limitations under the License. | ||||
| */ | ||||
|  | ||||
| package fs | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"io/fs" | ||||
| 	"syscall" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| func Atime(st fs.FileInfo) (time.Time, error) { | ||||
| 	stSys, ok := st.Sys().(*syscall.Win32FileAttributeData) | ||||
| 	if !ok { | ||||
| 		return time.Time{}, fmt.Errorf("expected st.Sys() to be *syscall.Win32FileAttributeData, got %T", st.Sys()) | ||||
| 	} | ||||
| 	// ref: https://github.com/golang/go/blob/go1.19.2/src/os/types_windows.go#L230 | ||||
| 	return time.Unix(0, stSys.LastAccessTime.Nanoseconds()), nil | ||||
| } | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/utimesnanoat.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/fs/utimesnanoat.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !(windows || linux) | ||||
| // +build !windows,!linux | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/hardlinks_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/hardlinks_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !windows | ||||
| // +build !windows | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/resource_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/resource_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !windows | ||||
| // +build !windows | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/sysx/nodata_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/sysx/nodata_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !(linux || solaris || windows) | ||||
| // +build !linux,!solaris,!windows | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/sysx/xattr.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/sysx/xattr.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build linux || darwin | ||||
| // +build linux darwin | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/sysx/xattr_unsupported.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/sysx/xattr_unsupported.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !linux && !darwin | ||||
| // +build !linux,!darwin | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/testutil/helpers_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/testutil/helpers_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !windows | ||||
| // +build !windows | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										8
									
								
								vendor/github.com/containerd/continuity/testutil/loopback/loopback_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/containerd/continuity/testutil/loopback/loopback_linux.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -28,7 +28,7 @@ import ( | ||||
| 	"strings" | ||||
| 	"syscall" | ||||
|  | ||||
| 	"github.com/sirupsen/logrus" | ||||
| 	"github.com/containerd/log" | ||||
| ) | ||||
|  | ||||
| // New creates a loopback device | ||||
| @@ -57,18 +57,18 @@ func New(size int64) (*Loopback, error) { | ||||
| 	} | ||||
|  | ||||
| 	deviceName := strings.TrimSpace(stdout.String()) | ||||
| 	logrus.Debugf("Created loop device %s (using %s)", deviceName, file.Name()) | ||||
| 	log.L.Debugf("Created loop device %s (using %s)", deviceName, file.Name()) | ||||
|  | ||||
| 	cleanup := func() error { | ||||
| 		// detach device | ||||
| 		logrus.Debugf("Removing loop device %s", deviceName) | ||||
| 		log.L.Debugf("Removing loop device %s", deviceName) | ||||
| 		losetup := exec.Command("losetup", "--detach", deviceName) | ||||
| 		if out, err := losetup.CombinedOutput(); err != nil { | ||||
| 			return fmt.Errorf("Could not remove loop device %s (%v): %q: %w", deviceName, losetup.Args, string(out), err) | ||||
| 		} | ||||
|  | ||||
| 		// remove file | ||||
| 		logrus.Debugf("Removing temporary file %s", file.Name()) | ||||
| 		log.L.Debugf("Removing temporary file %s", file.Name()) | ||||
| 		return os.Remove(file.Name()) | ||||
| 	} | ||||
|  | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/continuity/testutil/mount_other.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/continuity/testutil/mount_other.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,5 +1,4 @@ | ||||
| //go:build !linux && !windows | ||||
| // +build !linux,!windows | ||||
|  | ||||
| /* | ||||
|    Copyright The containerd Authors. | ||||
|   | ||||
							
								
								
									
										4
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							| @@ -134,8 +134,8 @@ github.com/containerd/containerd/api/types/runc/options | ||||
| github.com/containerd/containerd/api/types/runtimeoptions/v1 | ||||
| github.com/containerd/containerd/api/types/task | ||||
| github.com/containerd/containerd/api/types/transfer | ||||
| # github.com/containerd/continuity v0.4.3 | ||||
| ## explicit; go 1.19 | ||||
| # github.com/containerd/continuity v0.4.4 | ||||
| ## explicit; go 1.21 | ||||
| github.com/containerd/continuity | ||||
| github.com/containerd/continuity/devices | ||||
| github.com/containerd/continuity/driver | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Phil Estes
					Phil Estes