2021-07-20 18:00:07 +03:00
|
|
|
/- *hood
|
2022-09-02 06:47:28 +03:00
|
|
|
/+ strandio
|
2016-12-07 06:13:33 +03:00
|
|
|
=, clay
|
2016-12-02 02:59:17 +03:00
|
|
|
=, space:userlib
|
|
|
|
=, format
|
2021-07-18 21:21:54 +03:00
|
|
|
=* dude dude:gall
|
2020-06-17 09:36:09 +03:00
|
|
|
|%
|
2022-08-17 07:33:25 +03:00
|
|
|
+$ state state-10
|
2022-09-02 06:47:28 +03:00
|
|
|
+$ state-10 [%10 pith-10]
|
2022-08-17 07:33:25 +03:00
|
|
|
+$ state-9 [%9 pith-9]
|
|
|
|
+$ state-8 [%8 pith-9]
|
|
|
|
+$ state-7 [%7 pith-7]
|
|
|
|
+$ state-6 [%6 pith-6]
|
|
|
|
+$ state-5 [%5 pith-5]
|
|
|
|
+$ state-4 [%4 pith-4]
|
|
|
|
+$ state-3 [%3 pith-3]
|
|
|
|
+$ state-2 [%2 pith-2]
|
|
|
|
+$ state-1 [%1 pith-1]
|
|
|
|
+$ state-0 [%0 pith-0]
|
2020-06-17 09:36:09 +03:00
|
|
|
+$ any-state
|
2021-08-11 19:23:36 +03:00
|
|
|
$~ *state
|
2022-08-26 08:57:20 +03:00
|
|
|
$% state-10
|
|
|
|
state-9
|
2021-10-07 22:09:39 +03:00
|
|
|
state-8
|
2021-09-29 06:26:30 +03:00
|
|
|
state-7
|
2021-09-16 19:25:02 +03:00
|
|
|
state-6
|
2021-09-07 07:37:36 +03:00
|
|
|
state-5
|
2021-09-06 17:27:17 +03:00
|
|
|
state-4
|
2021-08-20 01:57:31 +03:00
|
|
|
state-3
|
2021-07-16 05:25:03 +03:00
|
|
|
state-2
|
2021-07-01 04:03:47 +03:00
|
|
|
state-1
|
|
|
|
state-0
|
2020-06-17 09:36:09 +03:00
|
|
|
==
|
2021-09-07 07:37:36 +03:00
|
|
|
::
|
2022-08-17 07:33:25 +03:00
|
|
|
+$ pith-10
|
2022-08-31 05:32:31 +03:00
|
|
|
$: rem=(map desk per-desk)
|
2022-09-02 06:47:28 +03:00
|
|
|
syn=(map kiln-sync let=@ud)
|
|
|
|
zyn=(map kiln-sync sync-state)
|
2022-08-31 05:32:31 +03:00
|
|
|
commit-timer=[way=wire nex=@da tim=@dr mon=term]
|
2022-08-17 07:33:25 +03:00
|
|
|
:: map desk to the currently ongoing fuse request
|
|
|
|
:: and the latest version numbers for beaks to
|
|
|
|
fus=(map desk per-fuse)
|
|
|
|
:: used for fuses - every time we get a fuse we
|
|
|
|
:: bump this. used when calculating hashes to
|
|
|
|
:: ensure they're unique even when the same
|
|
|
|
:: request is made multiple times.
|
|
|
|
hxs=(map desk @ud)
|
|
|
|
==
|
|
|
|
::
|
2021-10-07 22:09:39 +03:00
|
|
|
+$ pith-9
|
2021-09-07 07:37:36 +03:00
|
|
|
$: wef=(unit weft)
|
2022-08-31 05:32:31 +03:00
|
|
|
rem=(map desk per-desk)
|
|
|
|
syn=(map kiln-sync let=@ud)
|
|
|
|
ark=(map desk arak-9)
|
|
|
|
commit-timer=[way=wire nex=@da tim=@dr mon=term]
|
2021-09-07 07:37:36 +03:00
|
|
|
:: map desk to the currently ongoing fuse request
|
|
|
|
:: and the latest version numbers for beaks to
|
|
|
|
fus=(map desk per-fuse)
|
|
|
|
:: used for fuses - every time we get a fuse we
|
|
|
|
:: bump this. used when calculating hashes to
|
|
|
|
:: ensure they're unique even when the same
|
|
|
|
:: request is made multiple times.
|
|
|
|
hxs=(map desk @ud)
|
2021-09-29 06:26:30 +03:00
|
|
|
==
|
|
|
|
::
|
2022-08-26 08:57:20 +03:00
|
|
|
:: $rein-9: diff from desk manifest
|
|
|
|
::
|
|
|
|
:: .liv: suspended? if suspended, no agents should run
|
|
|
|
:: .add: agents not in manifest that should be running
|
|
|
|
:: .sub: agents in manifest that should not be running
|
|
|
|
::
|
|
|
|
+$ rein-9
|
|
|
|
$: liv=_&
|
|
|
|
add=(set dude)
|
|
|
|
sub=(set dude)
|
|
|
|
==
|
|
|
|
::
|
2021-09-29 06:26:30 +03:00
|
|
|
+$ pith-7
|
|
|
|
$: wef=(unit weft)
|
2022-08-26 08:57:20 +03:00
|
|
|
rem=(map desk per-desk)
|
|
|
|
syn=(map kiln-sync let=@ud)
|
|
|
|
ark=(map desk arak-7)
|
|
|
|
commit-timer=[way=wire nex=@da tim=@dr mon=term]
|
2021-09-29 06:26:30 +03:00
|
|
|
:: map desk to the currently ongoing fuse request
|
|
|
|
:: and the latest version numbers for beaks to
|
|
|
|
fus=(map desk per-fuse)
|
|
|
|
:: used for fuses - every time we get a fuse we
|
|
|
|
:: bump this. used when calculating hashes to
|
|
|
|
:: ensure they're unique even when the same
|
|
|
|
:: request is made multiple times.
|
|
|
|
hxs=(map desk @ud)
|
2022-08-26 08:57:20 +03:00
|
|
|
==
|
2022-08-17 07:33:25 +03:00
|
|
|
::
|
|
|
|
+$ arak-9
|
|
|
|
$: rail=(unit rail-9)
|
2022-08-26 08:57:20 +03:00
|
|
|
rein=rein-9
|
|
|
|
==
|
|
|
|
::
|
|
|
|
++ rail-9
|
|
|
|
$: publisher=(unit ship)
|
|
|
|
paused=?
|
|
|
|
=ship
|
|
|
|
=desk
|
|
|
|
=aeon
|
|
|
|
next=(list rung)
|
2022-08-17 07:33:25 +03:00
|
|
|
==
|
|
|
|
::
|
2021-09-29 06:26:30 +03:00
|
|
|
+$ arak-7
|
|
|
|
$: rail=(unit rail-7)
|
2022-08-26 08:57:20 +03:00
|
|
|
rein=rein-9
|
2021-09-29 06:26:30 +03:00
|
|
|
==
|
|
|
|
::
|
|
|
|
+$ rail-7
|
|
|
|
$: paused=?
|
|
|
|
=ship
|
|
|
|
=desk
|
|
|
|
=aeon
|
|
|
|
next=(list rung)
|
|
|
|
==
|
2021-09-07 07:37:36 +03:00
|
|
|
::
|
2021-09-16 19:25:02 +03:00
|
|
|
+$ pith-6
|
|
|
|
$: wef=(unit weft)
|
|
|
|
rem=(map desk per-desk) ::
|
|
|
|
syn=(map kiln-sync let=@ud) ::
|
|
|
|
ark=(map desk arak-6) ::
|
|
|
|
commit-timer=[way=wire nex=@da tim=@dr mon=term] ::
|
|
|
|
:: map desk to the currently ongoing fuse request
|
|
|
|
:: and the latest version numbers for beaks to
|
|
|
|
fus=(map desk per-fuse)
|
|
|
|
:: used for fuses - every time we get a fuse we
|
|
|
|
:: bump this. used when calculating hashes to
|
|
|
|
:: ensure they're unique even when the same
|
|
|
|
:: request is made multiple times.
|
|
|
|
hxs=(map desk @ud)
|
|
|
|
== ::
|
|
|
|
::
|
2022-08-26 08:57:20 +03:00
|
|
|
+$ arak-6 [rail=rail-6 next=(list rung) rein=rein-9]
|
2021-09-16 19:25:02 +03:00
|
|
|
+$ rail-6 [paused=? =ship =desk =aeon]
|
|
|
|
::
|
2021-09-06 17:27:17 +03:00
|
|
|
+$ pith-5
|
2021-07-01 04:03:47 +03:00
|
|
|
$: rem=(map desk per-desk) ::
|
|
|
|
syn=(map kiln-sync let=@ud) ::
|
2021-09-16 19:25:02 +03:00
|
|
|
ark=(map desk arak-6) ::
|
2021-07-01 04:03:47 +03:00
|
|
|
commit-timer=[way=wire nex=@da tim=@dr mon=term] ::
|
2021-05-24 01:43:41 +03:00
|
|
|
:: map desk to the currently ongoing fuse request
|
|
|
|
:: and the latest version numbers for beaks to
|
|
|
|
fus=(map desk per-fuse)
|
|
|
|
:: used for fuses - every time we get a fuse we
|
|
|
|
:: bump this. used when calculating hashes to
|
|
|
|
:: ensure they're unique even when the same
|
|
|
|
:: request is made multiple times.
|
|
|
|
hxs=(map desk @ud)
|
2021-07-01 04:03:47 +03:00
|
|
|
== ::
|
2021-09-06 17:27:17 +03:00
|
|
|
::
|
|
|
|
+$ pith-4 ::
|
|
|
|
$: rem=(map desk per-desk) ::
|
|
|
|
syn=(map kiln-sync let=@ud) ::
|
|
|
|
ark=(map desk arak-4) ::
|
|
|
|
commit-timer=[way=wire nex=@da tim=@dr mon=term] ::
|
|
|
|
:: map desk to the currently ongoing fuse request
|
|
|
|
:: and the latest version numbers for beaks to
|
|
|
|
fus=(map desk per-fuse)
|
|
|
|
:: used for fuses - every time we get a fuse we
|
|
|
|
:: bump this. used when calculating hashes to
|
|
|
|
:: ensure they're unique even when the same
|
|
|
|
:: request is made multiple times.
|
|
|
|
hxs=(map desk @ud)
|
|
|
|
== ::
|
|
|
|
+$ arak-4
|
|
|
|
$: =ship
|
|
|
|
=desk
|
|
|
|
=aeon
|
|
|
|
next=(list rung)
|
2022-08-26 08:57:20 +03:00
|
|
|
rein=rein-9
|
2021-09-06 17:27:17 +03:00
|
|
|
==
|
2021-08-20 01:57:31 +03:00
|
|
|
+$ pith-3 ::
|
|
|
|
$: rem=(map desk per-desk) ::
|
|
|
|
syn=(map kiln-sync let=@ud) ::
|
|
|
|
ark=(map desk arak-3) ::
|
|
|
|
commit-timer=[way=wire nex=@da tim=@dr mon=term] ::
|
|
|
|
:: map desk to the currently ongoing fuse request
|
|
|
|
:: and the latest version numbers for beaks to
|
|
|
|
fus=(map desk per-fuse)
|
|
|
|
:: used for fuses - every time we get a fuse we
|
|
|
|
:: bump this. used when calculating hashes to
|
|
|
|
:: ensure they're unique even when the same
|
|
|
|
:: request is made multiple times.
|
|
|
|
hxs=(map desk @ud)
|
|
|
|
==
|
|
|
|
+$ arak-3
|
|
|
|
$: =ship
|
|
|
|
=desk
|
|
|
|
=aeon
|
2021-09-06 17:27:17 +03:00
|
|
|
next=(list rung)
|
2021-08-20 01:57:31 +03:00
|
|
|
rein=rein-3
|
|
|
|
==
|
|
|
|
+$ rein-3
|
|
|
|
$: add=(set dude)
|
|
|
|
sub=(set dude)
|
|
|
|
==
|
|
|
|
::
|
2021-07-16 05:25:03 +03:00
|
|
|
+$ pith-2 ::
|
|
|
|
$: rem=(map desk per-desk) ::
|
|
|
|
syn=(map kiln-sync let=@ud) ::
|
|
|
|
ota=(unit [=ship =desk =aeon]) ::
|
|
|
|
commit-timer=[way=wire nex=@da tim=@dr mon=term] ::
|
2021-08-11 19:23:36 +03:00
|
|
|
fus=(map desk per-fuse)
|
|
|
|
hxs=(map desk @ud)
|
2021-07-16 05:25:03 +03:00
|
|
|
== ::
|
2020-06-17 09:36:09 +03:00
|
|
|
+$ pith-1 ::
|
|
|
|
$: rem=(map desk per-desk) ::
|
|
|
|
syn=(map kiln-sync let=@ud) ::
|
|
|
|
ota=(unit [=ship =desk =aeon]) ::
|
|
|
|
commit-timer=[way=wire nex=@da tim=@dr mon=term] ::
|
|
|
|
== ::
|
|
|
|
+$ pith-0 ::
|
|
|
|
$: rem=(map desk per-desk) ::
|
|
|
|
syn=(map kiln-sync let=@ud) ::
|
|
|
|
autoload-on=? ::
|
|
|
|
cur-hoon=@uvI ::
|
|
|
|
cur-arvo=@uvI ::
|
|
|
|
cur-zuse=@uvI ::
|
|
|
|
cur-vanes=(map @tas @uvI) ::
|
|
|
|
commit-timer=[way=wire nex=@da tim=@dr mon=term] ::
|
|
|
|
==
|
|
|
|
+$ per-desk :: per-desk state
|
|
|
|
$: auto=? :: escalate on failure
|
2020-08-28 10:24:25 +03:00
|
|
|
gem=?(%this %that germ) :: strategy
|
2020-06-17 09:36:09 +03:00
|
|
|
her=@p :: from ship
|
|
|
|
sud=@tas :: from desk
|
|
|
|
cas=case :: at case
|
|
|
|
==
|
2021-05-24 01:43:41 +03:00
|
|
|
+$ per-fuse :: per fuse state
|
|
|
|
:: map [ship desk] to latest version number we
|
|
|
|
:: have for them. used for things we're %trak-ing
|
|
|
|
:: our invariant here is to store the latest version
|
|
|
|
:: number we've heard of.
|
|
|
|
$: mox=(map [ship desk] let=@ud)
|
|
|
|
:: relevant parts of originating request
|
|
|
|
kf=kiln-fuse-data
|
|
|
|
==
|
2020-06-17 09:36:09 +03:00
|
|
|
+$ kiln-commit term ::
|
|
|
|
+$ kiln-mount ::
|
|
|
|
$: pax=path ::
|
|
|
|
pot=term ::
|
|
|
|
==
|
|
|
|
+$ kiln-unmount $@(term [knot path]) ::
|
|
|
|
+$ kiln-sync ::
|
2021-08-03 00:52:46 +03:00
|
|
|
$: syd=desk :: local desk
|
|
|
|
her=ship :: foreign ship
|
|
|
|
sud=desk :: foreign desk
|
2020-06-17 09:36:09 +03:00
|
|
|
==
|
|
|
|
+$ kiln-unsync ::
|
2021-08-03 00:52:46 +03:00
|
|
|
$: syd=desk :: local desk
|
|
|
|
her=ship :: foreign ship
|
|
|
|
sud=desk :: foreign desk
|
2020-06-17 09:36:09 +03:00
|
|
|
==
|
|
|
|
+$ kiln-merge ::
|
2020-08-28 10:24:25 +03:00
|
|
|
$@ ~
|
2020-06-17 09:36:09 +03:00
|
|
|
$: syd=desk ::
|
|
|
|
ali=ship ::
|
|
|
|
sud=desk ::
|
|
|
|
cas=case ::
|
2020-08-28 10:24:25 +03:00
|
|
|
gim=?(%auto germ) ::
|
2020-06-17 09:36:09 +03:00
|
|
|
==
|
2022-09-02 06:47:28 +03:00
|
|
|
+$ sync-state [kid=(unit desk) let=@ud]
|
2021-05-24 01:43:41 +03:00
|
|
|
+$ fuse-source [who=ship des=desk ver=$@(%trak case)]
|
|
|
|
:: actual poke
|
2021-04-20 06:46:46 +03:00
|
|
|
+$ kiln-fuse
|
2021-05-02 06:04:19 +03:00
|
|
|
$@ ~
|
2021-04-20 06:46:46 +03:00
|
|
|
$: syd=desk
|
2021-05-24 01:43:41 +03:00
|
|
|
$@ ~ :: signifies clearing the fuse
|
|
|
|
$: overwrite=flag :: force overwrite previous fuse
|
|
|
|
bas=fuse-source
|
|
|
|
con=(list [fuse-source germ])
|
|
|
|
==
|
2021-04-20 06:46:46 +03:00
|
|
|
==
|
2021-05-24 01:43:41 +03:00
|
|
|
:: state tracked by kiln
|
|
|
|
+$ kiln-fuse-data
|
|
|
|
$: syd=desk
|
|
|
|
bas=fuse-source
|
|
|
|
con=(list [fuse-source germ])
|
2021-08-03 00:52:46 +03:00
|
|
|
==
|
2021-06-06 19:43:26 +03:00
|
|
|
:: Request to list current fuses. ~ means "list all"
|
|
|
|
::
|
|
|
|
+$ kiln-fuse-list (unit desk)
|
2020-06-17 09:36:09 +03:00
|
|
|
--
|
2021-08-18 01:16:48 +03:00
|
|
|
|= [bowl:gall state]
|
2015-09-02 01:20:17 +03:00
|
|
|
?> =(src our)
|
2021-07-09 02:25:18 +03:00
|
|
|
=| moz=(list card:agent:gall)
|
|
|
|
|%
|
|
|
|
++ kiln .
|
2015-12-09 04:54:26 +03:00
|
|
|
++ abet :: resolve
|
2020-06-17 09:36:09 +03:00
|
|
|
[(flop moz) `state`+<+.$]
|
2015-09-02 01:20:17 +03:00
|
|
|
::
|
2019-11-14 21:39:50 +03:00
|
|
|
++ emit
|
2019-11-19 07:36:21 +03:00
|
|
|
|= card:agent:gall
|
2019-11-14 21:39:50 +03:00
|
|
|
%_(+> moz [+< moz])
|
|
|
|
::
|
|
|
|
++ emil :: return cards
|
2019-11-19 07:36:21 +03:00
|
|
|
|= (list card:agent:gall)
|
2015-09-02 01:20:17 +03:00
|
|
|
^+ +>
|
|
|
|
?~(+< +> $(+< t.+<, +> (emit i.+<)))
|
2021-09-26 08:07:23 +03:00
|
|
|
:: +fmt: format string for slogging
|
|
|
|
::
|
|
|
|
++ fmt
|
|
|
|
|= mes=tape
|
|
|
|
[%0 %leaf (weld "kiln: " mes)]
|
2015-09-02 01:20:17 +03:00
|
|
|
::
|
|
|
|
++ render
|
2020-11-26 17:09:31 +03:00
|
|
|
|= [mez=tape sud=desk who=ship syd=desk]
|
2020-05-20 11:36:16 +03:00
|
|
|
:^ %palm [" " ~ ~ ~] leaf+(weld "kiln: " mez)
|
2015-12-21 00:16:39 +03:00
|
|
|
~[leaf+"from {<sud>}" leaf+"on {<who>}" leaf+"to {<syd>}"]
|
2015-09-02 01:20:17 +03:00
|
|
|
::
|
2022-08-26 08:57:20 +03:00
|
|
|
++ sources
|
2022-09-02 06:47:28 +03:00
|
|
|
=/ zyns=(list [[syd=desk her=ship sud=desk] *]) ~(tap by zyn)
|
2022-08-26 08:57:20 +03:00
|
|
|
=| sources=(map desk [ship desk])
|
|
|
|
|- ^+ sources
|
2022-09-02 06:47:28 +03:00
|
|
|
?~ zyns
|
2022-08-26 08:57:20 +03:00
|
|
|
sources
|
2022-09-02 06:47:28 +03:00
|
|
|
=. sources (~(put by sources) -.i.zyns)
|
|
|
|
$(zyns t.zyns)
|
2022-08-26 08:57:20 +03:00
|
|
|
::
|
2021-07-16 05:25:03 +03:00
|
|
|
++ on-init
|
|
|
|
=< abet
|
2021-09-26 08:07:23 +03:00
|
|
|
~> %slog.(fmt "boot")
|
2021-09-26 07:20:37 +03:00
|
|
|
::
|
|
|
|
=+ .^(desks=(set desk) %cd /(scot %p our)//(scot %da now))
|
2021-09-16 00:46:56 +03:00
|
|
|
=. desks (~(del in desks) %base)
|
|
|
|
=. desks (~(del in desks) %kids)
|
2021-09-26 07:20:37 +03:00
|
|
|
::
|
|
|
|
=/ sop=ship (sein:title our now our)
|
2021-09-16 00:46:56 +03:00
|
|
|
:: set up base desk
|
|
|
|
::
|
2021-09-26 07:20:37 +03:00
|
|
|
=? ..on-init ?=(?(%earl %duke %king) (clan:title our))
|
2022-09-02 06:47:28 +03:00
|
|
|
abet:init:(apex:(sync %base sop %kids) `%kids)
|
2021-09-28 15:22:37 +03:00
|
|
|
:: install other desks and make them public
|
2021-09-16 00:46:56 +03:00
|
|
|
::
|
|
|
|
=/ dez=(list desk) ~(tap in desks)
|
2021-09-26 07:20:37 +03:00
|
|
|
|- ^+ ..on-init
|
2021-09-16 00:46:56 +03:00
|
|
|
?~ dez ..on-init
|
|
|
|
=. ..on-init
|
2022-08-26 08:57:20 +03:00
|
|
|
(emit %pass /kiln-init-zest %arvo %c %zest i.dez %next)
|
2021-09-28 15:22:37 +03:00
|
|
|
=. ..on-init
|
|
|
|
%- emit
|
|
|
|
:^ %pass /kiln/permission %arvo
|
|
|
|
[%c %perm i.dez / %r `[%black ~]]
|
2021-09-29 06:26:30 +03:00
|
|
|
=/ src (get-publisher our i.dez now)
|
|
|
|
=? ..on-init &(?=(^ src) !=(our u.src))
|
2022-09-02 06:47:28 +03:00
|
|
|
abet:init:(sync i.dez u.src i.dez)
|
2021-09-16 00:46:56 +03:00
|
|
|
$(dez t.dez)
|
2021-07-16 05:25:03 +03:00
|
|
|
::
|
2020-06-10 02:21:30 +03:00
|
|
|
++ on-load
|
2021-08-11 19:23:36 +03:00
|
|
|
=> |%
|
|
|
|
+$ ota [syd=desk her=ship sud=desk]
|
|
|
|
--
|
|
|
|
=| old-ota=(unit ota)
|
2020-07-18 02:58:28 +03:00
|
|
|
|= [hood-version=@ud old=any-state]
|
2021-09-22 23:34:20 +03:00
|
|
|
=/ old-version -.old
|
|
|
|
=* state +<+.$.abet
|
|
|
|
::
|
2021-08-11 19:23:36 +03:00
|
|
|
=? old-ota ?=(%0 -.old)
|
|
|
|
=/ syncs=(list [ota =aeon]) ~(tap by syn.old)
|
|
|
|
|- ^- (unit ota)
|
|
|
|
?~ syncs
|
|
|
|
~
|
|
|
|
?: &(=([%base %kids] [syd sud]:i.syncs) !=(our her.i.syncs))
|
|
|
|
`[syd her sud]:i.syncs
|
|
|
|
$(syncs t.syncs)
|
|
|
|
::
|
|
|
|
=? old ?=(%0 -.old)
|
|
|
|
=? syn.old ?=(^ old-ota) (~(del by syn.old) u.old-ota)
|
|
|
|
[%3 [rem syn ark=~ commit-timer fus=~ hxs=~]:old]
|
2020-06-10 02:21:30 +03:00
|
|
|
::
|
2021-07-01 04:03:47 +03:00
|
|
|
=? old ?=(%1 -.old)
|
|
|
|
:* %2
|
|
|
|
rem.old
|
|
|
|
syn.old
|
|
|
|
ota.old
|
2021-07-16 05:25:03 +03:00
|
|
|
commit-timer.old
|
2021-08-11 19:23:36 +03:00
|
|
|
fus=~
|
|
|
|
hxs=~
|
2021-07-16 05:25:03 +03:00
|
|
|
==
|
2021-08-11 19:23:36 +03:00
|
|
|
::
|
|
|
|
=? old-ota ?=(%2 -.old)
|
|
|
|
?~ ota.old ~
|
|
|
|
`[%base ship desk]:u.ota.old
|
2020-06-10 02:21:30 +03:00
|
|
|
::
|
2021-07-16 05:25:03 +03:00
|
|
|
=? old ?=(%2 -.old)
|
|
|
|
:* %3
|
|
|
|
rem.old
|
|
|
|
syn.old
|
2021-07-01 04:03:47 +03:00
|
|
|
ark=~
|
|
|
|
commit-timer.old
|
2021-08-11 19:23:36 +03:00
|
|
|
fus.old
|
|
|
|
hxs.old
|
2021-07-01 04:03:47 +03:00
|
|
|
==
|
|
|
|
::
|
2021-09-06 17:27:17 +03:00
|
|
|
=? old ?=(%3 -.old)
|
|
|
|
:- %4
|
|
|
|
+.old(ark (~(run by ark.old) |=(a=arak-3 a(rein [liv=& rein.a]))))
|
|
|
|
::
|
|
|
|
=? old ?=(%4 -.old)
|
|
|
|
:- %5
|
|
|
|
=- +.old(ark -)
|
|
|
|
%- ~(run by ark.old)
|
|
|
|
|= a=arak-4
|
2021-09-16 19:25:02 +03:00
|
|
|
^- arak-6
|
2021-09-06 17:27:17 +03:00
|
|
|
[[paused=| ship desk aeon] next rein]:a
|
2021-09-16 19:25:02 +03:00
|
|
|
::
|
2021-09-07 07:37:36 +03:00
|
|
|
=? old ?=(%5 -.old)
|
|
|
|
[%6 ~ +.old]
|
2021-09-06 17:27:17 +03:00
|
|
|
::
|
2021-09-16 19:25:02 +03:00
|
|
|
=? old ?=(%6 -.old)
|
|
|
|
:- %7
|
|
|
|
=- +.old(ark -)
|
|
|
|
%- ~(run by ark.old)
|
|
|
|
|= a=arak-6
|
2021-09-29 06:26:30 +03:00
|
|
|
^- arak-7
|
2021-09-16 19:25:02 +03:00
|
|
|
:_ rein.a
|
2021-09-29 06:26:30 +03:00
|
|
|
^- (unit rail-7)
|
2021-09-16 19:25:02 +03:00
|
|
|
`[paused.rail ship.rail desk.rail aeon.rail next]:a
|
|
|
|
::
|
2021-09-29 06:26:30 +03:00
|
|
|
=? old ?=(%7 -.old)
|
|
|
|
:- %8
|
|
|
|
=- +.old(ark -)
|
2022-09-02 06:47:28 +03:00
|
|
|
%- ~(gas by *(map desk arak-9))
|
2021-09-29 06:26:30 +03:00
|
|
|
%+ turn ~(tap by ark.old)
|
|
|
|
|= [d=desk a=arak-7]
|
2022-09-02 06:47:28 +03:00
|
|
|
^- [desk arak-9]
|
2021-09-29 06:26:30 +03:00
|
|
|
:- d
|
|
|
|
:_ rein.a
|
|
|
|
?~ rail.a ~
|
|
|
|
`[(get-publisher our d now) u.rail.a]
|
|
|
|
::
|
2021-10-07 22:09:39 +03:00
|
|
|
=? old ?=(%8 -.old)
|
|
|
|
[%9 +.old]
|
|
|
|
::
|
2022-08-17 07:33:25 +03:00
|
|
|
:: XX need to merge ark into syn
|
|
|
|
=? old ?=(%9 -.old)
|
2022-09-02 06:47:28 +03:00
|
|
|
[%10 |1.+.old(ark ~)]
|
2021-10-07 22:09:39 +03:00
|
|
|
::
|
2022-08-17 07:33:25 +03:00
|
|
|
?> ?=(%10 -.old)
|
|
|
|
=. state old
|
2021-09-22 23:34:20 +03:00
|
|
|
abet:kiln
|
2020-06-10 02:21:30 +03:00
|
|
|
::
|
2020-07-01 02:10:12 +03:00
|
|
|
++ on-peek
|
|
|
|
|= =path
|
|
|
|
^- (unit (unit cage))
|
2020-12-04 11:37:28 +03:00
|
|
|
?+ path [~ ~]
|
2022-08-17 07:33:25 +03:00
|
|
|
[%x %kiln %our ~] ``noun+!>(our)
|
|
|
|
[%x %kiln %lag ~]
|
|
|
|
``loob+!>(.^(? //(scot %p our)//(scot %da now)/zen/lag))
|
2021-08-24 07:09:12 +03:00
|
|
|
::
|
2020-12-04 11:37:28 +03:00
|
|
|
[%x %kiln %base-hash ~]
|
2022-09-02 06:47:28 +03:00
|
|
|
=/ ver (mergebase-hashes our %base now (~(got by sources) %base))
|
2020-12-04 11:37:28 +03:00
|
|
|
``noun+!>(?~(ver 0v0 i.ver))
|
2022-08-26 08:57:20 +03:00
|
|
|
::
|
|
|
|
[%x %kiln %syncs ~] ``noun+!>(syn)
|
|
|
|
[%x %kiln %sources ~] ``noun+!>(sources)
|
2020-12-02 09:27:52 +03:00
|
|
|
==
|
2020-07-01 02:10:12 +03:00
|
|
|
::
|
2021-07-01 04:03:47 +03:00
|
|
|
:: +get-germ: select merge strategy into local desk
|
|
|
|
::
|
2022-08-17 07:33:25 +03:00
|
|
|
:: If destination desk doesn't exist, need a %init merge. Otherwise,
|
|
|
|
:: we just want what the remote has, so we use %only-that.
|
2021-07-01 04:03:47 +03:00
|
|
|
::
|
|
|
|
++ get-germ
|
|
|
|
|= =desk
|
|
|
|
=+ .^(=cass:clay %cw /(scot %p our)/[desk]/(scot %da now))
|
|
|
|
?- ud.cass
|
|
|
|
%0 %init
|
2022-05-11 06:38:57 +03:00
|
|
|
* %only-that
|
2021-07-01 04:03:47 +03:00
|
|
|
==
|
2021-07-10 15:56:08 +03:00
|
|
|
::
|
2021-07-01 04:03:47 +03:00
|
|
|
++ poke
|
|
|
|
|= [=mark =vase]
|
|
|
|
?+ mark ~|([%poke-kiln-bad-mark mark] !!)
|
|
|
|
%kiln-autocommit =;(f (f !<(_+<.f vase)) poke-autocommit)
|
|
|
|
%kiln-cancel =;(f (f !<(_+<.f vase)) poke-cancel)
|
|
|
|
%kiln-cancel-autocommit =;(f (f !<(_+<.f vase)) poke-cancel-autocommit)
|
|
|
|
%kiln-commit =;(f (f !<(_+<.f vase)) poke-commit)
|
|
|
|
%kiln-fuse =;(f (f !<(_+<.f vase)) poke-fuse)
|
2021-08-11 19:23:36 +03:00
|
|
|
%kiln-fuse-list =;(f (f !<(_+<.f vase)) poke-fuse-list)
|
2021-07-01 04:03:47 +03:00
|
|
|
%kiln-gall-sear =;(f (f !<(_+<.f vase)) poke-gall-sear)
|
|
|
|
%kiln-info =;(f (f !<(_+<.f vase)) poke-info)
|
|
|
|
%kiln-install =;(f (f !<(_+<.f vase)) poke-install)
|
|
|
|
%kiln-label =;(f (f !<(_+<.f vase)) poke-label)
|
|
|
|
%kiln-merge =;(f (f !<(_+<.f vase)) poke-merge)
|
|
|
|
%kiln-mount =;(f (f !<(_+<.f vase)) poke-mount)
|
2021-07-21 12:00:11 +03:00
|
|
|
%kiln-nuke =;(f (f !<(_+<.f vase)) poke-nuke)
|
2021-09-06 17:27:17 +03:00
|
|
|
%kiln-pause =;(f (f !<(_+<.f vase)) poke-pause)
|
2021-07-01 04:03:47 +03:00
|
|
|
%kiln-permission =;(f (f !<(_+<.f vase)) poke-permission)
|
2021-08-20 01:57:31 +03:00
|
|
|
%kiln-revive =;(f (f !<(_+<.f vase)) poke-revive)
|
2021-08-20 10:41:16 +03:00
|
|
|
%kiln-rein =;(f (f !<(_+<.f vase)) poke-rein)
|
2021-07-01 04:03:47 +03:00
|
|
|
%kiln-rm =;(f (f !<(_+<.f vase)) poke-rm)
|
|
|
|
%kiln-schedule =;(f (f !<(_+<.f vase)) poke-schedule)
|
2021-09-06 17:27:17 +03:00
|
|
|
%kiln-suspend =;(f (f !<(_+<.f vase)) poke-suspend)
|
2021-07-01 04:03:47 +03:00
|
|
|
%kiln-sync =;(f (f !<(_+<.f vase)) poke-sync)
|
|
|
|
%kiln-syncs =;(f (f !<(_+<.f vase)) poke-syncs)
|
|
|
|
%kiln-uninstall =;(f (f !<(_+<.f vase)) poke-uninstall)
|
|
|
|
%kiln-unmount =;(f (f !<(_+<.f vase)) poke-unmount)
|
|
|
|
%kiln-unsync =;(f (f !<(_+<.f vase)) poke-unsync)
|
|
|
|
==
|
2016-02-26 02:19:44 +03:00
|
|
|
::
|
2021-07-01 04:03:47 +03:00
|
|
|
++ poke-autocommit
|
|
|
|
|= [mon=kiln-commit auto=?]
|
|
|
|
=< abet
|
|
|
|
=. +>.$ (emit %pass /commit %arvo %c [%dirk mon])
|
|
|
|
?. auto
|
|
|
|
+>.$
|
|
|
|
=/ recur ~s1
|
|
|
|
=. commit-timer
|
|
|
|
[/kiln/autocommit (add now recur) recur mon]
|
|
|
|
(emit %pass way.commit-timer %arvo %b [%wait nex.commit-timer])
|
2020-07-23 02:27:02 +03:00
|
|
|
::
|
2021-07-01 04:03:47 +03:00
|
|
|
++ poke-cancel
|
|
|
|
|= a=@tas
|
|
|
|
abet:(emit %pass /cancel %arvo %c [%drop a])
|
2020-07-23 02:27:02 +03:00
|
|
|
::
|
2021-07-01 04:03:47 +03:00
|
|
|
++ poke-cancel-autocommit
|
2018-03-19 07:18:20 +03:00
|
|
|
|= ~
|
2021-07-01 04:03:47 +03:00
|
|
|
abet:(emit %pass way.commit-timer %arvo %b [%rest nex.commit-timer])
|
2015-09-02 01:20:17 +03:00
|
|
|
::
|
2021-07-01 04:03:47 +03:00
|
|
|
++ poke-commit
|
|
|
|
|= [mon=kiln-commit auto=?]
|
|
|
|
=< abet
|
|
|
|
=. +>.$ (emit %pass /commit %arvo %c [%dirk mon])
|
|
|
|
?. auto
|
|
|
|
+>.$
|
|
|
|
=/ recur ~s1
|
|
|
|
=. commit-timer
|
|
|
|
[/kiln/autocommit (add now recur) recur mon]
|
2021-07-09 02:25:18 +03:00
|
|
|
(emit %pass way.commit-timer %arvo %b [%wait nex.commit-timer])
|
2015-09-02 01:20:17 +03:00
|
|
|
::
|
2021-06-06 19:43:26 +03:00
|
|
|
++ poke-fuse-list
|
|
|
|
=>
|
|
|
|
|%
|
|
|
|
++ format-fuse
|
2021-06-08 03:23:00 +03:00
|
|
|
|= [into=desk pf=per-fuse]
|
|
|
|
^- tank
|
|
|
|
=/ sources=tape
|
|
|
|
%+ reel
|
|
|
|
con.kf.pf
|
|
|
|
|= [[fs=fuse-source g=germ] acc=tape]
|
|
|
|
^- tape
|
2021-08-11 19:23:36 +03:00
|
|
|
:(weld " [" (format-fuse-source fs) " " <g> "]" acc)
|
2021-06-08 03:23:00 +03:00
|
|
|
:- %leaf
|
|
|
|
;: weld
|
|
|
|
"|fuse {<into>} "
|
|
|
|
(format-fuse-source bas.kf.pf)
|
|
|
|
sources
|
|
|
|
==
|
|
|
|
:: +format-fuse-source: fuse source -> beak -> path
|
|
|
|
::
|
|
|
|
++ format-fuse-source
|
|
|
|
|= fs=fuse-source
|
|
|
|
^- tape
|
|
|
|
=/ bec=beak [who.fs des.fs ?:(?=([%trak] ver.fs) [%tas %track] ver.fs)]
|
|
|
|
<(en-beam [bec /])>
|
2021-06-06 19:43:26 +03:00
|
|
|
--
|
|
|
|
|= k=kiln-fuse-list
|
|
|
|
^+ abet
|
|
|
|
%. abet
|
|
|
|
?~ k
|
|
|
|
?~ fus
|
|
|
|
(slog [leaf+"no ongoing fuses" ~])
|
|
|
|
%- slog
|
|
|
|
%+ roll
|
|
|
|
~(tap by `(map desk per-fuse)`fus)
|
|
|
|
|= [[syd=desk pf=per-fuse] acc=tang]
|
|
|
|
^- tang
|
2021-06-08 03:23:00 +03:00
|
|
|
[(format-fuse syd pf) acc]
|
2021-06-06 19:43:26 +03:00
|
|
|
=/ pfu=(unit per-fuse) (~(get by fus) u.k)
|
|
|
|
?~ pfu
|
|
|
|
(slog [leaf+"no ongoing fuse for {<u.k>}" ~])
|
2021-06-08 03:23:00 +03:00
|
|
|
(slog [(format-fuse u.k u.pfu) ~])
|
2021-06-06 19:43:26 +03:00
|
|
|
::
|
2021-04-20 06:46:46 +03:00
|
|
|
++ poke-fuse
|
|
|
|
|= k=kiln-fuse
|
2021-05-02 06:04:19 +03:00
|
|
|
?~ k abet
|
2021-05-24 01:43:41 +03:00
|
|
|
=/ payload +.k
|
|
|
|
?~ payload
|
|
|
|
:: cancelling an ongoing fuse
|
|
|
|
%- (slog [leaf+"cancelling fuse into {<syd.k>}" ~])
|
2021-05-25 03:09:18 +03:00
|
|
|
=/ f (fuzz syd.k now)
|
|
|
|
?~ f
|
|
|
|
abet
|
|
|
|
abet:abet:delete:u.f
|
2021-05-24 01:43:41 +03:00
|
|
|
?: &(!overwrite.payload (~(has by fus) syd.k))
|
|
|
|
((slog [leaf+"existing fuse into {<syd.k>} - need =overwrite &" ~]) abet)
|
|
|
|
=. fus (~(put by fus) syd.k [~ [syd.k bas.payload con.payload]])
|
|
|
|
=/ old-cnt=@ud (~(gut by hxs) syd.k 0)
|
|
|
|
=. hxs (~(put by hxs) syd.k +(old-cnt))
|
2021-05-25 03:09:18 +03:00
|
|
|
=/ f (fuzz syd.k now)
|
|
|
|
?~ f
|
|
|
|
abet
|
|
|
|
abet:abet:fuse:u.f
|
2021-04-20 06:46:46 +03:00
|
|
|
::
|
2021-07-01 04:03:47 +03:00
|
|
|
++ poke-gall-sear
|
|
|
|
|= =ship
|
|
|
|
abet:(emit %pass /kiln %arvo %g %sear ship)
|
|
|
|
::
|
2016-05-07 02:21:29 +03:00
|
|
|
++ poke-info
|
2020-11-26 17:09:31 +03:00
|
|
|
|= [mez=tape tor=(unit toro)]
|
2016-07-20 01:21:21 +03:00
|
|
|
?~ tor
|
|
|
|
abet:(spam leaf+mez ~)
|
2019-11-14 21:39:50 +03:00
|
|
|
abet:(emit:(spam leaf+mez ~) %pass /kiln %arvo %c [%info u.tor])
|
2015-09-02 01:20:17 +03:00
|
|
|
::
|
2021-07-01 04:03:47 +03:00
|
|
|
++ poke-install
|
|
|
|
|= [loc=desk her=ship rem=desk]
|
2022-08-26 08:57:20 +03:00
|
|
|
:: XX should check if already installed before changing zest?
|
|
|
|
=. ..on-init (emit %pass /kiln-install %arvo %c %zest loc %next)
|
2022-09-02 06:47:28 +03:00
|
|
|
(poke-zinc loc her rem)
|
2021-07-01 04:03:47 +03:00
|
|
|
::
|
|
|
|
++ poke-label
|
2021-11-12 23:35:06 +03:00
|
|
|
|= [syd=desk lab=@tas aey=(unit aeon)]
|
2021-07-01 04:03:47 +03:00
|
|
|
=+ pax=/(scot %p our)/[syd]/[lab]
|
2021-11-12 23:35:06 +03:00
|
|
|
(poke-info "labeled {(spud pax)}" `[syd %| lab aey])
|
2021-07-01 04:03:47 +03:00
|
|
|
::
|
|
|
|
++ poke-merge
|
|
|
|
|= kiln-merge
|
|
|
|
?~ +< abet
|
|
|
|
abet:abet:(merge:(work syd) ali sud cas gim)
|
|
|
|
::
|
|
|
|
++ poke-mount
|
|
|
|
|= kiln-mount
|
|
|
|
=+ bem=(de-beam pax)
|
|
|
|
?~ bem
|
|
|
|
=+ "can't mount bad path: {<pax>}"
|
|
|
|
abet:(spam leaf+- ~)
|
|
|
|
abet:(emit %pass /mount %arvo %c [%mont pot u.bem])
|
|
|
|
::
|
2021-07-21 12:00:11 +03:00
|
|
|
++ poke-nuke
|
|
|
|
|= [=term desk=?]
|
|
|
|
=< abet
|
|
|
|
?. desk
|
|
|
|
(emit %pass /nuke %arvo %g [%nuke term])
|
|
|
|
%- emil
|
2022-08-26 08:57:20 +03:00
|
|
|
:: XX
|
|
|
|
%+ turn *(list [dude ?]) :: (get-apps-have our term now)
|
2021-07-21 12:00:11 +03:00
|
|
|
|=([=dude ?] [%pass /nuke %arvo %g [%nuke dude]])
|
|
|
|
::
|
2021-09-06 17:27:17 +03:00
|
|
|
++ poke-pause
|
|
|
|
|= =desk
|
2022-08-26 08:57:20 +03:00
|
|
|
?~ got=(~(get by sources) desk)
|
|
|
|
abet:(spam leaf+"desk not installed: {<desk>}" ~)
|
|
|
|
(poke-unsync desk u.got)
|
2021-09-06 17:27:17 +03:00
|
|
|
::
|
2021-07-01 04:03:47 +03:00
|
|
|
++ poke-permission
|
|
|
|
|= [syd=desk pax=path pub=?]
|
|
|
|
=< abet
|
|
|
|
%- emit
|
|
|
|
=/ =rite [%r ~ ?:(pub %black %white) ~]
|
|
|
|
[%pass /kiln/permission %arvo %c [%perm syd pax rite]]
|
|
|
|
::
|
2021-08-20 10:41:16 +03:00
|
|
|
++ poke-rein
|
|
|
|
|= [=desk =rein]
|
2022-08-26 08:57:20 +03:00
|
|
|
abet:(emit %pass /kiln-rein %arvo %c %rein desk rein)
|
2021-09-06 17:27:17 +03:00
|
|
|
::
|
2021-08-20 01:57:31 +03:00
|
|
|
++ poke-revive
|
|
|
|
|= =desk
|
2022-08-26 08:57:20 +03:00
|
|
|
abet:(emit %pass /kiln-revive %arvo %c %zest desk %live)
|
2021-08-20 01:57:31 +03:00
|
|
|
::
|
2016-07-16 04:56:50 +03:00
|
|
|
++ poke-rm
|
2020-11-25 23:22:55 +03:00
|
|
|
|= a=path
|
2016-07-16 04:56:50 +03:00
|
|
|
=+ b=.^(arch %cy a)
|
|
|
|
?~ fil.b
|
|
|
|
=+ ~[leaf+"No such file:" leaf+"{<a>}"]
|
|
|
|
abet:(spam -)
|
2016-07-20 01:21:21 +03:00
|
|
|
(poke-info "removed" `(fray a))
|
2016-07-16 04:56:50 +03:00
|
|
|
::
|
2015-09-02 01:20:17 +03:00
|
|
|
++ poke-schedule
|
2020-11-26 17:09:31 +03:00
|
|
|
|= [where=path tym=@da eve=@t]
|
2015-09-02 01:20:17 +03:00
|
|
|
=. where (welp where /sched)
|
2016-05-07 02:21:29 +03:00
|
|
|
%+ poke-info "scheduled"
|
2015-12-09 04:54:26 +03:00
|
|
|
=+ old=;;((map @da cord) (fall (file where) ~))
|
2016-07-20 01:21:21 +03:00
|
|
|
`(foal where %sched !>((~(put by old) tym eve)))
|
2015-09-02 01:20:17 +03:00
|
|
|
::
|
2021-08-20 01:57:31 +03:00
|
|
|
++ poke-suspend
|
|
|
|
|= =desk
|
2022-08-26 08:57:20 +03:00
|
|
|
abet:(emit %pass /kiln-suspend %arvo %c %zest desk %dead)
|
2021-08-20 01:57:31 +03:00
|
|
|
::
|
2021-07-01 04:03:47 +03:00
|
|
|
++ poke-sync
|
2022-09-02 06:47:28 +03:00
|
|
|
|= hos=kiln-sync
|
|
|
|
?: (~(has by syn) hos)
|
|
|
|
abet:(spam (render "already syncing" [sud her syd]:hos) ~)
|
|
|
|
abet:abet:start-sync:(auto hos)
|
|
|
|
::
|
|
|
|
++ poke-zinc
|
|
|
|
|= hos=kiln-sync
|
|
|
|
?: (~(has by zyn) hos)
|
2021-07-01 04:03:47 +03:00
|
|
|
abet:(spam (render "already syncing" [sud her syd]:hos) ~)
|
2022-09-02 06:47:28 +03:00
|
|
|
abet:abet:init:(sync hos)
|
2018-02-14 01:29:16 +03:00
|
|
|
::
|
2021-07-01 04:03:47 +03:00
|
|
|
++ poke-syncs :: print sync config
|
|
|
|
|= ~
|
|
|
|
=< abet %- spam
|
|
|
|
?: =(0 ~(wyt by syn))
|
2021-07-16 05:25:03 +03:00
|
|
|
[%leaf "no syncs configured"]~
|
2021-07-01 04:03:47 +03:00
|
|
|
%+ turn ~(tap in ~(key by syn))
|
|
|
|
|=(a=kiln-sync (render "sync configured" [sud her syd]:a))
|
2015-09-17 02:40:53 +03:00
|
|
|
::
|
2021-07-01 04:03:47 +03:00
|
|
|
++ poke-uninstall
|
|
|
|
|= loc=desk
|
2022-08-26 08:57:20 +03:00
|
|
|
?~ got=(~(get by sources) loc)
|
|
|
|
abet:(spam leaf+"desk not installed: {<loc>}" ~)
|
|
|
|
=. ..on-init (emit %pass /kiln-uninstall %arvo %c %zest loc %dead)
|
|
|
|
(poke-unsync loc u.got)
|
2020-03-19 02:06:33 +03:00
|
|
|
::
|
2021-07-01 04:03:47 +03:00
|
|
|
++ poke-unmount
|
|
|
|
|= mon=kiln-unmount
|
|
|
|
?^ mon
|
|
|
|
=+ bem=(de-beam mon)
|
|
|
|
?~ bem
|
|
|
|
=+ "can't unmount bad path: {<mon>}"
|
|
|
|
abet:(spam leaf+- ~)
|
|
|
|
abet:(emit %pass /unmount-beam %arvo %c [%ogre [[p q r] s]:u.bem])
|
|
|
|
abet:(emit %pass /unmount-point %arvo %c [%ogre mon])
|
|
|
|
::
|
|
|
|
++ poke-unsync
|
|
|
|
|= hus=kiln-unsync
|
|
|
|
?. (~(has by syn) hus)
|
|
|
|
abet:(spam (render "not syncing" [sud her syd]:hus) ~)
|
|
|
|
%* . abet:abet:stop:(auto hus)
|
|
|
|
syn (~(del by syn) hus)
|
|
|
|
==
|
2021-07-09 02:25:18 +03:00
|
|
|
:: +peer: handle %watch
|
|
|
|
::
|
|
|
|
++ peer
|
|
|
|
|= =path
|
|
|
|
?> (team:title our src)
|
2022-09-02 06:47:28 +03:00
|
|
|
?: =(0 1) abet :: avoid mint-vain
|
2021-07-09 02:25:18 +03:00
|
|
|
?+ path ~|(kiln-path/path !!)
|
2021-09-28 22:33:16 +03:00
|
|
|
[%vats ~]
|
2022-08-26 08:57:20 +03:00
|
|
|
(mean leaf+"kiln: old subscription to /kiln/vats failed" ~)
|
2021-07-09 02:25:18 +03:00
|
|
|
==
|
2018-02-14 01:29:16 +03:00
|
|
|
::
|
2019-11-14 21:39:50 +03:00
|
|
|
++ take-agent
|
2019-11-19 07:36:21 +03:00
|
|
|
|= [=wire =sign:agent:gall]
|
2021-07-17 02:54:20 +03:00
|
|
|
?+ wire ~|([%kiln-bad-take-agent wire -.sign] !!)
|
|
|
|
[%fancy *]
|
|
|
|
?> ?=(%poke-ack -.sign)
|
|
|
|
(take-coup-fancy t.wire p.sign)
|
|
|
|
::
|
|
|
|
[%spam *]
|
|
|
|
?> ?=(%poke-ack -.sign)
|
|
|
|
(take-coup-spam t.wire p.sign)
|
2021-07-18 04:40:20 +03:00
|
|
|
::
|
|
|
|
[%link @ ~]
|
|
|
|
?> ?=(%poke-ack -.sign)
|
2021-09-26 08:07:23 +03:00
|
|
|
~> %slog.(fmt "linked {<`@tas`i.t.wire>} to console")
|
2021-07-18 04:40:20 +03:00
|
|
|
abet
|
2019-11-14 21:39:50 +03:00
|
|
|
==
|
|
|
|
::
|
2020-06-16 10:29:17 +03:00
|
|
|
++ take-arvo
|
2019-11-14 21:39:50 +03:00
|
|
|
|= [=wire =sign-arvo]
|
2022-09-02 06:47:28 +03:00
|
|
|
^+ abet
|
2021-07-17 02:54:20 +03:00
|
|
|
?- wire
|
2019-11-14 21:39:50 +03:00
|
|
|
[%sync %merg *] %+ take-mere-sync t.t.wire
|
|
|
|
?>(?=(%mere +<.sign-arvo) +>.sign-arvo)
|
|
|
|
[%find-ship *] %+ take-writ-find-ship t.wire
|
|
|
|
?>(?=(%writ +<.sign-arvo) +>.sign-arvo)
|
|
|
|
[%sync *] %+ take-writ-sync t.wire
|
|
|
|
?>(?=(%writ +<.sign-arvo) +>.sign-arvo)
|
2022-08-31 05:32:31 +03:00
|
|
|
[%zinc *] (take-sync t.wire sign-arvo)
|
2019-11-14 21:39:50 +03:00
|
|
|
[%autocommit *] %+ take-wake-autocommit t.wire
|
|
|
|
?>(?=(%wake +<.sign-arvo) +>.sign-arvo)
|
2022-09-02 06:47:28 +03:00
|
|
|
[%vats *] abet
|
2021-05-24 01:43:41 +03:00
|
|
|
[%fuse-request @tas *]
|
2021-05-25 03:09:18 +03:00
|
|
|
=/ f (fuzz i.t.wire now)
|
|
|
|
?~ f
|
|
|
|
abet
|
|
|
|
abet:abet:(take:u.f t.t.wire sign-arvo)
|
2021-05-24 01:43:41 +03:00
|
|
|
[%fuse @tas *] ?> ?=(%mere +<.sign-arvo)
|
2021-05-25 03:09:18 +03:00
|
|
|
=/ syd=desk i.t.wire
|
|
|
|
?. ?=([%| *] +>.sign-arvo)
|
|
|
|
?~ p.p.sign-arvo
|
|
|
|
abet
|
2021-06-06 01:48:55 +03:00
|
|
|
=/ msg=tape "fuse merge conflict for {<syd>}"
|
|
|
|
%- (slog [leaf+msg >p.p.sign-arvo< ~])
|
2021-05-25 03:09:18 +03:00
|
|
|
abet
|
|
|
|
%- (slog leaf+"failed fuse for {<syd>}" p.p.sign-arvo)
|
|
|
|
abet
|
2019-11-14 21:39:50 +03:00
|
|
|
*
|
2020-06-27 05:21:09 +03:00
|
|
|
?+ +<.sign-arvo
|
|
|
|
((slog leaf+"kiln: strange card {<+<.sign-arvo wire>}" ~) abet)
|
2019-11-20 00:03:07 +03:00
|
|
|
%done %+ done wire
|
|
|
|
?>(?=(%done +<.sign-arvo) +>.sign-arvo)
|
2019-11-14 21:39:50 +03:00
|
|
|
%mere %+ take-mere wire
|
|
|
|
?>(?=(%mere +<.sign-arvo) +>.sign-arvo)
|
|
|
|
==
|
|
|
|
==
|
2020-11-26 17:09:31 +03:00
|
|
|
++ take |=(way=wire ?>(?=([@ ~] way) (work i.way))) :: general handler
|
2021-07-01 04:03:47 +03:00
|
|
|
++ done
|
|
|
|
|= [way=wire saw=(unit error:ames)]
|
|
|
|
~? ?=(^ saw) [%kiln-nack u.saw]
|
|
|
|
abet
|
|
|
|
::
|
2015-09-02 01:20:17 +03:00
|
|
|
++ take-mere ::
|
2020-11-26 17:09:31 +03:00
|
|
|
|= [way=wire are=(each (set path) (pair term tang))]
|
2021-05-18 22:09:22 +03:00
|
|
|
?. ?=([@ ~] way)
|
|
|
|
abet
|
2015-09-02 01:20:17 +03:00
|
|
|
abet:abet:(mere:(take way) are)
|
|
|
|
::
|
|
|
|
++ take-coup-fancy ::
|
2020-11-26 17:09:31 +03:00
|
|
|
|= [way=wire saw=(unit tang)]
|
2015-09-02 01:20:17 +03:00
|
|
|
abet:abet:(coup-fancy:(take way) saw)
|
|
|
|
::
|
2017-11-30 07:31:13 +03:00
|
|
|
++ take-coup-spam ::
|
2020-11-26 17:09:31 +03:00
|
|
|
|= [way=wire saw=(unit tang)]
|
2017-11-30 07:31:13 +03:00
|
|
|
~? ?=(^ saw) [%kiln-spam-lame u.saw]
|
|
|
|
abet
|
|
|
|
::
|
2015-09-02 01:20:17 +03:00
|
|
|
++ take-mere-sync ::
|
2020-11-26 17:09:31 +03:00
|
|
|
|= [way=wire mes=(each (set path) (pair term tang))]
|
|
|
|
?> ?=([@ @ @ *] way)
|
2020-11-25 23:22:55 +03:00
|
|
|
=/ hos=kiln-sync
|
2015-09-02 01:20:17 +03:00
|
|
|
:* syd=(slav %tas i.way)
|
|
|
|
her=(slav %p i.t.way)
|
|
|
|
sud=(slav %tas i.t.t.way)
|
|
|
|
==
|
2020-06-27 05:21:09 +03:00
|
|
|
?. (~(has by syn) hos)
|
|
|
|
abet
|
2018-12-04 09:59:41 +03:00
|
|
|
abet:abet:(mere:(auto hos) mes)
|
2015-09-02 01:20:17 +03:00
|
|
|
::
|
2019-04-30 20:40:38 +03:00
|
|
|
++ take-writ-find-ship ::
|
2020-11-26 17:09:31 +03:00
|
|
|
|= [way=wire rot=riot]
|
|
|
|
?> ?=([@ @ @ *] way)
|
2020-11-25 23:22:55 +03:00
|
|
|
=/ hos=kiln-sync
|
2019-04-30 20:40:38 +03:00
|
|
|
:* syd=(slav %tas i.way)
|
|
|
|
her=(slav %p i.t.way)
|
|
|
|
sud=(slav %tas i.t.t.way)
|
|
|
|
==
|
2020-06-27 05:21:09 +03:00
|
|
|
?. (~(has by syn) hos)
|
|
|
|
abet
|
2019-04-30 20:40:38 +03:00
|
|
|
abet:abet:(take-find-ship:(auto hos) rot)
|
|
|
|
::
|
2015-09-17 01:39:11 +03:00
|
|
|
++ take-writ-sync ::
|
2020-11-26 17:09:31 +03:00
|
|
|
|= [way=wire rot=riot]
|
|
|
|
?> ?=([@ @ @ *] way)
|
2020-11-25 23:22:55 +03:00
|
|
|
=/ hos=kiln-sync
|
2015-09-02 01:20:17 +03:00
|
|
|
:* syd=(slav %tas i.way)
|
|
|
|
her=(slav %p i.t.way)
|
|
|
|
sud=(slav %tas i.t.t.way)
|
|
|
|
==
|
2020-06-27 05:21:09 +03:00
|
|
|
?. (~(has by syn) hos)
|
|
|
|
abet
|
2018-12-04 09:59:41 +03:00
|
|
|
abet:abet:(writ:(auto hos) rot)
|
2015-09-02 01:20:17 +03:00
|
|
|
::
|
2019-08-25 12:00:26 +03:00
|
|
|
++ take-wake-autocommit
|
|
|
|
|= [way=wire error=(unit tang)]
|
|
|
|
?^ error
|
|
|
|
%- (slog u.error)
|
|
|
|
~& %kiln-wake-autocommit-fail
|
|
|
|
abet
|
|
|
|
=. nex.commit-timer (add now tim.commit-timer)
|
|
|
|
=< abet
|
|
|
|
%- emil
|
2019-11-14 21:39:50 +03:00
|
|
|
:~ [%pass /commit %arvo %c [%dirk mon.commit-timer]]
|
|
|
|
[%pass way.commit-timer %arvo %b [%wait nex.commit-timer]]
|
2019-08-25 12:00:26 +03:00
|
|
|
==
|
|
|
|
::
|
|
|
|
::
|
2015-09-02 01:20:17 +03:00
|
|
|
++ spam
|
2020-11-25 23:22:55 +03:00
|
|
|
|= mes=(list tank)
|
2015-09-02 01:20:17 +03:00
|
|
|
((slog mes) ..spam)
|
2021-05-24 01:43:41 +03:00
|
|
|
:: state machine for fuses
|
|
|
|
::
|
|
|
|
++ fuzz
|
|
|
|
|= [syd=desk now=@da]
|
2021-05-25 03:09:18 +03:00
|
|
|
=/ pfu=(unit per-fuse) (~(get by fus) syd)
|
|
|
|
?~ pfu
|
|
|
|
~
|
|
|
|
=* kf kf.u.pfu
|
|
|
|
=* mox mox.u.pfu
|
2021-05-24 01:43:41 +03:00
|
|
|
=/ should-delete=flag |
|
2021-05-25 03:09:18 +03:00
|
|
|
%- some
|
2021-05-24 01:43:41 +03:00
|
|
|
|%
|
|
|
|
:: finalize
|
|
|
|
::
|
|
|
|
++ abet
|
2021-05-25 03:09:18 +03:00
|
|
|
?: should-delete
|
2021-05-24 01:43:41 +03:00
|
|
|
..fuzz(fus (~(del by fus) syd))
|
|
|
|
..fuzz(fus (~(put by fus) syd [mox kf]))
|
|
|
|
::
|
|
|
|
++ delete
|
|
|
|
^+ ..delete
|
|
|
|
=. should-delete &
|
|
|
|
..delete
|
|
|
|
:: queue moves
|
|
|
|
::
|
|
|
|
++ blab
|
|
|
|
|= new=(list card:agent:gall)
|
|
|
|
^+ +>
|
|
|
|
+>.$(moz (welp new moz))
|
2021-06-08 02:52:08 +03:00
|
|
|
:: +make-requests: send requests for each %trak source.
|
2021-05-24 01:43:41 +03:00
|
|
|
::
|
|
|
|
++ make-requests
|
|
|
|
^+ ..abet
|
|
|
|
=/ movs=(list card:agent:gall)
|
|
|
|
%+ murn
|
|
|
|
[[bas.kf *germ] con.kf]
|
|
|
|
|= [fs=fuse-source germ]
|
|
|
|
^- (unit card:agent:gall)
|
|
|
|
?^ ver.fs
|
|
|
|
:: static source, don't need to track
|
|
|
|
~
|
2021-06-22 03:44:29 +03:00
|
|
|
=/ bec=beak (realize-fuse-source fs &)
|
2021-05-24 01:43:41 +03:00
|
|
|
?> =(who.fs p.bec)
|
|
|
|
?> =(des.fs q.bec)
|
|
|
|
=/ hax=@ud (mug [kf (~(got by hxs) syd)])
|
2021-06-06 01:48:55 +03:00
|
|
|
=/ wir=wire
|
|
|
|
/kiln/fuse-request/[syd]/(scot %p p.bec)/[q.bec]/(scot %ud hax)
|
2021-06-22 03:44:29 +03:00
|
|
|
=/ rav=rave [%sing %w r.bec /]
|
2021-05-24 01:43:41 +03:00
|
|
|
=/ rif=riff [q.bec `rav]
|
|
|
|
`[%pass wir %arvo %c [%warp who.fs rif]]
|
|
|
|
:: No need to keep state if all the sources are static
|
|
|
|
?~ movs
|
|
|
|
delete
|
|
|
|
(blab movs)
|
|
|
|
::
|
|
|
|
++ send-fuse
|
|
|
|
^+ ..abet
|
2021-06-22 03:44:29 +03:00
|
|
|
=/ bas=beak (realize-fuse-source bas.kf |)
|
2021-05-24 01:43:41 +03:00
|
|
|
=/ con=(list [beak germ])
|
|
|
|
%+ turn
|
|
|
|
con.kf
|
|
|
|
|= [fs=fuse-source g=germ]
|
2021-06-22 03:44:29 +03:00
|
|
|
[(realize-fuse-source fs |) g]
|
2021-05-24 01:43:41 +03:00
|
|
|
%- blab
|
|
|
|
[%pass /kiln/fuse/[syd] %arvo %c [%fuse syd bas con]]~
|
|
|
|
::
|
|
|
|
++ fuse
|
|
|
|
^+ ..abet
|
|
|
|
send-fuse:make-requests
|
|
|
|
::
|
|
|
|
++ take
|
|
|
|
|= [wir=wire =sign-arvo]
|
|
|
|
^+ ..fuse
|
|
|
|
?> =((lent wir) 3)
|
|
|
|
=/ who=ship (slav %p (snag 0 wir))
|
|
|
|
=/ src=desk (snag 1 wir)
|
|
|
|
=/ hax=@ud (slav %ud (snag 2 wir))
|
|
|
|
?. =(hax (mug [kf (~(got by hxs) syd)]))
|
|
|
|
:: If the hash in the wire doesn't match the current request
|
|
|
|
:: this is a response for a previous fuse that we can ignore.
|
|
|
|
..take
|
2021-06-17 00:45:45 +03:00
|
|
|
?> ?=([?(%clay %behn) %writ *] sign-arvo)
|
|
|
|
=/ gif +.sign-arvo
|
2021-05-24 01:43:41 +03:00
|
|
|
?~ p.gif
|
|
|
|
%- (slog leaf+"|fuse request failed for {<src>} on <who> - cancelling")
|
|
|
|
delete
|
2021-06-08 02:52:08 +03:00
|
|
|
=/ cas=cass:clay !<(cass:clay +.r.u.p.gif)
|
|
|
|
=. mox (~(put by mox) [who src] ud.cas)
|
2021-05-24 01:43:41 +03:00
|
|
|
fuse
|
|
|
|
::
|
|
|
|
:: utility functions below
|
|
|
|
::
|
|
|
|
:: +realize-fuse-source: convert a fuse-source to a
|
|
|
|
:: fully realized beak.
|
|
|
|
::
|
|
|
|
++ realize-fuse-source
|
2021-06-22 03:44:29 +03:00
|
|
|
|= [fs=fuse-source incr=flag]
|
2021-05-24 01:43:41 +03:00
|
|
|
^- beak
|
|
|
|
:+ who.fs
|
|
|
|
des.fs
|
|
|
|
?@ ver.fs
|
2021-06-22 03:44:29 +03:00
|
|
|
(realize-case [who.fs des.fs incr])
|
2021-05-24 01:43:41 +03:00
|
|
|
`case`ver.fs
|
|
|
|
::
|
|
|
|
++ realize-case
|
2021-06-22 03:44:29 +03:00
|
|
|
|= [who=ship des=desk incr=flag]
|
2021-05-24 01:43:41 +03:00
|
|
|
^- case
|
|
|
|
=/ let=(unit @ud) (~(get by mox) [who des])
|
|
|
|
^- case
|
|
|
|
?~ let
|
|
|
|
da+now
|
2021-06-22 03:44:29 +03:00
|
|
|
:- %ud
|
|
|
|
?: incr
|
|
|
|
+(u.let)
|
|
|
|
u.let
|
2021-05-24 01:43:41 +03:00
|
|
|
--
|
2015-09-02 01:20:17 +03:00
|
|
|
::
|
2022-08-31 05:32:31 +03:00
|
|
|
++ take-sync
|
|
|
|
|= [=wire =sign-arvo]
|
|
|
|
?> ?=([@ @ @ *] wire)
|
|
|
|
=* syd i.wire
|
|
|
|
=/ her (slav %p i.t.wire)
|
|
|
|
=* sud i.t.t.wire
|
|
|
|
abet:abet:(take:(sync syd her sud) t.t.t.wire sign-arvo)
|
|
|
|
::
|
|
|
|
++ sync
|
|
|
|
|= kiln-sync
|
2022-09-02 06:47:28 +03:00
|
|
|
=+ (~(gut by zyn) [syd her sud] *sync-state)
|
2022-08-31 05:32:31 +03:00
|
|
|
|%
|
2022-09-02 06:47:28 +03:00
|
|
|
++ abet ..sync(zyn (~(put by zyn) [syd her sud] kid let))
|
|
|
|
++ apex |=(nex=(unit desk) ..abet(kid nex))
|
|
|
|
++ emit |=(card:agent:gall ..abet(kiln (^emit +<)))
|
|
|
|
++ emil |=((list card:agent:gall) ..abet(kiln (^emil +<)))
|
2022-08-31 05:32:31 +03:00
|
|
|
++ here "{<syd>} from {<[her sud]>}"
|
|
|
|
++ ware
|
|
|
|
|= =wire
|
2022-09-02 06:47:28 +03:00
|
|
|
[%kiln %zinc syd (scot %p her) sud wire]
|
2022-08-31 05:32:31 +03:00
|
|
|
++ lard
|
|
|
|
|= [=wire =shed:khan]
|
|
|
|
(emit %pass (ware wire) %arvo %k %lard %base shed)
|
|
|
|
++ merg
|
|
|
|
|= [=wire =desk]
|
2022-09-02 06:47:28 +03:00
|
|
|
%: emit
|
|
|
|
%pass (ware wire) %arvo %c
|
|
|
|
%merg desk her sud
|
|
|
|
ud+(dec let) (get-germ desk)
|
|
|
|
==
|
2022-08-31 05:32:31 +03:00
|
|
|
::
|
|
|
|
:: (re)Start a sync from scratch by finding what version the source
|
|
|
|
:: desk is at
|
|
|
|
::
|
|
|
|
++ init
|
|
|
|
^+ ..abet
|
2022-09-02 06:47:28 +03:00
|
|
|
=. let 0
|
2022-08-31 05:32:31 +03:00
|
|
|
%+ lard /init
|
2022-09-02 06:47:28 +03:00
|
|
|
=/ m (strand:rand ,vase)
|
2022-08-31 05:32:31 +03:00
|
|
|
~> %slog.(fmt "beginning install into {here}")
|
2022-09-02 06:47:28 +03:00
|
|
|
;< =riot:clay bind:m (warp:strandio her sud ~ %sing %y ud+1 /)
|
2022-08-31 05:32:31 +03:00
|
|
|
~> %slog.(fmt "activated install into {here}")
|
2022-09-02 06:47:28 +03:00
|
|
|
;< now=@da bind:m get-time:strandio
|
|
|
|
;< =riot:clay bind:m (warp:strandio her sud ~ %sing %w da+now /)
|
2022-08-31 05:32:31 +03:00
|
|
|
?> ?=(^ riot)
|
|
|
|
=+ !<(=cass:clay q.r.u.riot)
|
|
|
|
(pure:m !>(ud.cass))
|
|
|
|
::
|
|
|
|
:: Listen for the next revision, and download it
|
|
|
|
::
|
|
|
|
++ next
|
|
|
|
^+ ..abet
|
|
|
|
%+ lard /next
|
2022-09-02 06:47:28 +03:00
|
|
|
=/ m (strand:rand ,vase)
|
|
|
|
;< =riot:clay bind:m (warp:strandio her sud ~ %sing %w ud+let /)
|
2022-08-31 05:32:31 +03:00
|
|
|
~> %slog.(fmt "downloading update for {here}")
|
2022-09-02 06:47:28 +03:00
|
|
|
;< =riot:clay bind:m (warp:strandio her sud ~ %sing %v ud+let /)
|
2022-08-31 05:32:31 +03:00
|
|
|
?> ?=(^ riot)
|
|
|
|
(pure:m !>(%done))
|
|
|
|
::
|
|
|
|
:: Main control router
|
|
|
|
::
|
|
|
|
:: NB: %next, %main, and %kids are conceptually a single state with a
|
|
|
|
:: single error handling mechanism (move on to the next version). We
|
|
|
|
:: cannot combine them into a single lard because when you update
|
|
|
|
:: main you may update spider, and in that case all active threads
|
|
|
|
:: are killed, which would stop us from continuing that thread.
|
|
|
|
:: Instead, we do the merges to syd and kid explicitly.
|
|
|
|
::
|
|
|
|
++ take
|
|
|
|
|= [=wire =sign-arvo]
|
|
|
|
^+ ..abet
|
|
|
|
?> ?=([@ *] wire)
|
|
|
|
?+ i.wire
|
|
|
|
~> %slog.(fmt "sync-bad-take {<wire>}")
|
|
|
|
..abet
|
|
|
|
%init
|
|
|
|
?. =(0 let)
|
|
|
|
~> %slog.(fmt "sync-bad-stage {<let>} {<wire>}")
|
|
|
|
..abet
|
|
|
|
?> ?=(%arow +<.sign-arvo)
|
|
|
|
?: ?=(%| -.p.sign-arvo)
|
|
|
|
~> %slog.(fmt "activation failed into {here}; retrying sync")
|
|
|
|
%- (slog p.p.sign-arvo)
|
|
|
|
init
|
|
|
|
:: Now that we know the revision, start main download loop
|
|
|
|
::
|
|
|
|
=. let !<(@ud q.p.p.sign-arvo)
|
|
|
|
next
|
|
|
|
::
|
|
|
|
%next
|
|
|
|
?> ?=(%arow +<.sign-arvo)
|
|
|
|
?: ?=(%| -.p.sign-arvo)
|
|
|
|
~> %slog.(fmt "download failed into {here}; retrying sync")
|
|
|
|
%- (slog p.p.sign-arvo)
|
|
|
|
init
|
|
|
|
::
|
|
|
|
~> %slog.(fmt "finished downloading update for {here}")
|
|
|
|
=. let +(let)
|
|
|
|
:: If nothing changed, just advance
|
|
|
|
::
|
2022-09-02 06:47:28 +03:00
|
|
|
?. (get-remote-diff our syd now [her sud (dec let)])
|
2022-08-31 05:32:31 +03:00
|
|
|
~> %slog.(fmt "remote is identical to {here}, skipping")
|
|
|
|
next
|
|
|
|
:: Else start merging, but also immediately start listening to
|
|
|
|
:: the next revision. Now, all errors should no-op -- we're
|
|
|
|
:: already waiting for the next revision.
|
|
|
|
::
|
|
|
|
=. ..abet (merg /main syd)
|
|
|
|
next
|
|
|
|
::
|
|
|
|
%main
|
|
|
|
?> ?=(%mere +<.sign-arvo)
|
|
|
|
:: This case is maintained by superstition. If you remove it,
|
|
|
|
:: carefully test that if the source ship is breached, we
|
|
|
|
:: correctly reset let to 0
|
|
|
|
::
|
|
|
|
?: ?=([%| %ali-unavailable *] p.sign-arvo)
|
|
|
|
=+ "kiln: merge into {here} failed, maybe because sunk; restarting"
|
|
|
|
%- (slog leaf/- p.p.sign-arvo)
|
|
|
|
init
|
|
|
|
?: ?=(%| -.p.sign-arvo)
|
|
|
|
=+ "kiln: merge into {here} failed, waiting for next revision"
|
|
|
|
%- (slog leaf/- p.p.sign-arvo)
|
|
|
|
..abet
|
2022-09-02 06:47:28 +03:00
|
|
|
~> %slog.(fmt "merge into {<syd>} succeeded")
|
2022-08-31 05:32:31 +03:00
|
|
|
:: If we have a kids desk parameter, merge into that
|
|
|
|
::
|
|
|
|
?~ kid
|
|
|
|
..abet
|
2022-09-02 06:47:28 +03:00
|
|
|
~> %slog.(fmt "kids merge into {<kid>}")
|
2022-08-31 05:32:31 +03:00
|
|
|
(merg /kids u.kid)
|
|
|
|
::
|
|
|
|
%kids
|
2022-09-02 06:47:28 +03:00
|
|
|
?> ?=(%mere +<.sign-arvo)
|
2022-08-31 05:32:31 +03:00
|
|
|
:: See %main for this case
|
|
|
|
::
|
2022-09-02 06:47:28 +03:00
|
|
|
?: ?=([%| %ali-unavailable *] p.sign-arvo)
|
|
|
|
=+ "kids merge to {<kid>} failed, maybe peer sunk; restarting"
|
2022-08-31 05:32:31 +03:00
|
|
|
~> %slog.(fmt -)
|
|
|
|
init
|
|
|
|
:: Just notify; we've already started listening for the next
|
|
|
|
:: version
|
|
|
|
::
|
2022-09-02 06:47:28 +03:00
|
|
|
?- -.p.sign-arvo
|
|
|
|
%& ~> %slog.(fmt "kids merge to {<kid>} succeeded")
|
2022-08-31 05:32:31 +03:00
|
|
|
..abet
|
2022-09-02 06:47:28 +03:00
|
|
|
%| ~> %slog.(fmt "kids merge to {<kid>} failed")
|
2022-08-31 05:32:31 +03:00
|
|
|
%- (slog p.p.sign-arvo)
|
|
|
|
..abet
|
|
|
|
==
|
|
|
|
==
|
|
|
|
--
|
2015-09-02 01:20:17 +03:00
|
|
|
++ auto
|
|
|
|
|= kiln-sync
|
2022-09-02 06:47:28 +03:00
|
|
|
=+ (~(gut by syn) [syd her sud] let=*@ud)
|
2015-09-02 01:20:17 +03:00
|
|
|
|%
|
|
|
|
++ abet
|
2019-11-14 21:39:50 +03:00
|
|
|
..auto(syn (~(put by syn) [syd her sud] let))
|
2015-06-18 02:44:00 +03:00
|
|
|
::
|
2015-09-02 01:20:17 +03:00
|
|
|
++ blab
|
2020-11-25 23:22:55 +03:00
|
|
|
|= new=(list card:agent:gall)
|
2015-09-02 01:20:17 +03:00
|
|
|
^+ +>
|
|
|
|
+>.$(moz (welp new moz))
|
2015-05-12 03:31:37 +03:00
|
|
|
::
|
2019-11-14 21:39:50 +03:00
|
|
|
++ warp
|
|
|
|
|= [=wire =ship =riff]
|
|
|
|
(blab [%pass wire %arvo %c [%warp ship riff]] ~)
|
|
|
|
::
|
2015-09-02 01:20:17 +03:00
|
|
|
++ spam |*(* %_(+> ..auto (^spam +<)))
|
|
|
|
++ stop
|
|
|
|
=> (spam (render "ended autosync" sud her syd) ~)
|
2018-12-13 21:23:26 +03:00
|
|
|
=/ =wire /kiln/sync/[syd]/(scot %p her)/[sud]
|
2019-11-14 21:39:50 +03:00
|
|
|
(warp wire her sud ~)
|
2022-09-02 06:47:28 +03:00
|
|
|
:: XX duplicate of start-sync? see |track
|
2022-08-26 08:57:20 +03:00
|
|
|
::
|
2022-09-02 06:47:28 +03:00
|
|
|
++ start-track
|
|
|
|
=> (spam (render "activated track" sud her syd) ~)
|
|
|
|
=. let 1
|
|
|
|
=/ =wire /kiln/sync/[syd]/(scot %p her)/[sud]
|
|
|
|
(warp wire her sud `[%sing %y ud+let /])
|
2016-01-07 01:08:46 +03:00
|
|
|
::
|
|
|
|
++ start-sync
|
2019-04-30 20:40:38 +03:00
|
|
|
=> (spam (render "finding ship and desk" sud her syd) ~)
|
|
|
|
=/ =wire /kiln/find-ship/[syd]/(scot %p her)/[sud]
|
2019-11-14 21:39:50 +03:00
|
|
|
(warp wire her sud `[%sing %y ud+1 /])
|
2019-04-30 20:40:38 +03:00
|
|
|
::
|
|
|
|
++ take-find-ship
|
|
|
|
|= rot=riot
|
2019-05-14 00:45:53 +03:00
|
|
|
=> (spam (render "activated sync" sud her syd) ~)
|
2018-12-04 09:59:41 +03:00
|
|
|
=/ =wire /kiln/sync/[syd]/(scot %p her)/[sud]
|
2019-11-14 21:39:50 +03:00
|
|
|
(warp wire her sud `[%sing %w [%da now] /])
|
2015-05-12 03:31:37 +03:00
|
|
|
::
|
2015-09-02 01:20:17 +03:00
|
|
|
++ writ
|
2018-12-04 09:59:41 +03:00
|
|
|
|= rot=riot
|
2015-09-02 01:20:17 +03:00
|
|
|
?~ rot
|
2019-01-31 05:48:30 +03:00
|
|
|
=. +>.$
|
|
|
|
%^ spam
|
|
|
|
leaf+"sync cancelled, retrying"
|
|
|
|
(render "on sync" sud her syd)
|
|
|
|
~
|
|
|
|
start-sync
|
2020-11-25 22:39:13 +03:00
|
|
|
=. let ?. ?=(%w p.p.u.rot) let ud:;;(cass:clay q.q.r.u.rot)
|
2019-11-14 21:39:50 +03:00
|
|
|
=/ =wire /kiln/sync/merg/[syd]/(scot %p her)/[sud]
|
2022-09-02 06:47:28 +03:00
|
|
|
:: germ: merge mode for sync merges
|
|
|
|
::
|
|
|
|
:: Initial merges from any source must use the %init germ.
|
|
|
|
:: Subsequent merges may use any germ, but if the source is
|
|
|
|
:: a remote ship with which we have not yet merged, we won't
|
|
|
|
:: share a merge-base commit and all germs but %only-that will
|
|
|
|
:: fail.
|
|
|
|
::
|
|
|
|
:: We want to always use %only-that for the first remote merge.
|
|
|
|
:: But we also want local syncs (%base to %base or %kids) to
|
|
|
|
:: succeed after that first remote sync. To accomplish both we
|
|
|
|
:: simply use %only-that for the first three sync merges. (The
|
|
|
|
:: first two are from the pill.)
|
|
|
|
::
|
|
|
|
=/ =germ
|
|
|
|
=/ =cass
|
|
|
|
.^(cass:clay %cw /(scot %p our)/[syd]/(scot %da now))
|
|
|
|
?: =(0 ud.cass)
|
|
|
|
%init
|
|
|
|
?:((gth 2 ud.cass) %only-that %mate)
|
2018-12-04 21:11:43 +03:00
|
|
|
=< %- spam
|
|
|
|
?: =(our her) ~
|
|
|
|
[(render "beginning sync" sud her syd) ~]
|
2019-11-14 21:39:50 +03:00
|
|
|
(blab [%pass wire %arvo %c [%merg syd her sud ud+let germ]] ~)
|
2015-06-04 00:18:13 +03:00
|
|
|
::
|
2015-09-02 01:20:17 +03:00
|
|
|
++ mere
|
2018-12-04 09:59:41 +03:00
|
|
|
|= mes=(each (set path) (pair term tang))
|
2020-05-22 09:05:42 +03:00
|
|
|
?: ?=([%| %ali-unavailable *] mes)
|
2019-02-02 00:46:09 +03:00
|
|
|
=. +>.$
|
|
|
|
%^ spam
|
2019-05-03 04:06:31 +03:00
|
|
|
leaf+"merge cancelled, maybe because sunk; restarting"
|
2019-02-02 00:46:09 +03:00
|
|
|
(render "on sync" sud her syd)
|
|
|
|
~
|
|
|
|
start-sync:stop
|
2015-09-02 01:20:17 +03:00
|
|
|
=. let +(let)
|
|
|
|
=. +>.$
|
|
|
|
%- spam
|
2018-03-19 06:54:47 +03:00
|
|
|
?: ?=(%& -.mes)
|
2015-09-02 01:20:17 +03:00
|
|
|
[(render "sync succeeded" sud her syd) ~]
|
|
|
|
?+ p.p.mes
|
|
|
|
:* (render "sync failed" sud her syd)
|
2015-12-21 00:16:39 +03:00
|
|
|
leaf+"please manually merge the desks with"
|
|
|
|
leaf+"|merge %{(trip syd)} {(scow %p her)} %{(trip sud)}"
|
|
|
|
leaf+""
|
|
|
|
leaf+"error code: {<p.p.mes>}"
|
2015-09-02 01:20:17 +03:00
|
|
|
q.p.mes
|
|
|
|
==
|
|
|
|
::
|
2020-11-25 22:39:13 +03:00
|
|
|
%no-ali-disc
|
2016-12-16 09:34:01 +03:00
|
|
|
:~ (render "sync activated" sud her syd)
|
2015-12-21 00:16:39 +03:00
|
|
|
leaf+"note: blank desk {<sud>} on {<her>}"
|
2015-09-02 01:20:17 +03:00
|
|
|
==
|
|
|
|
==
|
2018-12-04 09:59:41 +03:00
|
|
|
=/ =wire /kiln/sync/[syd]/(scot %p her)/[sud]
|
2019-11-14 21:39:50 +03:00
|
|
|
(warp wire her sud `[%sing %y ud+let /])
|
2015-09-02 01:20:17 +03:00
|
|
|
--
|
|
|
|
::
|
|
|
|
++ work :: state machine
|
2020-11-25 23:22:55 +03:00
|
|
|
|= syd=desk
|
2019-12-18 03:48:08 +03:00
|
|
|
=/ ,per-desk
|
2019-06-30 15:50:00 +03:00
|
|
|
%+ ~(gut by rem) syd
|
2017-11-30 00:29:35 +03:00
|
|
|
=+ *per-desk
|
2015-09-02 01:20:17 +03:00
|
|
|
%_(- cas [%da now])
|
|
|
|
|%
|
|
|
|
++ abet :: resolve
|
|
|
|
..work(rem (~(put by rem) syd auto gem her sud cas))
|
2015-05-28 05:46:58 +03:00
|
|
|
::
|
2015-09-02 01:20:17 +03:00
|
|
|
++ blab
|
2020-11-25 23:22:55 +03:00
|
|
|
|= new=(list card:agent:gall)
|
2015-09-02 01:20:17 +03:00
|
|
|
^+ +>
|
|
|
|
+>.$(moz (welp new moz))
|
2015-05-28 05:46:58 +03:00
|
|
|
::
|
2015-09-02 01:20:17 +03:00
|
|
|
++ win . :: successful poke
|
|
|
|
++ lose
|
|
|
|
^+ .
|
|
|
|
~| %kiln-work-fail
|
|
|
|
.
|
2015-06-24 21:30:28 +03:00
|
|
|
::
|
2016-12-16 09:34:01 +03:00
|
|
|
++ perform ::
|
2015-09-02 01:20:17 +03:00
|
|
|
^+ .
|
2020-08-28 10:24:25 +03:00
|
|
|
?< ?=(%this gem)
|
|
|
|
?< ?=(%that gem)
|
2019-11-14 21:39:50 +03:00
|
|
|
(blab [%pass /kiln/[syd] %arvo %c [%merg syd her sud cas gem]] ~)
|
2015-05-26 04:20:45 +03:00
|
|
|
::
|
2015-09-02 01:20:17 +03:00
|
|
|
++ fancy-merge :: send to self
|
2020-11-26 17:09:31 +03:00
|
|
|
|= [syd=desk her=@p sud=desk gem=?(%auto germ)]
|
2015-09-02 01:20:17 +03:00
|
|
|
^+ +>
|
2019-11-14 21:39:50 +03:00
|
|
|
=/ =cage [%kiln-merge !>([syd her sud cas gem])]
|
2015-09-02 01:20:17 +03:00
|
|
|
%- blab :_ ~
|
2019-11-14 21:39:50 +03:00
|
|
|
[%pass /kiln/fancy/[^syd] %agent [our %hood] %poke cage]
|
2015-05-26 04:20:45 +03:00
|
|
|
::
|
2015-09-02 01:20:17 +03:00
|
|
|
++ spam ::|=(tang ((slog +<) ..spam))
|
|
|
|
|*(* +>(..work (^spam +<)))
|
|
|
|
++ merge
|
2020-11-26 17:09:31 +03:00
|
|
|
|= [her=@p sud=@tas cas=case gim=?(%auto germ)]
|
2015-09-02 01:20:17 +03:00
|
|
|
^+ +>
|
2020-11-25 22:39:13 +03:00
|
|
|
?. ?=(%auto gim)
|
2016-01-07 01:08:46 +03:00
|
|
|
perform(auto |, gem gim, her her, cas cas, sud sud)
|
2018-05-03 00:38:01 +03:00
|
|
|
?: =(0 ud:.^(cass:clay %cw /(scot %p our)/[syd]/(scot %da now)))
|
2015-09-02 01:20:17 +03:00
|
|
|
=> $(gim %init)
|
|
|
|
.(auto &)
|
|
|
|
=> $(gim %fine)
|
|
|
|
.(auto &)
|
2015-05-26 04:20:45 +03:00
|
|
|
::
|
2015-09-02 01:20:17 +03:00
|
|
|
++ coup-fancy
|
2020-11-25 23:22:55 +03:00
|
|
|
|= saw=(unit tang)
|
2015-09-02 01:20:17 +03:00
|
|
|
?~ saw
|
2020-05-14 05:28:04 +03:00
|
|
|
+>
|
2015-09-02 01:20:17 +03:00
|
|
|
=+ :- "failed to set up conflict resolution scratch space"
|
|
|
|
"I'm out of ideas"
|
2015-12-21 00:16:39 +03:00
|
|
|
lose:(spam leaf+-< leaf+-> u.saw)
|
2015-05-26 04:20:45 +03:00
|
|
|
::
|
2015-09-02 01:20:17 +03:00
|
|
|
++ mere
|
2020-11-25 23:22:55 +03:00
|
|
|
|= are=(each (set path) (pair term tang))
|
2015-09-02 01:20:17 +03:00
|
|
|
^+ +>
|
|
|
|
?: =(%meld gem)
|
2018-03-19 06:54:47 +03:00
|
|
|
?: ?=(%& -.are)
|
2015-09-02 01:20:17 +03:00
|
|
|
?. auto
|
|
|
|
=+ "merged with strategy {<gem>}"
|
2015-12-21 00:16:39 +03:00
|
|
|
win:(spam leaf+- ?~(p.are ~ [>`(set path)`p.are< ~]))
|
2015-09-02 01:20:17 +03:00
|
|
|
:: ~? > =(~ p.are) [%mere-no-conflict syd]
|
2020-05-14 05:28:04 +03:00
|
|
|
=> .(+>.$ (spam leaf+"mashing conflicts" ~))
|
2015-09-02 01:20:17 +03:00
|
|
|
=+ tic=(cat 3 syd '-scratch')
|
2020-05-14 05:28:04 +03:00
|
|
|
=/ notations=(list [path (unit [mark vase])])
|
|
|
|
%+ turn ~(tap in p.are)
|
|
|
|
|= =path
|
|
|
|
=/ =mark -:(flop path)
|
|
|
|
=/ =dais .^(dais %cb /(scot %p our)/[syd]/(scot cas)/[mark])
|
|
|
|
=/ base .^(vase %cr (weld /(scot %p our)/[tic]/(scot cas) path))
|
|
|
|
=/ ali .^(vase %cr (weld /(scot %p her)/[sud]/(scot cas) path))
|
|
|
|
=/ bob .^(vase %cr (weld /(scot %p our)/[syd]/(scot cas) path))
|
|
|
|
=/ ali-dif (~(diff dais base) ali)
|
|
|
|
=/ bob-dif (~(diff dais base) bob)
|
|
|
|
=/ mash (~(mash dais base) [her sud ali-dif] [our syd bob-dif])
|
|
|
|
:- path
|
|
|
|
?~ mash
|
|
|
|
~
|
|
|
|
`[mark (~(pact dais base) u.mash)]
|
|
|
|
=/ [annotated=(list [path *]) unnotated=(list [path *])]
|
|
|
|
(skid notations |=([* v=*] ?=(^ v)))
|
|
|
|
=/ tic=desk (cat 3 syd '-scratch')
|
|
|
|
=/ tan=(list tank)
|
|
|
|
%- zing
|
|
|
|
^- (list (list tank))
|
|
|
|
:~ %- tape-to-tanks
|
|
|
|
"""
|
|
|
|
done setting up scratch space in {<[tic]>}
|
|
|
|
please resolve the following conflicts and run
|
|
|
|
|merge {<syd>} our {<[tic]>}
|
|
|
|
"""
|
|
|
|
%^ tanks-if-any
|
|
|
|
"annotated conflicts in:" (turn annotated head)
|
|
|
|
""
|
|
|
|
%^ tanks-if-any
|
|
|
|
"unannotated conflicts in:" (turn unnotated head)
|
|
|
|
"""
|
|
|
|
some conflicts could not be annotated.
|
|
|
|
for these, the scratch space contains
|
|
|
|
the most recent common ancestor of the
|
|
|
|
conflicting content.
|
|
|
|
"""
|
|
|
|
==
|
|
|
|
=< win
|
|
|
|
%- blab:(spam tan)
|
|
|
|
:_ ~
|
|
|
|
:* %pass /kiln/[syd] %arvo %c
|
|
|
|
%info
|
|
|
|
tic %&
|
|
|
|
%+ murn notations
|
|
|
|
|= [=path dif=(unit [=mark =vase])]
|
|
|
|
^- (unit [^path miso])
|
|
|
|
?~ dif
|
|
|
|
~
|
|
|
|
`[path %mut mark.u.dif vase.u.dif]
|
|
|
|
==
|
2015-09-02 01:20:17 +03:00
|
|
|
=+ "failed to merge with strategy meld"
|
2015-12-21 00:16:39 +03:00
|
|
|
lose:(spam leaf+- >p.p.are< q.p.are)
|
2018-03-19 06:54:47 +03:00
|
|
|
?: ?=(%& -.are)
|
2015-09-02 01:20:17 +03:00
|
|
|
=+ "merged with strategy {<gem>}"
|
2015-12-21 00:16:39 +03:00
|
|
|
win:(spam leaf+- ?~(p.are ~ [>`(set path)`p.are< ~]))
|
2015-09-02 01:20:17 +03:00
|
|
|
?. auto
|
|
|
|
=+ "failed to merge with strategy {<gem>}"
|
2015-12-21 00:16:39 +03:00
|
|
|
lose:(spam leaf+- >p.p.are< q.p.are)
|
2015-09-02 01:20:17 +03:00
|
|
|
?+ gem
|
2015-12-21 00:16:39 +03:00
|
|
|
(spam leaf+"strange auto" >gem< ~)
|
2015-09-02 01:20:17 +03:00
|
|
|
::
|
2020-11-25 22:39:13 +03:00
|
|
|
%init
|
2015-09-02 01:20:17 +03:00
|
|
|
=+ :- "auto merge failed on strategy %init"
|
2015-05-12 03:31:37 +03:00
|
|
|
"I'm out of ideas"
|
2015-12-21 00:16:39 +03:00
|
|
|
lose:(spam leaf+-< leaf+-> [>p.p.are< q.p.are])
|
2015-05-12 03:31:37 +03:00
|
|
|
::
|
2020-11-25 22:39:13 +03:00
|
|
|
%fine
|
|
|
|
?. ?=(%bad-fine-merge p.p.are)
|
2015-09-02 01:20:17 +03:00
|
|
|
=+ "auto merge failed on strategy %fine"
|
2015-12-21 00:16:39 +03:00
|
|
|
lose:(spam leaf+- >p.p.are< q.p.are)
|
|
|
|
=> (spam leaf+"%fine merge failed, trying %meet" ~)
|
2015-09-02 01:20:17 +03:00
|
|
|
perform(gem %meet)
|
2015-07-28 01:39:36 +03:00
|
|
|
::
|
2020-11-25 22:39:13 +03:00
|
|
|
%meet
|
|
|
|
?. ?=(%meet-conflict p.p.are)
|
2015-09-02 01:20:17 +03:00
|
|
|
=+ "auto merge failed on strategy %meet"
|
2015-12-21 00:16:39 +03:00
|
|
|
lose:(spam leaf+- >p.p.are< q.p.are)
|
|
|
|
=> (spam leaf+"%meet merge failed, trying %mate" ~)
|
2015-09-02 01:20:17 +03:00
|
|
|
perform(gem %mate)
|
2015-07-28 01:39:36 +03:00
|
|
|
::
|
2020-11-25 22:39:13 +03:00
|
|
|
%mate
|
|
|
|
?. ?=(%mate-conflict p.p.are)
|
2015-09-02 01:20:17 +03:00
|
|
|
=+ "auto merge failed on strategy %mate"
|
2015-12-21 00:16:39 +03:00
|
|
|
lose:(spam leaf+- >p.p.are< q.p.are)
|
2015-09-02 01:20:17 +03:00
|
|
|
=> .(gem %meld)
|
|
|
|
=+ tic=(cat 3 syd '-scratch')
|
|
|
|
=> =+ :- "%mate merge failed with conflicts,"
|
|
|
|
"setting up scratch space at %{(trip tic)}"
|
2015-12-21 00:16:39 +03:00
|
|
|
[tic=tic (spam leaf+-< leaf+-> q.p.are)]
|
2020-05-14 05:28:04 +03:00
|
|
|
=. ..mere (fancy-merge tic our syd %init)
|
|
|
|
=> (spam leaf+"%melding %{(trip sud)} into scratch space" ~)
|
|
|
|
%- blab :_ ~
|
2020-08-28 10:24:25 +03:00
|
|
|
?< ?=(%this gem)
|
|
|
|
?< ?=(%that gem)
|
2020-05-14 05:28:04 +03:00
|
|
|
=/ note [%merg (cat 3 syd '-scratch') her sud cas gem]
|
|
|
|
[%pass /kiln/[syd] %arvo %c note]
|
2015-09-02 01:20:17 +03:00
|
|
|
==
|
|
|
|
::
|
|
|
|
++ tape-to-tanks
|
2020-11-25 23:22:55 +03:00
|
|
|
|= a=tape ^- (list tank)
|
|
|
|
(scan a (more (just '\0a') (cook |=(a=tape leaf+a) (star prn))))
|
2015-09-02 01:20:17 +03:00
|
|
|
::
|
|
|
|
++ tanks-if-any
|
2020-11-26 17:09:31 +03:00
|
|
|
|= [a=tape b=(list path) c=tape] ^- (list tank)
|
2015-09-02 01:20:17 +03:00
|
|
|
?: =(~ b) ~
|
|
|
|
(welp (tape-to-tanks "\0a{c}{a}") >b< ~)
|
2015-05-12 03:31:37 +03:00
|
|
|
--
|
|
|
|
--
|