Skip to content

Latest commit

 

History

History
52 lines (42 loc) · 2.49 KB

README.md

File metadata and controls

52 lines (42 loc) · 2.49 KB

origin

Version control for repositories that many people, agents, CI runners and review bots read and write at the same time, written in Rust. See docs/design.md for the model.

Status: early prototype. Nothing here is stable.

Usage

There are no commits or branches. The working copy is always on a revision of the current change. Commands that only read it show your edits as a draft, and those that build on the change, such as describe or new, record them first.

origin init                         # a repository with the targets `policy` and `main`
origin describe "Add retries"       # say what the current change is for
origin new "Parse the config"       # finish it, and start the next change on top
origin status | diff | show [<change>]
origin log [<target>]               # your changes, then the target's acceptances
origin evolog <change>              # every revision of a change
origin edit <change>                # switch the working copy to another change
origin abandon --reason "Too slow"  # give a change up, keeping it for others to see
origin converge <change>            # end a change's divergence
origin index rebuild                # rebuild the record index from the store

origin annotate @ ci.test --pass --inputs src Cargo.toml   # a statement about a revision
origin annotate @ review --pass -m "Looks good"            # with details: -m, or --payload <file|->
origin annotate @ review --withdraw -m "Spoke too soon"    # take your statement of a kind back
origin annotate --on <id> flaky --neutral -m "Timeout on CI"  # a statement about a statement
origin statements [<rev>]           # the statements about a revision, and those about them
origin promote [<rev>]              # carry results over from revisions with the same inputs

Changes are named by a unique prefix of their id, or @ for the working copy's. A revision is @, a change (for its head), or a unique prefix of the revision's id. Your name and node key live in $ORIGIN_CONFIG_DIR, or else origin in $XDG_CONFIG_HOME or ~/.config: set user = "<name>" in its config.toml if $USER isn't the name you want. See the design for the model.

Development

just             # format, lint, test, and audit dependencies
just bench       # micro-benchmarks
just bench-git   # origin against git, with hyperfine (docs/benchmarks.md)

rustup installs the toolchain rust-toolchain.toml pins. The minimum supported Rust version is the rust-version in Cargo.toml.