Skip to content
sourceorigin-devPublic

About

Pure Rust source control

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

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.

About

Pure Rust source control

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages