diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-10-08 19:39:00 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-10-08 19:39:00 +0900 |
| commit | ee6c471fe6e183d78e396a23b2a92fd26bb31143 (patch) | |
| tree | 6d7eb6a6d7d057a840936e435150f30b57a8a2f3 /internal/app/outcome.go | |
| parent | 16bf3178d358f72ce9605352364809b42229af5f (diff) | |
internal/app: relocate ops condition
This allows reuse and finer grained testing of fromConfig.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/app/outcome.go')
| -rw-r--r-- | internal/app/outcome.go | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/internal/app/outcome.go b/internal/app/outcome.go index f0880adb..671d14c0 100644 --- a/internal/app/outcome.go +++ b/internal/app/outcome.go @@ -118,16 +118,12 @@ func (s *outcomeState) populateLocal(k syscallDispatcher, msg container.Msg) err // instancePath returns a path formatted for outcomeStateSys.instance. // This method must only be called from outcomeOp.toContainer if // outcomeOp.toSystem has already called outcomeStateSys.instance. -func (s *outcomeState) instancePath() *check.Absolute { - return s.sc.SharePath.Append(s.id.String()) -} +func (s *outcomeState) instancePath() *check.Absolute { return s.sc.SharePath.Append(s.id.String()) } // runtimePath returns a path formatted for outcomeStateSys.runtime. // This method must only be called from outcomeOp.toContainer if // outcomeOp.toSystem has already called outcomeStateSys.runtime. -func (s *outcomeState) runtimePath() *check.Absolute { - return s.sc.RunDirPath.Append(s.id.String()) -} +func (s *outcomeState) runtimePath() *check.Absolute { return s.sc.RunDirPath.Append(s.id.String()) } // outcomeStateSys wraps outcomeState and [system.I]. Used on the priv side only. // Implementations of outcomeOp must not access fields other than sys unless explicitly stated. @@ -212,3 +208,37 @@ type outcomeOp interface { // by flattened env map. toContainer(state *outcomeStateParams) error } + +// fromConfig returns a corresponding slice of outcomeOp for [hst.Config]. +// This function assumes the caller has already called the Validate method on [hst.Config] +// and checked that it returns nil. +func fromConfig(config *hst.Config) (ops []outcomeOp) { + ops = []outcomeOp{ + // must run first + &spParamsOp{}, + + // TODO(ophestra): move this late for #8 and #9 + spFilesystemOp{}, + + spRuntimeOp{}, + spTmpdirOp{}, + spAccountOp{}, + } + + et := config.Enablements.Unwrap() + if et&hst.EWayland != 0 { + ops = append(ops, &spWaylandOp{}) + } + if et&hst.EX11 != 0 { + ops = append(ops, &spX11Op{}) + } + if et&hst.EPulse != 0 { + ops = append(ops, &spPulseOp{}) + } + if et&hst.EDBus != 0 { + ops = append(ops, &spDBusOp{}) + } + + ops = append(ops, spFinal{}) + return +} |
