aboutsummaryrefslogtreecommitdiffhomepage
path: root/cmd
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-05-13 18:18:07 +0900
committerOphestra <cat@gensokyo.uk>2026-05-13 19:06:09 +0900
commit7997d79e56da2b3ebbfff9d793d1f6541d832bd6 (patch)
treeb8fe6e3839a1cdc27818c612b28660c17c230792 /cmd
parentf2f17261905e6ea6c686bb490188f86710fd9720 (diff)
cmd/mbf: display and destroy fault entries
This change extends cmd/mbf commands for working with fault entries. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/mbf/main.go76
1 files changed, 76 insertions, 0 deletions
diff --git a/cmd/mbf/main.go b/cmd/mbf/main.go
index a4da0b84..ea10d3b7 100644
--- a/cmd/mbf/main.go
+++ b/cmd/mbf/main.go
@@ -506,6 +506,8 @@ func main() {
flagExport string
flagRemote bool
flagNoReply bool
+ flagFaults bool
+ flagPop bool
flagBoot bool
flagStd bool
@@ -614,6 +616,49 @@ func main() {
}
return err
+
+ case flagFaults:
+ var faults []pkg.Fault
+ if err := cm.Do(func(cache *pkg.Cache) (err error) {
+ faults, err = cache.ReadFaults(t.Load(p))
+ return
+ }); err != nil {
+ return err
+ }
+
+ for _, fault := range faults {
+ log.Printf("%s: %s ago", fault.String(), time.Since(fault.Time()))
+ }
+ return nil
+
+ case flagPop:
+ var faults []pkg.Fault
+ if err := cm.Do(func(cache *pkg.Cache) (err error) {
+ faults, err = cache.ReadFaults(t.Load(p))
+ return
+ }); err != nil {
+ return err
+ }
+
+ if len(faults) == 0 {
+ return errors.New("no fault entries found")
+ }
+ fault := faults[len(faults)-1]
+ r, err := fault.Open()
+ if err != nil {
+ return err
+ }
+ if _, err = io.Copy(os.Stdout, r); err != nil {
+ _ = r.Close()
+ return err
+ }
+ fmt.Println()
+ if err = r.Close(); err != nil {
+ return err
+ }
+
+ log.Printf("faulting cure terminated %s ago", time.Since(fault.Time()))
+ return fault.Destroy()
}
},
).Flag(
@@ -644,10 +689,41 @@ func main() {
&flagStd,
"std", command.BoolFlag(false),
"Build on the intermediate toolchain",
+ ).Flag(
+ &flagFaults,
+ "faults", command.BoolFlag(false),
+ "Display fault entries of the specified artifact",
+ ).Flag(
+ &flagPop,
+ "pop", command.BoolFlag(false),
+ "Display and destroy the most recent fault entry",
)
}
c.NewCommand(
+ "clear",
+ "Remove all fault entries from the cache",
+ func([]string) error {
+ return cm.Do(func(*pkg.Cache) error {
+ pathname := filepath.Join(cm.base, "fault")
+ dents, err := os.ReadDir(pathname)
+ if err != nil {
+ return err
+ }
+
+ for _, dent := range dents {
+ msg.Verbosef("destroying entry %s", dent.Name())
+ if err = os.Remove(filepath.Join(pathname, dent.Name())); err != nil {
+ return err
+ }
+ }
+ log.Printf("destroyed %d fault entries", len(dents))
+ return nil
+ })
+ },
+ )
+
+ c.NewCommand(
"abort",
"Abort all pending cures on the daemon",
func([]string) error { return abortRemote(ctx, &addr, false) },