1# Review lifecycles land in reviews (created, each revision, approvals,2# deleted) and review_ends: landed by ssh land at its logged deletion,3# closed when deleted unlanded, landed when main took its tip while the4# branch stayed (at the time the lake saw it); an open one hasn't ended.5. "$(dirname "$0")/../lib.sh"6user dami7user ana8repo dami/greet9clone dami dami/greet "$T/w/dami"10at "$T/w/dami" commit "first"11push_as dami "$T/w/dami" origin main12clone ana dami/greet "$T/w/ana"13t0=$T_NOW14# #1: two revisions, an approval, landed by ssh land two hours in.15at "$T/w/ana" git switch -q -c ana/feature16at "$T/w/ana" commit "feature"17push_as ana "$T/w/ana" origin ana/feature18tick 180019at "$T/w/ana" git commit -q --amend -m "feature, again"20push_as ana "$T/w/ana" -f origin ana/feature21tick 180022ok ssh_as dami approve dami/greet 123tick 360024ok ssh_as dami land dami/greet 125# #2: pushed, then deleted.26at "$T/w/ana" git fetch -q origin27at "$T/w/ana" git switch -q -c ana/abandon origin/main28at "$T/w/ana" commit "abandon"29push_as ana "$T/w/ana" origin ana/abandon30tick 60031push_as ana "$T/w/ana" origin :ana/abandon32# #3: main is pushed to its tip and the branch stays.33at "$T/w/dami" git pull -q origin main34at "$T/w/dami" git switch -q -c dami/kept35at "$T/w/dami" commit "kept"36push_as dami "$T/w/dami" origin dami/kept37tick 90038push_as dami "$T/w/dami" origin dami/kept:main39# #4: still open.40at "$T/w/dami" commit "open"41push_as dami "$T/w/dami" origin HEAD:dami/open42tick 6043ok forge lake44has "$T_LOG" ', 3 ended,'45eq "$(lq "SELECT string_agg(review || ':' || kind, ' ' ORDER BY review, ts, kind) FROM reviews")" \46 "1:created 1:rev 1:rev 1:approve 1:deleted 2:created 2:rev 2:deleted 3:created 3:rev 4:created 4:rev"47eq "$(lq "SELECT string_agg(rev::VARCHAR, ' ' ORDER BY rev) FROM reviews WHERE review = 1 AND kind IN ('rev', 'approve')")" "1 2 2"48eq "$(lq "SELECT \"user\" FROM reviews WHERE review = 1 AND kind = 'approve'")" "dami"49eq "$(lq "SELECT string_agg(review || ':' || kind || ':' || observed, ' ' ORDER BY review) FROM review_ends")" "1:landed:false 2:closed:false 3:landed:true"50# Time to land: from created to the deletion ssh land logged.51eq "$(lq "SELECT (epoch(e.ts) - epoch(r.ts))::INT FROM review_ends e JOIN reviews r USING (repo, review) WHERE review = 1 AND r.kind = 'created'")" 720052eq "$(lq "SELECT epoch(ts)::BIGINT FROM review_ends WHERE review = 1")" "$((t0 + 7200))"53eq "$(lq "SELECT epoch(ts)::BIGINT FROM review_ends WHERE review = 3")" "$T_NOW"54# An ended review stays ended as it was; the open one ends when it lands.55tick 60056ok ssh_as dami land dami/greet 457ok forge lake58eq "$(lq "SELECT string_agg(review || ':' || kind, ' ' ORDER BY review) FROM review_ends")" "1:landed 2:closed 3:landed 4:landed"59eq "$(lq "SELECT epoch(ts)::BIGINT FROM review_ends WHERE review = 3")" "$((T_NOW - 600))"