Precompiled.Match (precompiled v0.2.0)

Copy Markdown View Source

The key: when a precompiled build may stand in for a local compile. Pure functions over the project's lock, the manifest entry and the toolchain, so every rule is testable without a network or a build.

Summary

Functions

The identity of a build's bytes: sha256 over its files' path, sha256 and mode, in path order. Two manifest entries with the same hash install the same files. nil for an entry with a malformed file list, or a path with a NUL or newline, which could pass one file off as another's line.

Lock-closure children of nerves; nerves_bootstrap recompiles them whenever it compiles nerves.

Types

ctx()

@type ctx() :: %{
  name: String.t(),
  version: String.t(),
  lock_entry: tuple(),
  lock: map(),
  system: {String.t(), String.t()},
  elixir: String.t(),
  otp: String.t(),
  dep_env: String.t(),
  config: (String.t(), [String.t()] -> {:ok, term()} | :error),
  prefer: String.t() | nil
}

Functions

candidate?(dep, lock, except, tooling \\ nil)

@spec candidate?(atom(), map(), [atom()], [atom()] | nil) :: boolean()

compile_env_from_app(app_path)

@spec compile_env_from_app(Path.t()) :: [map()] | nil

compile_env_ok(items, config)

@spec compile_env_ok([map()], (String.t(), [String.t()] -> {:ok, term()} | :error)) ::
  :ok | {:miss, String.t()}

files_hash(entry)

@spec files_hash(map()) :: String.t() | nil

The identity of a build's bytes: sha256 over its files' path, sha256 and mode, in path order. Two manifest entries with the same hash install the same files. nil for an entry with a malformed file list, or a path with a NUL or newline, which could pass one file off as another's line.

nerves_children(lock)

@spec nerves_children(map()) :: [atom()]

Lock-closure children of nerves; nerves_bootstrap recompiles them whenever it compiles nerves.

select(manifest, ctx)

@spec select(map(), ctx()) :: {:ok, map(), String.t()} | {:miss, String.t()}

tooling?(name)

@spec tooling?(String.t()) :: boolean()