copier: remove libimage dependency via util package
This allows podman to import the copier package on the remote client without needing the full libimage package. Based on Miloslav's work: https://github.com/containers/podman/pull/19718 Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
parent
0cbe85260a
commit
292b429f6c
|
@ -19,7 +19,6 @@ import (
|
|||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/containers/buildah/util"
|
||||
"github.com/containers/image/v5/pkg/compression"
|
||||
"github.com/containers/storage/pkg/archive"
|
||||
"github.com/containers/storage/pkg/fileutils"
|
||||
|
@ -1141,7 +1140,7 @@ func copierHandlerGet(bulkWriter io.Writer, req request, pm *fileutils.PatternMa
|
|||
cb := func() error {
|
||||
tw := tar.NewWriter(bulkWriter)
|
||||
defer tw.Close()
|
||||
hardlinkChecker := new(util.HardlinkChecker)
|
||||
hardlinkChecker := new(hardlinkChecker)
|
||||
itemsCopied := 0
|
||||
for i, item := range queue {
|
||||
// if we're not discarding the names of individual directories, keep track of this one
|
||||
|
@ -1353,7 +1352,7 @@ func handleRename(rename map[string]string, name string) string {
|
|||
return name
|
||||
}
|
||||
|
||||
func copierHandlerGetOne(srcfi os.FileInfo, symlinkTarget, name, contentPath string, options GetOptions, tw *tar.Writer, hardlinkChecker *util.HardlinkChecker, idMappings *idtools.IDMappings) error {
|
||||
func copierHandlerGetOne(srcfi os.FileInfo, symlinkTarget, name, contentPath string, options GetOptions, tw *tar.Writer, hardlinkChecker *hardlinkChecker, idMappings *idtools.IDMappings) error {
|
||||
// build the header using the name provided
|
||||
hdr, err := tar.FileInfoHeader(srcfi, symlinkTarget)
|
||||
if err != nil {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
//go:build darwin || (linux && mips) || (linux && mipsle) || (linux && mips64) || (linux && mips64le)
|
||||
// +build darwin linux,mips linux,mipsle linux,mips64 linux,mips64le
|
||||
|
||||
package util
|
||||
package copier
|
||||
|
||||
import (
|
||||
"syscall"
|
|
@ -1,7 +1,7 @@
|
|||
//go:build (linux && !mips && !mipsle && !mips64 && !mips64le) || freebsd
|
||||
// +build linux,!mips,!mipsle,!mips64,!mips64le freebsd
|
||||
|
||||
package util
|
||||
package copier
|
||||
|
||||
import (
|
||||
"syscall"
|
|
@ -0,0 +1,32 @@
|
|||
//go:build linux || darwin || freebsd
|
||||
// +build linux darwin freebsd
|
||||
|
||||
package copier
|
||||
|
||||
import (
|
||||
"os"
|
||||
"sync"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
type hardlinkDeviceAndInode struct {
|
||||
device, inode uint64
|
||||
}
|
||||
|
||||
type hardlinkChecker struct {
|
||||
hardlinks sync.Map
|
||||
}
|
||||
|
||||
func (h *hardlinkChecker) Check(fi os.FileInfo) string {
|
||||
if st, ok := fi.Sys().(*syscall.Stat_t); ok && fi.Mode().IsRegular() && st.Nlink > 1 {
|
||||
if name, ok := h.hardlinks.Load(makeHardlinkDeviceAndInode(st)); ok && name.(string) != "" {
|
||||
return name.(string)
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
func (h *hardlinkChecker) Add(fi os.FileInfo, name string) {
|
||||
if st, ok := fi.Sys().(*syscall.Stat_t); ok && fi.Mode().IsRegular() && st.Nlink > 1 {
|
||||
h.hardlinks.Store(makeHardlinkDeviceAndInode(st), name)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
//go:build !linux && !darwin
|
||||
// +build !linux,!darwin
|
||||
|
||||
package copier
|
||||
|
||||
import (
|
||||
"os"
|
||||
)
|
||||
|
||||
type hardlinkChecker struct {
|
||||
}
|
||||
|
||||
func (h *hardlinkChecker) Check(fi os.FileInfo) string {
|
||||
return ""
|
||||
}
|
||||
func (h *hardlinkChecker) Add(fi os.FileInfo, name string) {
|
||||
}
|
|
@ -5,32 +5,9 @@ package util
|
|||
|
||||
import (
|
||||
"os"
|
||||
"sync"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
type hardlinkDeviceAndInode struct {
|
||||
device, inode uint64
|
||||
}
|
||||
|
||||
type HardlinkChecker struct {
|
||||
hardlinks sync.Map
|
||||
}
|
||||
|
||||
func (h *HardlinkChecker) Check(fi os.FileInfo) string {
|
||||
if st, ok := fi.Sys().(*syscall.Stat_t); ok && fi.Mode().IsRegular() && st.Nlink > 1 {
|
||||
if name, ok := h.hardlinks.Load(makeHardlinkDeviceAndInode(st)); ok && name.(string) != "" {
|
||||
return name.(string)
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
func (h *HardlinkChecker) Add(fi os.FileInfo, name string) {
|
||||
if st, ok := fi.Sys().(*syscall.Stat_t); ok && fi.Mode().IsRegular() && st.Nlink > 1 {
|
||||
h.hardlinks.Store(makeHardlinkDeviceAndInode(st), name)
|
||||
}
|
||||
}
|
||||
|
||||
func UID(st os.FileInfo) int {
|
||||
return int(st.Sys().(*syscall.Stat_t).Uid)
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
//go:build !linux && !darwin
|
||||
// +build !linux,!darwin
|
||||
|
||||
package util
|
||||
|
@ -6,15 +7,6 @@ import (
|
|||
"os"
|
||||
)
|
||||
|
||||
type HardlinkChecker struct {
|
||||
}
|
||||
|
||||
func (h *HardlinkChecker) Check(fi os.FileInfo) string {
|
||||
return ""
|
||||
}
|
||||
func (h *HardlinkChecker) Add(fi os.FileInfo, name string) {
|
||||
}
|
||||
|
||||
func UID(st os.FileInfo) int {
|
||||
return 0
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue