src/fetch/plan.bend checks
raw source on the hub · import 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/plan.bend as Plan
fetch/plan: ez fetch as a pure planner. It reads a World
(fetch/world.bend) and returns either the questions it still needs
answered (step) or a Plan: the effects to run and how the command ends
(plan). The interpreter (fetch/run.bend) loops on step, answering each
question by IO, until nothing is left to ask, then executes the plan.
ez fetch fills BEND_LIB from the lock alone, re-resolving nothing. With no
ez.toml, or no ez.lock.toml, it refuses before it asks anything, as
uv sync --frozen does: a fetch never writes a lock, so it has nothing to
fill BEND_LIB from.
For every package the lock records it asks first for the tree already under
BEND_LIB. A tree there that the lock's checks pass is kept as it is. Any
other is fetched: a git package as a shallow checkout at the pinned rev,
from its source anchored at the project (P.anchor(here, url)), and a hub
package from the lock's hub. Each file is then taken from what arrived by
its path, from the package's root inside the checkout for a git package,
and the package is checked before anything is laid (good): every file's
digest equals the sum the lock records for it (EZ-FETCH-1), no path leaves
the package, and the files hash to the name the lock records them under
(EZ-HASH-3). A git package's checkout must also weigh to the narHash the
lock records (weighed), so the files laid come from the tree the lock
pins, the tree nix rebuilds from the same pin. Only then is the tree laid
under BEND_LIB, the files the lock names and their manifest last.
Every name the lock records is laid too, as the file bend reads the name's
hash from, $BEND_LIB/names/<nv> holding the hash and a newline, so bend
never asks the hub for it (EZ-HUB-4). A names file that already holds the
lock's hash is kept; any other is written, and one that held another hash
is said to have been rewritten, since the lock wins over it as it wins over
a tree that fails its checks. A name the lock records that bend would not
read back, one the hub rules out or a hash that is not a 0x name, refuses
the fetch, since its file would not be the one bend reads.
The plan of a fetch that succeeds lays every tree that was fetched and every names file that is not already right, and nothing else: no ledger, no lock. A fetch that refuses, for any package, has no effect at all, so a package fetched before the one that failed is not laid either, and a tree already under BEND_LIB is never removed (EZ-OUT-2).
The Effect, Plan and Outcome types are the lock's (lock/plan.bend), as for
ez add, ez remove and ez init.
10 imports
import Base import ../toml/toml.bend as T import ./world.bend as F import ../lock/plan.bend as P import ../lock/world.bend as W import ../lock/up.bend as Up import ../lock/lock.bend as L import ../pkg/pkg.bend as K import ../pkg/path.bend as Path import ../share/sha.bend as Sha
Types
type Tree source · line 72 · raw
Data
a package's files as they arrived, with the directory the lock's paths are written from inside them, or why nothing arrived
Tree@root:String -> @files:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Source> -> Tree
Gone@why:String -> Tree
type Part source · line 248 · raw
Data
where one package stands: its tree under BEND_LIB still to read, its fetch still to ask, a tree under BEND_LIB that passed and is kept, the files that arrived, or why nothing arrived
AskLaidPart
AskFetchPart
HavePart
Got@files:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source> -> Part
No@why:String -> Part
type Pt source · line 436 · raw
Data
one package of the lock, and where it stands
Pt@hash:String -> @src:0x886223f5c47e4983fe57d887c034bc7f/src/lock/lock.Src -> @files:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> @part:Part -> Pt
type Nm source · line 463 · raw
Data
where one name of the lock stands: its names file still to read, a file that already holds the lock's hash, a file to write, with the hash the one there held ("" when there was none), or why the name refuses the fetch
NmAsk@nv:String -> Nm
NmKeepNm
NmPut@nv:String -> @hash:String -> @was:String -> Nm
NmStop@why:String -> Nm
type Verdict source · line 596 · raw
Data
what one package comes to: nothing to do, a tree to lay, or a refusal
KeepVerdict
Put@hash:String -> @files:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source> -> Verdict
Stop@why:String -> Verdict
type Step source · line 777 · raw
Data
the questions still open, or the plan once there are none
Asking@asks:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Ask> -> Step
Run@plan:0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Plan -> Step
Definitions
def fetch.ask source · line 60 · raw
@src:0x886223f5c47e4983fe57d887c034bc7f/src/lock/lock.Src -> @+here:String -> @+hub:String -> @+hash:String -> 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Ask
the question that fetches a package from where the lock says it comes from: a checkout of a git package at its rev, from its source as git is to read it, a relative path taken from the project; or a hub package from the hub
def zip source · line 77 · raw
@fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> @ss:List<&2, String> -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Source>
the files a manifest names, each with the text read for it
def tree.read source · line 90 · raw
@answer:0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Answer -> Tree
a manifest and the texts of the files it names, as a tree: what is under BEND_LIB, or what the hub served
def tree.said source · line 100 · raw
@answer:0x886223f5c47e4983fe57d887c034bc7f/src/lock/up.Answer -> @+root:String -> Tree
a checkout at the pinned rev, whose paths are the lock's from root
def tree.of source · line 110 · raw
@answer:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Answer -> @+root:String -> Tree
what arrived for a question
def text.or source · line 120 · raw
@got:Maybe<&2, String> -> String
a text looked up, "" when it is not there
def key source · line 129 · raw
@+root:String -> @+at:String -> String
where a path of the lock is in a tree: under its root inside a checkout, and as it is in a tree a manifest names
def cand source · line 135 · raw
@fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> @+root:String -> @+tree:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Source> -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source>
every file the lock names, with the text the tree has at its path. A file the tree does not have is taken as empty, which does not match the lock unless the lock records an empty file.
def weigh source · line 146 · raw
@src:0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source -> 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item
a file laid, weighed by its own text
def weighs source · line 151 · raw
@ls:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source> -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item>
every file laid, weighed by its own text
def fit source · line 160 · raw
@want:0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item -> @got:0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source -> Bool
whether one file is the one the lock names: the same path, and a text whose digest is the sum the lock records
def fits source · line 167 · raw
@fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> @ls:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source> -> Bool
whether every file is the one the lock names, in the lock's order. A list longer or shorter than the lock's is not the package.
def path.safe source · line 182 · raw
@+at:String -> Bool
whether a path stays inside the tree it is laid in: written the way the
path walk writes it, so no . or // in it, not empty, not absolute and
not climbing out with ... A lock is not trusted with where it writes.
def paths.safe source · line 187 · raw
@ls:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source> -> Bool
whether every path stays inside the tree
def manifest source · line 196 · raw
@+ls:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source> -> String
the manifest of the files laid, weighed by their own texts
def named source · line 200 · raw
@+ls:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source> -> String
the 0x name of the files laid, weighed by their own texts
def good source · line 206 · raw
@fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> @+hash:String -> @+ls:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source> -> Bool
whether a package may be laid: every file is the one the lock names, no path leaves the tree, and the files hash to the name the lock records them under, so the tree laid under that name is that name's
def unfit.pick source · line 213 · raw
@ok:Bool -> @+at:String -> @rest:String -> String
the first file that is not the one the lock names, or "" when none is wrong. A path is never empty, so "" is never such a path.
def unfit source · line 221 · raw
@fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> @ls:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source> -> String
the first path that does not fit, "" when every file does
def bad.why source · line 234 · raw
@fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> @+hash:String -> @+ls:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source> -> String
why a package may not be laid, naming it
def part.tree source · line 256 · raw
@tree:Tree -> @fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> Part
the files that arrived for a package, or why none did
def part.fetch.heard source · line 264 · raw
@got:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Heard -> @fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> @+root:String -> Part
a package fetched, once it is answered
def part.fetch source · line 272 · raw
@+rs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Reply> -> @+src:0x886223f5c47e4983fe57d887c034bc7f/src/lock/lock.Src -> @fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> @+here:String -> @+hub:String -> @+hash:String -> Part
a package fetched, from where the lock says it comes from
def part.kept source · line 283 · raw
@ok:Bool -> @+rs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Reply> -> @+src:0x886223f5c47e4983fe57d887c034bc7f/src/lock/lock.Src -> @fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> @+here:String -> @+hub:String -> @+hash:String -> Part
a tree under BEND_LIB that passes is kept; any other is fetched
def part.found source · line 300 · raw
@tree:Tree -> @+rs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Reply> -> @+src:0x886223f5c47e4983fe57d887c034bc7f/src/lock/lock.Src -> @+fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> @+here:String -> @+hub:String -> @+hash:String -> Part
the tree under BEND_LIB, read: checked the way a fetched one is, and fetched when it is not there
def part.laid source · line 316 · raw
@got:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Heard -> @+rs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Reply> -> @+src:0x886223f5c47e4983fe57d887c034bc7f/src/lock/lock.Src -> @+fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> @+here:String -> @+hub:String -> @+hash:String -> Part
the tree under BEND_LIB, once it is read
def part source · line 332 · raw
@+rs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Reply> -> @+src:0x886223f5c47e4983fe57d887c034bc7f/src/lock/lock.Src -> @+fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> @+here:String -> @+hub:String -> @+hash:String -> Part
where one package stands
def nar.why source · line 347 · raw
@none:Bool -> @same:Bool -> @+hash:String -> @+want:String -> @+got:String -> @+url:String -> @+rev:String -> String
why a checkout may not be laid for the narHash it weighed to, "" when it may: the lock records a narHash and the checkout weighed to it
def unweighed source · line 369 · raw
@+hash:String -> String
why a package stands without a weighed checkout
def weighed.up source · line 373 · raw
@answer:0x886223f5c47e4983fe57d887c034bc7f/src/lock/up.Answer -> @+hash:String -> @+nar:String -> @+url:String -> @+rev:String -> String
what a checkout question was answered with, against the lock's narHash
def weighed.answer source · line 380 · raw
@answer:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Answer -> @+hash:String -> @+nar:String -> @+url:String -> @+rev:String -> String
def weighed.heard source · line 389 · raw
@got:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Heard -> @+hash:String -> @+nar:String -> @+url:String -> @+rev:String -> String
def weighed.src source · line 396 · raw
@src:0x886223f5c47e4983fe57d887c034bc7f/src/lock/lock.Src -> @+rs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Reply> -> @+here:String -> @+hash:String -> String
def weighed source · line 409 · raw
@+ss:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/toml/toml.Sect> -> @+rs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Reply> -> @+here:String -> @+hash:String -> String
why the checkout a package of the lock was fetched as may not be laid, "" when it may. A hub package has no checkout. A git package's checkout, the one its fetch question was answered with, must weigh to the narHash the lock records, so what is laid comes from the tree the lock pins and not only from files that happen to match their sums.
def weigh.got source · line 412 · raw
@ok:Bool -> @+why:String -> @ls:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source> -> Part
def weigh.part source · line 422 · raw
@+why:String -> @part:Part -> Part
files that arrived stand only when the checkout they came from weighed to the lock's narHash. A tree kept from BEND_LIB was not fetched, and is checked file by file as before.
def parts source · line 440 · raw
@+ss:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/toml/toml.Sect> -> @+rs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Reply> -> @+here:String -> @+hub:String -> @hs:List<&2, String> -> List<&2, Pt>
every package of the lock, and where each stands
def name.held source · line 471 · raw
@same:Bool -> @+nv:String -> @+hash:String -> @+was:String -> Nm
a names file that was there, against the lock's hash. bend trims the file before it reads the hash, and so does this.
def name.got source · line 479 · raw
@got:Maybe<&2, String> -> @+nv:String -> @+hash:String -> Nm
what BEND_LIB holds for a name
def name.answer source · line 488 · raw
@answer:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Answer -> @+nv:String -> @+hash:String -> Nm
a names file, once it is read
def name.heard source · line 495 · raw
@got:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Heard -> @+nv:String -> @+hash:String -> Nm
def name.valid source · line 504 · raw
@ok:Bool -> @+rs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Reply> -> @+nv:String -> @+hash:String -> Nm
a name bend would read back is looked for under BEND_LIB; any other stops the fetch, since the file laid for it would not be the one bend reads
def name.part source · line 513 · raw
@+rs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Reply> -> @name:0x886223f5c47e4983fe57d887c034bc7f/src/lock/lock.Name -> Nm
where one name of the lock stands
def name.parts source · line 518 · raw
@+rs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Reply> -> @ns:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/lock.Name> -> List<&2, Nm>
where every name of the lock stands
def name.rewrote source · line 526 · raw
@+nv:String -> @+hash:String -> @+was:String -> String
how a rewritten names file is said to have been rewritten
def name.put.at source · line 531 · raw
@none:Bool -> @+nv:String -> @+hash:String -> @was:String -> @rest:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect> -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect>
a names file written, said first when it held another hash
def name.put source · line 538 · raw
@+nv:String -> @+hash:String -> @+was:String -> @rest:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect> -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect>
def names.lay source · line 542 · raw
@ms:List<&2, Nm> -> @rest:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect> -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect>
every names file a fetch writes, ahead of what follows
def names.outcome source · line 555 · raw
@ms:List<&2, Nm> -> 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Outcome
how the names end the fetch: the first that refuses, or o, how the
packages ended it, which comes first
def outcome.then source · line 569 · raw
@first:0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Outcome -> @then:0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Outcome -> 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Outcome
the packages' end, or, when they succeed, the names'
def names.asks source · line 577 · raw
@ms:List<&2, Nm> -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Ask>
the names still to read under BEND_LIB
def name.parts.of source · line 589 · raw
@+ss:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/toml/toml.Sect> -> @+world:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.World -> List<&2, Nm>
every name the lock records, and where each stands
def judge.got source · line 602 · raw
@ok:Bool -> @fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> @+hash:String -> @+ls:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source> -> Verdict
the files that arrived, laid when they pass
def judge source · line 610 · raw
@+fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item> -> @+hash:String -> @part:Part -> Verdict
what one package comes to, where it stands
def judged source · line 624 · raw
@ps:List<&2, Pt> -> List<&2, Verdict>
what every package comes to
def lay source · line 633 · raw
@+hash:String -> @+ls:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source> -> 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect
a tree laid under BEND_LIB: the files the lock names, then their manifest, so a tree that has one is a tree that finished
def effect.v source · line 637 · raw
@verdict:Verdict -> @rest:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect> -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect>
one verdict's effect, ahead of the rest
def effects.of source · line 647 · raw
@vs:List<&2, Verdict> -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect>
every verdict's effect
def outcome.of source · line 655 · raw
@vs:List<&2, Verdict> -> 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Outcome
how the command ends: the first refusal, or success
def seal source · line 667 · raw
@es:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect> -> @outcome:0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Outcome -> 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Plan
a plan that refuses has no effect at all; its reason is how it ends
def parts.plan source · line 677 · raw
@ps:List<&2, Pt> -> @+ms:List<&2, Nm> -> 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Plan
the plan once every package and every name stands somewhere: the names files, then the trees, and how the command ends. Each verdict is made once and read by both halves.
def parts.of source · line 685 · raw
@+ss:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/toml/toml.Sect> -> @+world:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.World -> List<&2, Pt>
every package of the lock on a World that has one, and where each stands
def need.no source · line 689 · raw
String
why a fetch refuses before anything is asked: no ez.toml, or no lock
def need.lock source · line 693 · raw
String
def plan.lock source · line 698 · raw
@got:Maybe<&2, String> -> @+world:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.World -> 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Plan
the plan once the ledger and the lock are known to be there
def plan.led source · line 707 · raw
@led:Bool -> @got:Maybe<&2, String> -> @+world:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.World -> 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Plan
the plan: a missing ledger, then a missing lock, refused before the rest
def plan source · line 715 · raw
@+world:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.World -> 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Plan
ez fetch over a World
def refuses.plan source · line 719 · raw
@pl:0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Plan -> Bool
whether a plan ends in a refusal
def refuses source · line 728 · raw
@+world:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.World -> Bool
whether ez fetch refuses on a World
def ask.pt source · line 735 · raw
@pt:Pt -> @+here:String -> @+hub:String -> @rest:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Ask> -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Ask>
one package's open question, ahead of the rest
def asks.of source · line 746 · raw
@ps:List<&2, Pt> -> @+here:String -> @+hub:String -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Ask>
every open question
def wants.lock source · line 754 · raw
@got:Maybe<&2, String> -> @+world:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.World -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Ask>
the open questions once the ledger and the lock are known to be there
def wants.led source · line 763 · raw
@led:Bool -> @got:Maybe<&2, String> -> @+world:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.World -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Ask>
def wants source · line 773 · raw
@+world:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.World -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Ask>
the questions a World still leaves open: none when the fetch refuses before it asks, and otherwise one for each package that does not yet stand anywhere
def step.asks source · line 781 · raw
@asks:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Ask> -> @ps:List<&2, Pt> -> @ms:List<&2, Nm> -> Step
def step.lock source · line 788 · raw
@got:Maybe<&2, String> -> @+world:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.World -> Step
def step.led source · line 799 · raw
@led:Bool -> @got:Maybe<&2, String> -> @+world:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.World -> Step
def step source · line 808 · raw
@+world:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.World -> Step
what the interpreter does next on a World. Every package is placed once per round, and both the questions and the plan are read from that.
def effects source · line 815 · raw
@pl:0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Plan -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect>
the effects of a plan
def front source · line 820 · raw
@fs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source> -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/world.Source>
every file of a tree but the last, which a Lay writes as the manifest
def locked source · line 832 · raw
@+ss:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/toml/toml.Sect> -> @+hash:String -> List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/pkg/pkg.Item>
the files the lock records under a hash
def lays.one source · line 837 · raw
@+ss:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/toml/toml.Sect> -> @effect:0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect -> Bool
whether an effect that lays a tree lays the files the lock records under its hash, each with a text whose digest is the lock's sum for it
def lays.locked source · line 845 · raw
@+ss:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/toml/toml.Sect> -> @es:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect> -> Bool
whether every tree a list of effects lays is the one the lock records
def clone.url source · line 854 · raw
@ask:0x886223f5c47e4983fe57d887c034bc7f/src/lock/up.Ask -> String
the source a checkout is asked of, "" for any other question
def ask.hash source · line 862 · raw
@ask:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Ask -> String
the package a question is about
def ask.anchored source · line 875 · raw
@+here:String -> @src:0x886223f5c47e4983fe57d887c034bc7f/src/lock/lock.Src -> @ask:0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Ask -> Bool
whether a git question asks for the source the lock records for its
package, taken from the project: the lock's url anchored at here
def asks.anchored source · line 883 · raw
@+here:String -> @+ss:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/toml/toml.Sect> -> @as:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Ask> -> Bool
whether every question does
def weighed.lay source · line 893 · raw
@+ss:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/toml/toml.Sect> -> @+rs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Reply> -> @+here:String -> @effect:0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect -> Bool
whether an effect that lays a tree lays a package whose checkout, when it has one, weighed to the narHash the lock records
def lays.weighed source · line 906 · raw
@+ss:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/toml/toml.Sect> -> @+rs:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/fetch/world.Reply> -> @+here:String -> @es:List<&2, 0x886223f5c47e4983fe57d887c034bc7f/src/lock/plan.Effect> -> Bool
whether every tree a list of effects lays does