internal/pkg: remove typeflag promotion loop
Some checks failed
Test / Create distribution (push) Successful in 47s
Test / ShareFS (push) Failing after 54s
Test / Sandbox (race detector) (push) Failing after 1m10s
Test / Sandbox (push) Failing after 1m13s
Test / Hakurei (push) Failing after 1m30s
Test / Hakurei (race detector) (push) Failing after 1m37s
Test / Hpkg (push) Failing after 1m41s
Test / Flake checks (push) Has been skipped

Expanding this enables sharing of code common between types.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
2026-01-13 00:23:14 +09:00
parent 5fe166a4a7
commit 5e59b6671c

View File

@@ -11,7 +11,7 @@ import (
"io/fs" "io/fs"
"net/http" "net/http"
"os" "os"
"path" "time"
"hakurei.app/container/check" "hakurei.app/container/check"
) )
@@ -142,81 +142,66 @@ func (a *tarArtifact) Cure(t *TContext) (err error) {
r := tar.NewReader(tr) r := tar.NewReader(tr)
for header, err = r.Next(); err == nil; header, err = r.Next() { for header, err = r.Next(); err == nil; header, err = r.Next() {
typeflag := header.Typeflag typeflag := header.Typeflag
for { if typeflag == 0 {
switch typeflag { if len(header.Name) > 0 && header.Name[len(header.Name)-1] == '/' {
case 0: typeflag = tar.TypeDir
if len(header.Name) > 0 && header.Name[len(header.Name)-1] == '/' { } else {
typeflag = tar.TypeDir typeflag = tar.TypeReg
} else {
typeflag = tar.TypeReg
}
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(
p,
os.O_CREATE|os.O_EXCL|os.O_WRONLY,
header.FileInfo().Mode()&0500,
); err != nil {
return
}
if _, err = io.Copy(f, r); err != nil {
_ = f.Close()
return
} else if err = f.Close(); err != nil {
return
}
break
case tar.TypeLink:
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:
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
case tar.TypeDir:
pathname := temp.Append(header.Name)
madeDirectories = append(madeDirectories, dirTargetPerm{
path: pathname,
mode: header.FileInfo().Mode(),
})
if err = os.MkdirAll(
pathname.String(),
0700,
); err != nil {
return
}
break
case tar.TypeXGlobalHeader:
// ignore
break
default:
return DisallowedTypeflagError(typeflag)
} }
}
pathname := temp.Append(header.Name)
if typeflag >= '0' && typeflag <= '9' && typeflag != tar.TypeDir {
if err = os.MkdirAll(pathname.Dir().String(), 0700); err != nil {
return
}
}
switch typeflag {
case tar.TypeReg:
var f *os.File
if f, err = os.OpenFile(
pathname.String(),
os.O_CREATE|os.O_EXCL|os.O_WRONLY,
header.FileInfo().Mode()&0500,
); err != nil {
return
}
if _, err = io.Copy(f, r); err != nil {
_ = f.Close()
return
} else if err = f.Close(); err != nil {
return
}
break break
case tar.TypeLink:
if err = os.Link(header.Linkname, pathname.String()); err != nil {
return
}
break
case tar.TypeSymlink:
if err = os.Symlink(header.Linkname, pathname.String()); err != nil {
return
}
break
case tar.TypeDir:
madeDirectories = append(madeDirectories, dirTargetPerm{
path: pathname,
mode: header.FileInfo().Mode(),
})
if err = os.MkdirAll(pathname.String(), 0700); err != nil {
return
}
break
case tar.TypeXGlobalHeader:
continue // ignore
default:
return DisallowedTypeflagError(typeflag)
} }
} }
if errors.Is(err, io.EOF) { if errors.Is(err, io.EOF) {