mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
818c249bae
Rather than calling out to tar we use the golang tar parser to directly extract the tar files. This has two major advantages: 1) We're able to replace an existing directory with a file in the new layer. This currently breaks with the external tar, since it refuses to recursively remove the destination directory in this case, and there are no options to make it do that. 2) We avoid extracting the whiteout files just to later remove them.
32 lines
720 B
Go
32 lines
720 B
Go
package archive
|
|
|
|
import (
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
func getLastAccess(stat *syscall.Stat_t) syscall.Timespec {
|
|
return stat.Atim
|
|
}
|
|
|
|
func getLastModification(stat *syscall.Stat_t) syscall.Timespec {
|
|
return stat.Mtim
|
|
}
|
|
|
|
func LUtimesNano(path string, ts []syscall.Timespec) error {
|
|
// These are not currently availible in syscall
|
|
AT_FDCWD := -100
|
|
AT_SYMLINK_NOFOLLOW := 0x100
|
|
|
|
var _path *byte
|
|
_path, err := syscall.BytePtrFromString(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, _, err := syscall.Syscall6(syscall.SYS_UTIMENSAT, uintptr(AT_FDCWD), uintptr(unsafe.Pointer(_path)), uintptr(unsafe.Pointer(&ts[0])), uintptr(AT_SYMLINK_NOFOLLOW), 0, 0); err != 0 && err != syscall.ENOSYS {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|