a6-rc-up-tree: handle blocked deps, exit 1 if nothing started

This commit is contained in:
Daniel Barlow
2024-07-08 21:13:49 +01:00
parent f0f6cc80d7
commit 7f9971512d
4 changed files with 49 additions and 13 deletions

View File

@@ -38,16 +38,31 @@
(with-popen [h (.. "s6-rc -b -u change " name)]
(print (h:read "*a"))))
(fn keys [t]
(icollect [_ v (pairs t)] v))
(fn run [dir]
(let [service (. arg 1)
blocks (stopped-controlled-services (or dir "/run/services/controlled"))]
(print :service service :blocks (view blocks))
(each [_ s (ipairs (reverse-dependencies service))]
(print :dep s)
(when
(accumulate [start true
_ dep (ipairs (dependencies s))]
(and start (or (= s service) (not (. blocks dep)))))
(start-service s)))))
blocks (doto
(stopped-controlled-services (or dir "/run/services/controlled"))
(tset service nil))
rdepends (reverse-dependencies service)
starts
(icollect [_ s (ipairs rdepends)]
(when
(accumulate [start true
_ dep (ipairs (dependencies s))]
(and start (not (. blocks dep))))
s))]
(print "s6-rc-up-tree"
service
"blocks (" (table.concat (keys blocks) ", ") ")"
;; "rdepends (" (table.concat rdepends ", ") ")"
"start (" (table.concat starts ", ") ")")
(if (> (# starts) 0)
(each [_ s (ipairs starts)]
(start-service s))
(os.exit 1))))
{ : run }