Test / Create distribution (push) Successful in 59s
Test / Sandbox (push) Successful in 3m0s
Test / Hakurei (push) Successful in 4m48s
Test / Sandbox (race detector) (push) Successful in 6m6s
Test / Hakurei (race detector) (push) Successful in 7m32s
Test / ShareFS (push) Successful in 7m54s
Test / Flake checks (push) Successful in 1m19s
There is generally no use case where any setup is required before init, and requiring the explicit function call is error-prone and unnecessary. It also causes trouble with packages using a similar trick. This change moves argv0 check early and makes it an import side effect. The stub will be removed in v0.5. Signed-off-by: Ophestra <cat@gensokyo.uk>
37 lines
1.1 KiB
Go
37 lines
1.1 KiB
Go
package container
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"hakurei.app/check"
|
|
)
|
|
|
|
// Mkdir is a helper for appending [MkdirOp] to [Ops].
|
|
func (f *Ops) Mkdir(name *check.Absolute, perm os.FileMode) *Ops {
|
|
*f = append(*f, &MkdirOp{name, perm})
|
|
return f
|
|
}
|
|
|
|
// MkdirOp creates a directory at container Path with permission bits set to Perm.
|
|
type MkdirOp struct {
|
|
Path *check.Absolute
|
|
Perm os.FileMode
|
|
}
|
|
|
|
func (m *MkdirOp) Valid() bool { return m != nil && m.Path != nil }
|
|
func (m *MkdirOp) early(*setupState, syscallDispatcher) error { return nil }
|
|
func (m *MkdirOp) apply(_ *setupState, k syscallDispatcher) error {
|
|
return k.mkdirAll(toSysroot(m.Path.String()), m.Perm)
|
|
}
|
|
func (m *MkdirOp) late(*setupState, syscallDispatcher) error { return nil }
|
|
|
|
func (m *MkdirOp) Is(op Op) bool {
|
|
vm, ok := op.(*MkdirOp)
|
|
return ok && m.Valid() && vm.Valid() &&
|
|
m.Path.Is(vm.Path) &&
|
|
m.Perm == vm.Perm
|
|
}
|
|
func (*MkdirOp) prefix() (string, bool) { return "creating", true }
|
|
func (m *MkdirOp) String() string { return fmt.Sprintf("directory %q perm %s", m.Path, m.Perm) }
|