Skip to content

`scm-record` is a UI component to interactively select changes to include in a commit. It's meant to be embedded in source control tooling.

Notifications You must be signed in to change notification settings

emesterhazy/scm-record

 
 

Repository files navigation

About

Build status Latest version Docs License

scm-record is a Rust library for a UI component to interactively select changes to include in a commit. It's meant to be embedded in source control tooling.

You can think of this as an interactive replacement for git add -p, or a reimplementation of hg crecord/hg commit -i. Given a set of changes made by the user, this component presents them to the user and lets them select which of those changes should be staged for commit.

The scm-record library is directly integrated into these projects:

  • git-branchless: the git record -i command lets you interactively select and commit changes.
  • Jujutsu: as the built-in diff editor; see the ui.diff-editor configuration option.

Standalone executable

scm-diff-editor is a standalone executable that uses scm-record as the front-end. It can be installed via cargo:

$ cargo install --locked scm-diff-editor

The scm-diff-editor executable can be used with these tools:

Future work

Feature wishlist

Here are some features in the UI which are not yet implemented:

  • Make the keybindings easier to discover, allow accessing the menu with the keyboard.
  • Jump to next/previous element of same kind.
  • Edit one side of the diff in an editor.
  • Multi-way split UI to split a commit into more than 2 commits.
  • Support for use as a mergetool.
  • Commands to select ours/theirs for diffs representing merge conflicts.

Integration with other projects

Here's some projects that don't use scm-record, but could benefit from integration with it (with your contribution):

About

`scm-record` is a UI component to interactively select changes to include in a commit. It's meant to be embedded in source control tooling.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%