src/remove/run.bend
ezx@1.11.0.0 · 54 lines · 4 definitions
1
2
3
4
5
6
7
8
9import Base
10import snap@1.4.0.0/main.bend as R
11import ezx@1.11.0.0/src/io/file.bend as F
12import ezx@1.11.0.0/src/lock/run.bend as Run
13import ezx@1.11.0.0/src/lock/world.bend as W
14import ezx@1.11.0.0/src/remove/plan.bend as RP
15import ezx@1.11.0.0/src/remove/relock.bend as RR
16import ezx@1.11.0.0/src/ws/relock.bend as Rel
17import ezx@1.11.0.0/src/ws/run.bend as WsRun
18
19
20def more(world: RR.World, rs: List<&2, W.Reply>) -> RR.World:
21 RR.World{r, here, listing, locks} = world
22 RR.World{r, here, listing, List.append(&2, W.Reply, locks, rs)}
23
24
25
26def loop.step(st: RR.Next, +lib: String, world: RR.World, go: RR.World -> IO(Unit)) -> IO(Unit):
27 match st:
28 case RR.AskLock{asks}:
29 do IO<Unit>:
30 rs : List<&2, W.Reply> <- Run.answer.all(lib, asks)
31 go(more(world, rs))
32 case RR.Planned{pl}:
33 Run.exec.plan(lib, pl)
34
35
36
37def loop(fuel: Nat, +lib: String, +ws: Rel.Ws, +world: RR.World) -> IO(Unit):
38 match fuel:
39 case 0n:
40 IO.die(Unit, 1, "ez: ez remove kept asking questions")
41 case 1n+f:
42 loop.step(Rel.remove.next(ws, world), lib, world, w => loop(f, lib, ws, w))
43
44
45def run(+name: String) -> IO(Unit):
46 do IO<Unit>:
47 lib : String <- Run.bend.lib()
48 +pwd : String <- R.exec(["pwd"])
49 led : Maybe<&2, String> <- F.read(RP.toml())
50 ig : Maybe<&2, String> <- F.read(RP.ignore.file())
51 ls : W.Listing <- Run.read.listing()
52 ws : Rel.Ws <- WsRun.relock.ws()
53 loop(Run.rounds(), lib, ws, RR.World{RP.World{name, led, F.text_of(ig)},
54 String.trim(R.text(pwd)), ls, []})