diff --git a/go.mod b/go.mod index 90f3835a24..0fa1303458 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/containers/storage v1.56.0 github.com/containers/winquit v1.1.0 github.com/coreos/go-systemd/v22 v22.5.1-0.20231103132048-7d375ecc2b09 - github.com/crc-org/crc/v2 v2.44.0 + github.com/crc-org/crc/v2 v2.45.0 github.com/crc-org/vfkit v0.6.0 github.com/cyphar/filepath-securejoin v0.3.5 github.com/digitalocean/go-qemu v0.0.0-20230711162256-2e3d0186973e diff --git a/go.sum b/go.sum index 0c34eaa7de..609f843c3a 100644 --- a/go.sum +++ b/go.sum @@ -107,8 +107,8 @@ github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7 github.com/coreos/go-systemd/v22 v22.5.1-0.20231103132048-7d375ecc2b09 h1:OoRAFlvDGCUqDLampLQjk0yeeSGdF9zzst/3G9IkBbc= github.com/coreos/go-systemd/v22 v22.5.1-0.20231103132048-7d375ecc2b09/go.mod h1:m2r/smMKsKwgMSAoFKHaa68ImdCSNuKE1MxvQ64xuCQ= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crc-org/crc/v2 v2.44.0 h1:GQ/GeBvlnFIIWxZLAL5c9HH9Uwur8hTthPUbOp1d++M= -github.com/crc-org/crc/v2 v2.44.0/go.mod h1:EMiQkkpN4y6j4S2FwUlcm1pi4j0YFqir7a6uJthO75Q= +github.com/crc-org/crc/v2 v2.45.0 h1:7rScVQwFc3oy99SaiGSgQmTiIQf7UKKYIcZQ963NsdE= +github.com/crc-org/crc/v2 v2.45.0/go.mod h1:ALUixzv85cMYNDEqone8jEn3m2ZKyu9oRzrQdEAjnzk= github.com/crc-org/vfkit v0.6.0 h1:gUasCX2QqY9pUPebFhYsuINB8XSS/iz0qy4v18CUyB4= github.com/crc-org/vfkit v0.6.0/go.mod h1:i+fGyDMg5MpuUYCFXc2VXw+5R7MBD6A/8xU9UxWv/9s= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= diff --git a/vendor/github.com/crc-org/crc/v2/pkg/os/copy.go b/vendor/github.com/crc-org/crc/v2/pkg/os/copy.go index 4c7d9e3a06..d776692731 100644 --- a/vendor/github.com/crc-org/crc/v2/pkg/os/copy.go +++ b/vendor/github.com/crc-org/crc/v2/pkg/os/copy.go @@ -2,6 +2,7 @@ package os import ( "bytes" + "context" "io" "os" ) @@ -22,7 +23,7 @@ func copyFile(src, dst string, sparse bool) error { defer out.Close() if sparse { - if _, err = CopySparse(out, in); err != nil { + if _, err = CopySparse(context.TODO(), out, in); err != nil { return err } } else { @@ -51,9 +52,13 @@ func CopyFileSparse(src, dst string) error { return copyFile(src, dst, true) } -func CopySparse(dst io.WriteSeeker, src io.Reader) (int64, error) { +func CopySparse(ctx context.Context, dst io.WriteSeeker, src io.Reader) (int64, error) { copyBuf := make([]byte, copyChunkSize) - sparseWriter := newSparseWriter(dst) + + if ctx == nil { + panic("ctx is nil, this should not happen") + } + sparseWriter := newSparseWriter(ctx, dst) bytesWritten, err := io.CopyBuffer(sparseWriter, src, copyBuf) if err != nil { @@ -64,12 +69,13 @@ func CopySparse(dst io.WriteSeeker, src io.Reader) (int64, error) { } type sparseWriter struct { + context context.Context writer io.WriteSeeker lastChunkSparse bool } -func newSparseWriter(writer io.WriteSeeker) *sparseWriter { - return &sparseWriter{writer: writer} +func newSparseWriter(ctx context.Context, writer io.WriteSeeker) *sparseWriter { + return &sparseWriter{context: ctx, writer: writer} } const copyChunkSize = 4096 @@ -84,18 +90,23 @@ func isEmptyChunk(p []byte) bool { } func (w *sparseWriter) Write(p []byte) (n int, err error) { - if isEmptyChunk(p) { - offset, err := w.writer.Seek(int64(len(p)), io.SeekCurrent) - if err != nil { - w.lastChunkSparse = false - return 0, err + select { + case <-w.context.Done(): // Context cancelled + return 0, w.context.Err() + default: + if isEmptyChunk(p) { + offset, err := w.writer.Seek(int64(len(p)), io.SeekCurrent) + if err != nil { + w.lastChunkSparse = false + return 0, err + } + _ = offset + w.lastChunkSparse = true + return len(p), nil } - _ = offset - w.lastChunkSparse = true - return len(p), nil + w.lastChunkSparse = false + return w.writer.Write(p) } - w.lastChunkSparse = false - return w.writer.Write(p) } func (w *sparseWriter) Close() error { diff --git a/vendor/modules.txt b/vendor/modules.txt index 3bf86f41f7..8182395474 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -427,7 +427,7 @@ github.com/coreos/go-systemd/v22/dbus github.com/coreos/go-systemd/v22/internal/dlopen github.com/coreos/go-systemd/v22/journal github.com/coreos/go-systemd/v22/sdjournal -# github.com/crc-org/crc/v2 v2.44.0 +# github.com/crc-org/crc/v2 v2.45.0 ## explicit; go 1.22.0 github.com/crc-org/crc/v2/pkg/crc/logging github.com/crc-org/crc/v2/pkg/os