revision

module
v1.7.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 6, 2026 License: MIT

README

revision logo

revision

CI status Go version MIT License

Documentation · Quick start · Keybindings · Configuration

A lazygit-style terminal UI for Subversion (SVN). revision gives you a fast, keyboard-driven interface over the svn command line — review changes, stage with changelists, commit, update, and browse history without leaving your terminal.

Why

SVN's command line is powerful but verbose for day-to-day work. revision wraps it in a focused TUI — inspired by lazygit — so common tasks are a keystroke away. It shells out to your existing svn binary, so it respects your working copy, credentials, and configuration.

Features

  • lazygit-style layout — Status, Files, Log and Shelf panels down the left, a Main detail view beside them, and the svn command log beneath; switch with the number keys or Tab
  • Changed files as a collapsible directory tree, grouped under their folders, with the visible count in the panel footer — and a move drawn as a move, its destination marked + and each half naming the other
  • Colour-coded diffs that follow your selection — read one side by side with s, save it to a file with w, or highlight a directory for the combined diff of everything beneath it
  • Staging built on a native SVN changelist — space stages a file or a whole subtree, c commits the set through an inline message editor
  • Named changelists — group the staged set into real SVN changelists, drill into one in a tabbed view, and commit it on its own
  • Shelving — the git stash SVN never shipped: pick files with v, set them aside with z, and merge them back with enter or p. Shelves live in an ignored directory beside the working copy, so there is nothing to configure
  • Update to HEAD with u, or to any revision picked in the Log panel — conflicts are spelled out before you confirm
  • Resolve conflicts side by side with m — each conflict, or each hunk a patch could not place, laid out two panes wide with a key to take either side, both, or your editor
  • Add an untracked file or a whole untracked directory with a, and revert or delete a single file or every change beneath a directory — the destructive two confirm first
  • Instant staging — the row restyles on the keypress while svn confirms behind it, and a failure puts the previous state back; revert, delete and commit mark their rows as in flight rather than claiming a success they do not have yet
  • A set is one svn invocation, not one per file, and the run carries on past a file svn will not take — the toast names what landed and what was refused
  • Live refresh — an edit made outside revision reaches the Files and diff panels on its own, with the cursor and scroll where you left them; L turns the watcher off
  • Reads once, and only what you look at — diffs and history pages are cached for the session, so startup costs a single svn status and revisiting a file is instant
  • Filter or search any panel with /rev:, user:, state: and cl: parameters plus free text, and n / N to jump between matches
  • Open the highlighted file in vim, nvim, nano, or the editor around you — including a VS Code tab when revision is running on a remote host
  • Themes and in-app settings — six colour schemes, edited with S and saved to your config file
  • svn+ssh ready, self-updating release builds, a contextual footer and a full ? keybindings menu

Requirements

  • The svn command-line client on your PATH
  • Run revision from inside an SVN working copy (or pass --path)
  • OpenSSH's ssh-add and ssh-keygen if your working copy is served over svn+ssh://

Install

revision is a single self-contained binary.

Quick install (Linux / macOS)

curl -fsSL https://raw.githubusercontent.com/bapatchirag/revision/main/install.sh | sh

The script detects your OS and architecture, downloads the matching binary from the latest release, and installs it without sudo (falling back to ~/.local/bin). The download is checked against the SHA-256 the release publishes and is abandoned if it does not match. Prebuilt binaries cover macOS on Apple silicon and Intel, and Linux on x86-64 and 64-bit ARM.

With Go

go install github.com/bapatchirag/revision/cmd/revision@latest

Installed at a published tag this is a release build, and self-updates like any other. It compiles from source, so it needs a Go toolchain and rather longer than downloading a binary.

Prebuilt binaries

Download the binary for your platform from the Releases page and put it on your PATH. Each release publishes revision-darwin-arm64, revision-darwin-amd64, revision-linux-amd64 and revision-linux-arm64.

Updating

Release builds check for a newer version on startup — at most once a day, remembered between launches — and offer to upgrade themselves; revision --update checks on demand from the command line. Either way the update is pinned to the release it announced, installed over the binary you are running, and verified afterwards. See Updating revision.

Quick start

