~/bend-docscommunity

src/fetch/plan.bend checks

raw source on the hub · import 0x74799d3f846634a3d7461d4336d7c9d4/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

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

type Pt source · line 436 · raw

Data

one package of the lock, and where it stands

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

type Verdict source · line 596 · raw

Data

what one package comes to: nothing to do, a tree to lay, or a refusal

type Step source · line 777 · raw

Data

the questions still open, or the plan once there are none

Definitions

def fetch.ask source · line 60 · raw

@src:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/lock.Src -> @+here:String -> @+hub:String -> @+hash:String -> 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/pkg/pkg.Item> -> @ss:List<&2, String> -> List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/pkg/pkg.Source>

the files a manifest names, each with the text read for it

def tree.read source · line 90 · raw

@answer:0x74799d3f846634a3d7461d4336d7c9d4/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:0x74799d3f846634a3d7461d4336d7c9d4/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:0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/pkg/pkg.Item> -> @+root:String -> @+tree:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/pkg/pkg.Source> -> List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/world.Source -> 0x74799d3f846634a3d7461d4336d7c9d4/src/pkg/pkg.Item

a file laid, weighed by its own text

def weighs source · line 151 · raw

@ls:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/world.Source> -> List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/pkg/pkg.Item>

every file laid, weighed by its own text

def fit source · line 160 · raw

@want:0x74799d3f846634a3d7461d4336d7c9d4/src/pkg/pkg.Item -> @got:0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/pkg/pkg.Item> -> @ls:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/world.Source> -> Bool

whether every path stays inside the tree

def manifest source · line 196 · raw

@+ls:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/pkg/pkg.Item> -> @+hash:String -> @+ls:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/pkg/pkg.Item> -> @ls:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/pkg/pkg.Item> -> @+hash:String -> @+ls:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/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:0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Heard -> @fs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/pkg/pkg.Item> -> @+root:String -> Part

a package fetched, once it is answered

def part.fetch source · line 272 · raw

@+rs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Reply> -> @+src:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/lock.Src -> @fs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Reply> -> @+src:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/lock.Src -> @fs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Reply> -> @+src:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/lock.Src -> @+fs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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:0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Heard -> @+rs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Reply> -> @+src:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/lock.Src -> @+fs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Reply> -> @+src:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/lock.Src -> @+fs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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:0x74799d3f846634a3d7461d4336d7c9d4/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:0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Answer -> @+hash:String -> @+nar:String -> @+url:String -> @+rev:String -> String

def weighed.heard source · line 389 · raw

@got:0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Heard -> @+hash:String -> @+nar:String -> @+url:String -> @+rev:String -> String

def weighed.src source · line 396 · raw

@src:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/lock.Src -> @+rs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Reply> -> @+here:String -> @+hash:String -> String

def weighed source · line 409 · raw

@+ss:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/toml/toml.Sect> -> @+rs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/toml/toml.Sect> -> @+rs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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:0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Answer -> @+nv:String -> @+hash:String -> Nm

a names file, once it is read

def name.heard source · line 495 · raw

@got:0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Heard -> @+nv:String -> @+hash:String -> Nm

def name.valid source · line 504 · raw

@ok:Bool -> @+rs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Reply> -> @name:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/lock.Name -> Nm

where one name of the lock stands

def name.parts source · line 518 · raw

@+rs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Reply> -> @ns:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Effect> -> List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Effect> -> List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Effect>

def names.lay source · line 542 · raw

@ms:List<&2, Nm> -> @rest:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Effect> -> List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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> -> 0x74799d3f846634a3d7461d4336d7c9d4/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:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Outcome -> @then:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Outcome -> 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Ask>

the names still to read under BEND_LIB

def name.parts.of source · line 589 · raw

@+ss:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/toml/toml.Sect> -> @+world:0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/pkg/pkg.Item> -> @+hash:String -> @+ls:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/world.Source> -> Verdict

the files that arrived, laid when they pass

def judge source · line 610 · raw

@+fs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/world.Source> -> 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Effect> -> List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Effect>

every verdict's effect

def outcome.of source · line 655 · raw

@vs:List<&2, Verdict> -> 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Outcome

how the command ends: the first refusal, or success

def seal source · line 667 · raw

@es:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Effect> -> @outcome:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Outcome -> 0x74799d3f846634a3d7461d4336d7c9d4/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> -> 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/toml/toml.Sect> -> @+world:0x74799d3f846634a3d7461d4336d7c9d4/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:0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.World -> 0x74799d3f846634a3d7461d4336d7c9d4/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:0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.World -> 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Plan

the plan: a missing ledger, then a missing lock, refused before the rest

def plan source · line 715 · raw

@+world:0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.World -> 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Plan

ez fetch over a World

def refuses.plan source · line 719 · raw

@pl:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Plan -> Bool

whether a plan ends in a refusal

def refuses source · line 728 · raw

@+world:0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Ask> -> List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Ask>

every open question

def wants.lock source · line 754 · raw

@got:Maybe<&2, String> -> @+world:0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.World -> List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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:0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.World -> List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Ask>

def wants source · line 773 · raw

@+world:0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.World -> List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/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:0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.World -> Step

def step.led source · line 799 · raw

@led:Bool -> @got:Maybe<&2, String> -> @+world:0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.World -> Step

def step source · line 808 · raw

@+world:0x74799d3f846634a3d7461d4336d7c9d4/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:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Plan -> List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Effect>

the effects of a plan

def front source · line 820 · raw

@fs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/world.Source> -> List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/toml/toml.Sect> -> @+hash:String -> List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/pkg/pkg.Item>

the files the lock records under a hash

def lays.one source · line 837 · raw

@+ss:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/toml/toml.Sect> -> @effect:0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/toml/toml.Sect> -> @es:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/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:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/up.Ask -> String

the source a checkout is asked of, "" for any other question

def ask.hash source · line 862 · raw

@ask:0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Ask -> String

the package a question is about

def ask.anchored source · line 875 · raw

@+here:String -> @src:0x74799d3f846634a3d7461d4336d7c9d4/src/lock/lock.Src -> @ask:0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/toml/toml.Sect> -> @as:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Ask> -> Bool

whether every question does

def weighed.lay source · line 893 · raw

@+ss:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/toml/toml.Sect> -> @+rs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Reply> -> @+here:String -> @effect:0x74799d3f846634a3d7461d4336d7c9d4/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, 0x74799d3f846634a3d7461d4336d7c9d4/src/toml/toml.Sect> -> @+rs:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/fetch/world.Reply> -> @+here:String -> @es:List<&2, 0x74799d3f846634a3d7461d4336d7c9d4/src/lock/plan.Effect> -> Bool

whether every tree a list of effects lays does