Separate daemon/graphdriver/overlay/copy into its own package

Signed-off-by: Sargun Dhillon <sargun@sargun.me>
This commit is contained in:
Sargun Dhillon 2017-08-29 09:01:23 -07:00 committed by Sargun Dhillon
parent d891f2e3ca
commit 5298785b8e
2 changed files with 14 additions and 7 deletions

View File

@ -1,6 +1,6 @@
// +build linux // +build linux
package overlay package copy
import ( import (
"fmt" "fmt"
@ -15,10 +15,13 @@ import (
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
) )
type copyFlags int type Mode int
const ( const (
copyHardlink copyFlags = 1 << iota // Content creates a new file, and copies the content of the file
Content Mode = iota
// Hardlink creates a new hardlink to the existing file
Hardlink
) )
func copyRegular(srcPath, dstPath string, mode os.FileMode) error { func copyRegular(srcPath, dstPath string, mode os.FileMode) error {
@ -52,7 +55,9 @@ func copyXattr(srcPath, dstPath, attr string) error {
return nil return nil
} }
func copyDir(srcDir, dstDir string, flags copyFlags) error { // DirCopy copies or hardlinks the contents of one directory to another,
// properly handling xattrs, and soft links
func DirCopy(srcDir, dstDir string, copyMode Mode) error {
err := filepath.Walk(srcDir, func(srcPath string, f os.FileInfo, err error) error { err := filepath.Walk(srcDir, func(srcPath string, f os.FileInfo, err error) error {
if err != nil { if err != nil {
return err return err
@ -78,12 +83,13 @@ func copyDir(srcDir, dstDir string, flags copyFlags) error {
switch f.Mode() & os.ModeType { switch f.Mode() & os.ModeType {
case 0: // Regular file case 0: // Regular file
if flags&copyHardlink != 0 { if copyMode == Hardlink {
isHardlink = true isHardlink = true
if err := os.Link(srcPath, dstPath); err != nil { if err := os.Link(srcPath, dstPath); err != nil {
return err return err
} }
} else { } else {
// Always fall back to Content copymode
if err := copyRegular(srcPath, dstPath, f.Mode()); err != nil { if err := copyRegular(srcPath, dstPath, f.Mode()); err != nil {
return err return err
} }

View File

@ -13,6 +13,7 @@ import (
"strconv" "strconv"
"github.com/docker/docker/daemon/graphdriver" "github.com/docker/docker/daemon/graphdriver"
"github.com/docker/docker/daemon/graphdriver/copy"
"github.com/docker/docker/daemon/graphdriver/overlayutils" "github.com/docker/docker/daemon/graphdriver/overlayutils"
"github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/archive"
"github.com/docker/docker/pkg/containerfs" "github.com/docker/docker/pkg/containerfs"
@ -327,7 +328,7 @@ func (d *Driver) Create(id, parent string, opts *graphdriver.CreateOpts) (retErr
return err return err
} }
return copyDir(parentUpperDir, upperDir, 0) return copy.DirCopy(parentUpperDir, upperDir, copy.Content)
} }
func (d *Driver) dir(id string) string { func (d *Driver) dir(id string) string {
@ -443,7 +444,7 @@ func (d *Driver) ApplyDiff(id string, parent string, diff io.Reader) (size int64
} }
}() }()
if err = copyDir(parentRootDir, tmpRootDir, copyHardlink); err != nil { if err = copy.DirCopy(parentRootDir, tmpRootDir, copy.Hardlink); err != nil {
return 0, err return 0, err
} }