clay: port -merge to fusion

This commit is contained in:
Philip Monk 2020-04-29 17:38:24 -07:00
parent 6120eeecc0
commit 65766a73e2
No known key found for this signature in database
GPG Key ID: B66E1F02604E44EC
5 changed files with 43 additions and 197 deletions

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bfdea141b5c28a037952fa06fbe350090b58eb4bd3c8fd7124d75a49ccd50d07
size 13151591
oid sha256:dfefbd6a561182f85a68c3a26a128168d7a70c17df0be5224bf2c8560a86ecbe
size 13157380

View File

@ -1,80 +0,0 @@
/- spider
/+ strandio
=, strand=strand:spider
=, clay
|%
:: Produce an ankh
::
++ checkout
|= [=ankh deletes=(set path) changes=(map path cage)]
^- ^ankh
:: Delete
::
=. ankh
=/ dels ~(tap in deletes)
|- ^- ^ankh
=* outer-loop $
?~ dels
ankh
=. ankh
|- ^- ^ankh
=* inner-loop $
?~ i.dels
ankh(fil ~)
%= ankh
dir
%+ ~(put by dir.ankh) i.i.dels
%= inner-loop
i.dels t.i.dels
ankh (~(gut by dir.ankh) i.i.dels *^ankh)
==
==
outer-loop(dels t.dels)
:: Add/change
::
=/ cans=(list [=path =cage]) ~(tap by changes)
|- ^- ^ankh
=* outer-loop $
?~ cans
ankh
=. ankh
=/ orig-path path.i.cans
|- ^- ^ankh
=* inner-loop $
?~ path.i.cans
%= ankh
fil
`[(page-to-lobe [p q.q]:cage.i.cans) cage.i.cans]
==
%= ankh
dir
%+ ~(put by dir.ankh) i.path.i.cans
%= inner-loop
path.i.cans t.path.i.cans
ankh (~(gut by dir.ankh) i.path.i.cans *^ankh)
==
==
outer-loop(cans t.cans)
:: Produce a mime cache
::
++ checkout-cache
|= [=ship =desk deletes=(set path) changes=(map path cage)]
=/ m (strand ,(map path (unit mime)))
^- form:m
;< our=@p bind:m get-our:strandio
=/ mim-builds=(map path schematic:ford)
%- ~(run by changes)
|= =cage
[%cast [our desk] %mime %$ cage]
;< mim-results=(map path cage) bind:m (build-cages:strandio mim-builds)
=/ can-mim=(map path (unit mime))
%- ~(run by mim-results)
|= =cage
?> ?=(%mime p.cage)
`!<(mime q.cage)
=/ del-mim=(map path (unit mime))
(malt (turn ~(tap in deletes) |=(=path [path ~])))
=/ new-mim=(map path (unit mime))
(~(uni by del-mim) can-mim)
(pure:m new-mim)
--

View File

@ -155,7 +155,7 @@
cez=(map @ta crew) :: permission groups
cue=(qeu [=duct =task:able]) :: queued requests
act=active-write :: active write
pud=(unit [=desk =yuki]) :: pending update
pud=(unit [=desk =yoki]) :: pending update
== ::
::
:: Currently active write
@ -3473,7 +3473,7 @@
?> ?=(~ deletes)
=/ data=(map path (each page lobe))
(~(run by changes) |=(=cage &+[p q.q]:cage))
(park | [~ data] *rang)
(park | &+[~ data] *rang)
::
=/ parent-tako=tako (aeon-to-tako:ze let.dom)
=/ data=(map path (each page lobe))
@ -3488,7 +3488,7 @@
(~(run by changes) |=(=cage &+[p q.q]:cage))
::
=/ =yuki [~[parent-tako] data]
(park | yuki *rang)
(park | &+yuki *rang)
::
:: Unix commit
::
@ -3524,17 +3524,22 @@
++ park
=/ check-sane |
|^
|= [updated=? =yuki =rang]
|= [updated=? =yoki =rang]
^+ ..park
=: hut.ran (~(uni by hut.rang) hut.ran)
lat.ran (~(uni by lat.rang) lat.ran)
==
=/ new-data=(map path (each page lobe))
?- -.yoki
%& q.p.yoki
%| (~(run by q.p.yoki) |=(=lobe |+lobe))
==
=/ [deletes=(set path) changes=(map path (each page lobe))]
=/ previous-yaki
?: =(0 let.dom)
*yaki
(aeon-to-yaki:ze let.dom)
(get-changes q.previous-yaki q.yuki)
(get-changes q.previous-yaki new-data)
~| [from=let.dom deletes=deletes changes=~(key by changes)]
::
:: promote ford cache
@ -3559,13 +3564,13 @@
|= [=path =lobe =cage]
[lobe %direct lobe [p q.q]:cage]
=/ data=(map path lobe)
%- ~(urn by q.yuki)
%- ~(urn by new-data)
|= [=path value=(each page lobe)]
?- -.value
%| p.value
%& lobe:(~(got by change-cages) path)
==
=/ =yaki (make-yaki p.yuki data now)
=/ =yaki (make-yaki p.p.yoki data now)
=: let.dom +(let.dom)
hit.dom (~(put by hit.dom) +(let.dom) r.yaki)
hut.ran (~(put by hut.ran) r.yaki yaki)
@ -3908,7 +3913,7 @@
:: Delay current update until sys update is complete
::
++ sys-update
|= [=ford=args:ford:fusion =yuki changes=(map path (each page lobe))]
|= [=ford=args:ford:fusion =yoki changes=(map path (each page lobe))]
^+ ..park
=/ updates (need-sys-update changes)
:: Don't save ford cache so it gets properly handled when we
@ -3917,7 +3922,7 @@
=^ updates-cages=(map path [lobe cage]) ford-cache.ford-args
(checkout-changes ford-args updates)
?> =(~ pud)
=. pud `[syd yuki]
=. pud `[syd yoki]
|^ ?: (~(has by updates) /sys/hoon/hoon)
reset
?: (~(has by updates) /sys/arvo/hoon)
@ -5480,15 +5485,15 @@
%park
=^ mos ruf
=/ den ((de our now ski hen ruf) our des.req)
abet:(park:den | [yuk ran]:req)
abet:(park:den | [yok ran]:req)
[mos ..^$]
::
%pork
=/ [syd=desk =yuki] (need pud.ruf)
=/ [syd=desk =yoki] (need pud.ruf)
=. pud.ruf ~
=^ mos ruf
=/ den ((de our now ski hen ruf) our syd)
abet:(park:den & yuki *rang)
abet:(park:den & yoki *rang)
[mos ..^$]
::
%perm