cd /path/to/working-copy
revision                 # or from anywhere: revision --path /path/to/working-copy
  • 1 2 3 4 0 or Tab — move between the Status, Files, Log, Shelf and Main panels
  • space — stage the selected file, or every change beneath the selected directory
  • a — put an untracked file or directory under version control
  • c — commit the staged set · u — update the working copy
  • / — filter or search the focused panel · R — refresh
  • S — settings and themes · ? — every keybinding
  • q — quit

Full flag list: revision --help.

Documentation

bapatchirag.github.io/revision — installation, workflows, the full keybindings reference, configuration, troubleshooting, and the architecture notes.

Contributing

Issues and pull requests are welcome — bug reports, feature ideas, and documentation fixes all help. Read CONTRIBUTING.md for the layout of the tree and what to run before opening a PR, and the Code of Conduct for what is expected of everyone taking part.

Stuck rather than filing a bug? SUPPORT.md points at the right page. Found a vulnerability? Report it privately — see SECURITY.md.

License

MIT © Chirag Bapat

Directories

Path Synopsis
cmd
gallery command
Command gallery renders each reusable TUI component in isolation, so every widget can be eyeballed on its own (make run-gallery).
Command gallery renders each reusable TUI component in isolation, so every widget can be eyeballed on its own (make run-gallery).
keymapdump command
Command keymapdump prints keymap.HelpSections as a flat JSON array, one row per binding, so the website's keybindings page renders the same table as the in-app "?" overlay.
Command keymapdump prints keymap.HelpSections as a flat JSON array, one row per binding, so the website's keybindings page renders the same table as the in-app "?" overlay.
revision command
Command revision is a lazygit-style terminal UI for Subversion.
Command revision is a lazygit-style terminal UI for Subversion.
internal
app
Package app is the composition layer: it is the only package that knows both the SVN domain (internal/svn) and the reusable component library (internal/tui/component).
Package app is the composition layer: it is the only package that knows both the SVN domain (internal/svn) and the reusable component library (internal/tui/component).
cache
Package cache provides small, domain-agnostic in-memory caches.
Package cache provides small, domain-agnostic in-memory caches.
config
Package config locates, loads, and persists revision's user configuration.
Package config locates, loads, and persists revision's user configuration.
selfupdate
Package selfupdate checks GitHub for a newer released binary and performs the upgrade through one of the project's documented install paths (the install.sh script via curl, or `go install`).
Package selfupdate checks GitHub for a newer released binary and performs the upgrade through one of the project's documented install paths (the install.sh script via curl, or `go install`).
shelf
Package shelf stores sets of local changes lifted out of a Subversion working copy so they can be put back later.
Package shelf stores sets of local changes lifted out of a Subversion working copy so they can be put back later.
sshagent
Package sshagent inspects the running ssh-agent so revision can tell whether the SSH key used for svn+ssh access is already loaded before it starts talking to a remote repository.
Package sshagent inspects the running ssh-agent so revision can tell whether the SSH key used for svn+ssh access is already loaded before it starts talking to a remote repository.
svn
Package svn provides a thin, typed wrapper around the Subversion command-line client.
Package svn provides a thin, typed wrapper around the Subversion command-line client.
tui
Package tui defines the domain-agnostic contracts shared by every reusable terminal-UI component.
Package tui defines the domain-agnostic contracts shared by every reusable terminal-UI component.
tui/component
Package component is the reusable, domain-agnostic widget library.
Package component is the reusable, domain-agnostic widget library.
tui/focus
Package focus cycles input focus across a ring of Focusable components, guaranteeing that exactly one holds focus at a time.
Package focus cycles input focus across a ring of Focusable components, guaranteeing that exactly one holds focus at a time.
tui/keymap
Package keymap defines the shared key bindings injected into components.
Package keymap defines the shared key bindings injected into components.
tui/layout
Package layout provides composition helpers for arranging rendered blocks: placement within a box and overlaying a popup on top of a background.
Package layout provides composition helpers for arranging rendered blocks: placement within a box and overlaying a popup on top of a background.
tui/msg
Package msg holds the decoupled messages that components emit through returned commands.
Package msg holds the decoupled messages that components emit through returned commands.
tui/theme
Package theme holds the color palette injected into every component.
Package theme holds the color palette injected into every component.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL