1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

overlay: skip superfluous metadata sets on commit

Signed-off-by: Burke Libbey <burke.libbey@shopify.com>
This commit is contained in:
Burke Libbey 2015-05-07 16:09:27 -04:00
parent 4676ff3fd7
commit bc5503f46b
No known key found for this signature in database
GPG key ID: E893DEF914F22410

View file

@ -71,9 +71,12 @@ func copyDir(srcDir, dstDir string, flags CopyFlags) error {
return fmt.Errorf("Unable to get raw syscall.Stat_t data for %s", srcPath) return fmt.Errorf("Unable to get raw syscall.Stat_t data for %s", srcPath)
} }
isHardlink := false
switch f.Mode() & os.ModeType { switch f.Mode() & os.ModeType {
case 0: // Regular file case 0: // Regular file
if flags&CopyHardlink != 0 { if flags&CopyHardlink != 0 {
isHardlink = true
if err := os.Link(srcPath, dstPath); err != nil { if err := os.Link(srcPath, dstPath); err != nil {
return err return err
} }
@ -114,6 +117,12 @@ func copyDir(srcDir, dstDir string, flags CopyFlags) error {
return fmt.Errorf("Unknown file type for %s\n", srcPath) return fmt.Errorf("Unknown file type for %s\n", srcPath)
} }
// Everything below is copying metadata from src to dst. All this metadata
// already shares an inode for hardlinks.
if isHardlink {
return nil
}
if err := os.Lchown(dstPath, int(stat.Uid), int(stat.Gid)); err != nil { if err := os.Lchown(dstPath, int(stat.Uid), int(stat.Gid)); err != nil {
return err return err
} }