View File

@ -567,7 +567,7 @@
{$mont des/desk bem/beam} :: mount to unix
{$dirk des/desk} :: mark mount dirty
{$ogre pot/$@(desk beam)} :: delete mount point
{$park des/desk yuk/yuki ran/rang} :: plumbing commit
{$park des/desk yok/yoki ran/rang} :: synchronous commit
{$perm des/desk pax/path rit/rite} :: change permissions
{$pork ~} :: resume commit
$>(%trim vane-task) :: trim state
@ -693,7 +693,8 @@
== ::
++ urge |*(a/mold (list (unce a))) :: list change
++ whom (each ship @ta) :: ship or named crew
++ yuki :: commit
++ yoki (each yuki yaki) :: commit
++ yuki :: proto-commit
$: p/(list tako) :: parents
q/(map path (each page lobe)) :: namespace
== ::

View File

@ -1,7 +1,7 @@
:: Merge second desk into first
::
/- spider
/+ strandio, clay-commit
/+ strandio
=, strand=strand:spider
=, clay
^- thread:spider
@ -10,14 +10,16 @@
=/ m (strand ,vase)
^- form:m
;< our=@p bind:m get-our:strandio
;< wen=@da bind:m get-time:strandio
|^
;< now=@da bind:m get-time:strandio
::
:: Fetch current states
::
=/ start-path /(scot %p our)/[bob-desk]/(scot %da wen)
=/ start-path /(scot %p our)/[bob-desk]/(scot %da now)
;< =ali=riot:clay bind:m
(warp:strandio ali-ship ali-desk `[%sing %v da+wen /])
(warp:strandio ali-ship ali-desk `[%sing %v da+now /])
::
;< wen=@da bind:m get-time:strandio
|^
?> ?=(^ ali-riot)
=+ !<(=ali=dome q.r.u.ali-riot)
=/ ali-tako=tako (~(got by hit.ali-dome) let.ali-dome)
@ -32,13 +34,8 @@
;< =merge-result bind:m (merge ali-yaki bob-yaki)
?~ merge-result
(pure:m !>(~))
=/ =rang
[(malt [r .]:new.u.merge-result ~) lat.u.merge-result]
;< [=ankh changes=(map path cage)] bind:m
(checkout bob-dome new.u.merge-result [deletes changes]:u.merge-result)
;< mim=(map path (unit mime)) bind:m
(checkout-cache:clay-commit ali-ship ali-desk deletes.u.merge-result changes)
=/ args [bob-desk r.new.u.merge-result rang ankh mim]
=/ =rang [~ lat.u.merge-result]
=/ args [bob-desk new.u.merge-result rang]
;< ~ bind:m
(send-raw-card:strandio %pass /merg/[bob-desk]/[ali-desk] %arvo %c %park args)
(pure:m !>(~))
@ -46,10 +43,7 @@
+$ merge-result
%- unit
$: conflicts=(set path)
bop=(map path cage)
new=yaki
deletes=(set path)
changes=(set path)
new=yoki
lat=(map lobe blob)
==
::
@ -57,19 +51,12 @@
|= [=ali=yaki bob-yaki=(unit yaki)]
=/ m (strand ,merge-result)
^- form:m
?: ?=(%init germ)
::
:: If this is an %init merge, we set the ali's commit to be bob's.
::
%: pure:m
~
conflicts=~
bop=~
new=ali-yaki
deletes=~
changes=~(key by q.ali-yaki)
lat=~
==
?: ?=(%init germ)
(pure:m ~ conflicts=~ new=|+ali-yaki lat=~)
::
=/ bob-yaki (need bob-yaki)
|^
?- germ
@ -85,14 +72,10 @@
(pure:m ~)
?: (~(has in (reachable-takos r.bob-yaki)) r.ali-yaki)
(pure:m ~)
=/ new-yaki (make-yaki [r.bob-yaki r.ali-yaki ~] q.bob-yaki wen)
%: pure:m
~
conflicts=~
bop=~
new=new-yaki
deletes=~
changes=~
new=&+[[r.bob-yaki r.ali-yaki ~] (to-yuki q.bob-yaki)]
lat=~
==
::
@ -103,14 +86,10 @@
%that
?: =(r.ali-yaki r.bob-yaki)
(pure:m ~)
=/ new-yaki (make-yaki [r.bob-yaki r.ali-yaki ~] q.ali-yaki wen)
%: pure:m
~
conflicts=~
bop=~
new=new-yaki
deletes=get-deletes
changes=get-changes
new=&+[[r.bob-yaki r.ali-yaki ~] (to-yuki q.ali-yaki)]
lat=~
==
::
@ -131,15 +110,7 @@
%^ error %bad-fine-merge
leaf+"tried fast-forward but is not ancestor or descendant"
~
%: pure:m
~
conflicts=~
bop=~
new=ali-yaki
deletes=get-deletes
changes=get-changes
lat=~
==
(pure:m ~ conflicts=~ new=|+ali-yaki lat=~)
::
?(%meet %mate %meld)
?: =(r.ali-yaki r.bob-yaki)
@ -187,10 +158,7 @@
%: pure:m
~
conflicts=~
bop=~
new=(make-yaki [r.bob-yaki r.ali-yaki ~] hat wen)
deletes=get-deletes
changes=get-changes
new=&+[[r.bob-yaki r.ali-yaki ~] (to-yuki hat)]
lat=~
==
==
@ -208,28 +176,6 @@
takos :: hence skip
(~(uni in takos) ^$(tak q)) :: otherwise traverse
::
++ get-deletes
%- silt ^- (list path)
%+ murn ~(tap by (~(uni by q.bob-yaki) q.ali-yaki))
|= [=path =lobe]
^- (unit ^path)
=/ a (~(get by q.ali-yaki) path)
=/ b (~(get by q.bob-yaki) path)
?: |(=(a b) !=(~ a))
~
`path
::
++ get-changes
%- silt ^- (list path)
%+ murn ~(tap by (~(uni by q.bob-yaki) q.ali-yaki))
|= [=path =lobe]
^- (unit ^path)
=/ a (~(get by q.ali-yaki) path)
=/ b (~(get by q.bob-yaki) path)
?: |(=(a b) =(~ a))
~
`path
::
:: Find the most recent common ancestor(s).
::
:: Pretty sure this could be a lot more efficient.
@ -308,37 +254,11 @@
~
`[pax ~]
==
--
::
++ checkout
|^
|= [=bob=dome =yaki deletes=(set path) changes=(set path)]
=/ m (strand ,[ankh (map path cage)])
^- form:m
=/ start-path /(scot %p our)/[bob-desk]/(scot %da wen)
=/ builds
%- malt
%+ turn ~(tap in changes)
|= =path
[path (lobe-to-schematic start-path (~(got by q.yaki) path))]
;< results=(map path cage) bind:m (build-cages:strandio builds)
(pure:m (checkout:clay-commit ank.bob-dome deletes results) results)
::
++ lobe-to-schematic
|= [=start=path =lobe]
^- schematic:ford
=+ .^(=blob %cs (weld start-path /blob/(scot %uv lobe)))
=/ =disc:ford [ali-ship ali-desk]
?- -.blob
%direct (page-to-schematic disc q.blob)
%delta [%pact disc $(lobe q.q.blob) (page-to-schematic disc r.blob)]
==
::
++ page-to-schematic
|= [=disc:ford =page]
?. ?=(%hoon p.page)
[%volt disc page]
[%$ p.page [%atom %t ~] q.page]
++ to-yuki
|= m=(map path lobe)
^- (map path (each page lobe))
(~(run by m) |=(=lobe |+lobe))
--
::
++ error