internal/pkg: ensure parent for non-directory entries
All checks were successful
Test / Create distribution (push) Successful in 51s
Test / Sandbox (push) Successful in 2m36s
Test / Hakurei (push) Successful in 3m41s
Test / ShareFS (push) Successful in 3m48s
Test / Hpkg (push) Successful in 4m29s
Test / Sandbox (race detector) (push) Successful in 4m57s
Test / Hakurei (race detector) (push) Successful in 3m12s
Test / Flake checks (push) Successful in 1m38s
All checks were successful
Test / Create distribution (push) Successful in 51s
Test / Sandbox (push) Successful in 2m36s
Test / Hakurei (push) Successful in 3m41s
Test / ShareFS (push) Successful in 3m48s
Test / Hpkg (push) Successful in 4m29s
Test / Sandbox (race detector) (push) Successful in 4m57s
Test / Hakurei (race detector) (push) Successful in 3m12s
Test / Flake checks (push) Successful in 1m38s
This works around streams containing out of order entries. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -11,6 +11,7 @@ import (
|
||||
"io/fs"
|
||||
"net/http"
|
||||
"os"
|
||||
"path"
|
||||
|
||||
"hakurei.app/container/check"
|
||||
)
|
||||
@@ -128,9 +129,14 @@ func (a *tarArtifact) Cure(c *CureContext) (err error) {
|
||||
continue
|
||||
|
||||
case tar.TypeReg:
|
||||
p := temp.Append(header.Name).String()
|
||||
if err = os.MkdirAll(path.Dir(p), 0700); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
var f *os.File
|
||||
if f, err = os.OpenFile(
|
||||
temp.Append(header.Name).String(),
|
||||
p,
|
||||
os.O_CREATE|os.O_EXCL|os.O_WRONLY,
|
||||
header.FileInfo().Mode()&0400,
|
||||
); err != nil {
|
||||
@@ -145,19 +151,21 @@ func (a *tarArtifact) Cure(c *CureContext) (err error) {
|
||||
break
|
||||
|
||||
case tar.TypeLink:
|
||||
if err = os.Link(
|
||||
header.Linkname,
|
||||
temp.Append(header.Name).String(),
|
||||
); err != nil {
|
||||
p := temp.Append(header.Name).String()
|
||||
if err = os.MkdirAll(path.Dir(p), 0700); err != nil {
|
||||
return
|
||||
}
|
||||
if err = os.Link(header.Linkname, p); err != nil {
|
||||
return
|
||||
}
|
||||
break
|
||||
|
||||
case tar.TypeSymlink:
|
||||
if err = os.Symlink(
|
||||
header.Linkname,
|
||||
temp.Append(header.Name).String(),
|
||||
); err != nil {
|
||||
p := temp.Append(header.Name).String()
|
||||
if err = os.MkdirAll(path.Dir(p), 0700); err != nil {
|
||||
return
|
||||
}
|
||||
if err = os.Symlink(header.Linkname, p); err != nil {
|
||||
return
|
||||
}
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user