Skip to content

Releases: meta/sapling

0.2.20261028-123539+7415fb2f

Choose a tag to compare

Sapling

  • sl worktree now works in native Git repositories. These are checkouts made with git clone, where sl runs directly in the .git checkout.
    • sl worktree add PATH [--label LABEL] [-r REV] creates a linked checkout with git worktree add (detached).
    • sl worktree list shows the main and linked checkouts with their labels. sl worktree label PATH LABEL sets a label, which is stored in the checkout's Git admin directory.
    • sl worktree remove PATH and sl worktree remove --all remove linked checkouts. This includes checkouts created with git worktree add.
    • sl worktree is now included in builds without EdenFS, such as the open source builds.
    • Checkouts created with sl clone (.sl mode) are not supported. Use git clone, then run sl in the checkout.
  • sl drop is now enabled by default.
    • sl drop -r REV... removes one or more commits from a stack and rebases their descendants.
    • If rebasing stops on a conflict, use sl drop --continue or sl drop --abort.
    • Revisions must be given with -r.
  • histedit improvements:
    • --plan RULE gives the plan on the command line, one rule per flag, oldest commit first.
      • Example: sl histedit --plan 'pick 8ef592ce7cc4' --plan 'roll 5339bf82f0ca' --plan 'pick 252a1af424ad'.
    • New into verb (abbreviated i). It folds the previous commit into this one and keeps this commit's message, the opposite of roll.
    • --show-plan with no histedit in progress prints the plan a new histedit would start with, and changes nothing.
    • After a histedit, dropped commits (dropping changeset ...) and combined commits (folded A, B -> C "summary") are listed. These lines are not shown with HGPLAIN or -T.
  • Commands that rewrite commits (rebase, amend, absorb, histedit, drop, ...) list their old -> new lines in stack order. When the list is truncated, the bottom and top commit of each stack are always shown. Set the limit with tweakdefaults.showupdatedlimit (default 10).
  • uncommit improvements:
    • It can rewrite a commit in the middle of a stack. Descendants are restacked the same way as for amend, following amend.autorestack.
    • A partial uncommit FILE now records the result as a new version of the commit.
    • Copy and rename records are kept.
    • On a commit with descendants, uncommitting every change without --keep now aborts with a hint to use --keep.
  • amend --to REV FILE... no longer loses the pending state (added, removed, copied) of files it did not amend.
  • commit -i and amend -i build the new commit in memory instead of temporarily rewriting files in the working copy. Disable with --config record.inmemory=false.
  • commit, amend, metaedit and other commands that take -m warn when a message title contains a typed \n escape instead of a newline. Disable with --config commit.check-escaped-newlines=false.
  • rebase warns when the destination's ancestry contains older versions of the stack being rebased, which would move the stack back onto obsolete commits. Configure with rebase.obsolete-dest-mode (warn, prompt, abort). --keep skips the check.
  • split now aborts when given -m or -l. Before, it ignored them.
  • experimental.evolution.allowdivergence is renamed to mutation.allow-divergence. The old name still works.
  • .git mode: when one submodule fails to check out, checkout continues with the remaining submodules and reports all failures together.
  • diff -B now prints correct hunk offsets. A negative -U or diff.unified is now ignored; before, it produced hunks that could not be applied.
  • Merges where one side changes a file's content and the other changes its executable bit no longer crash. Rebase and amend --to keep both changes.
  • Fixed crashes in sl cat -T and -Tjson on non-UTF-8 files, in sl import when rejecting a binary hunk, in sl paths outside a repository, and in the x~n revset with a very large n.
  • Computing the parents of large sets of scattered commits is faster.
  • Various other improvements and fixes.

ISL

See here.

Community Contributions

  • @martinvonz made IdDag::parents() linear in the number of spans, speeding up parent lookups for sets of many scattered commits (#1475).
  • @netproteus fixed Cargo dependency resolution in the OSS build (#1477).
  • @huntie made ISL look up pull requests in the upstream remote's GitHub repo when there is one, matching sl pr (#1424).
  • @huntie fixed ISL's repo name and dropdown in VS Code workspaces with nested Git repos that are not submodules (#1423).

0.2.20260929-102736+288e0c2d

Choose a tag to compare

Sapling

Important

This release contains security fixes. If you use sapling with untrusted repos, you should upgrade.

  • goto now prints the commit it checked out.
    • Example: sl goto main ends with checked out 4c764e361100 "second".
    • Disable with --config checkout.show-destination=false. Not shown with --quiet or HGPLAIN.
  • commit now lists the files it changed after the new commit hash. Disable with --config commit.show-status=false.
  • Safer handling of obsolete (amended or rebased) commits.
    • goto of an obsolete commit, and committing on top of one, now asks for confirmation. Checking out a stale hash is a common way to accidentally revive an old version of a commit and diverge a stack.
    • HGPLAIN=1 keeps the old behavior for scripts.
  • .git mode improvements.
    • sl worktree list now lists Git worktrees. Adding and removing worktrees is not supported yet.
    • Repos using Git's reftable reference format are now supported.
  • sl pr submit can use a review tool other than ReviewStack for the "Best reviewed with" link in the stack footer:
    [github]
    pull-request-review-url-template=https://review.example.com/{owner}/{repo}/pull/{number}
    pull-request-review-tool-name=MyReview
  • unshelve keeps untracked files untracked when it has to rebase, including after unshelve --continue.
  • rebase --collapse validates the commit message before rebasing, rather than failing partway through.
  • The bsearch revset now supports non-linear history.
  • subtree copy accepts --no-commit. Pending subtree copies show in sl status and can be abandoned with sl goto --clean ..
  • Interactive prompts driven through a pipe now echo the selected response (ui.promptecho).
  • rebase prefetches merge inputs in batches, and file and tree fetching uses less memory.
  • The pager no longer panics while restoring the terminal on exit.
  • macOS releases are now Apple Silicon only. Intel Macs are no longer supported.
  • Various other improvements and fixes.

ISL

See here.

Community Contributions

  • @netproteus made the review link in sl pr submit stack footers configurable (#1410).

0.2.20260811-150444+8fb02b32

Choose a tag to compare

Sapling

Important

This release contains security fixes. If you use sapling with untrusted repos, you should upgrade.

  • Added experimental -t | --mutation to show and log.
    • Example: sl show -t shows diff before/after an amend.
    • Example: sl log -Gtpr "predecessors(.)" shows a chain of amends with an ASCII graph.
    • This is experimental and known incomplete (e.g. does not show diffs of commit message, and does not handle rebase)
  • Changed multiple -m behavior for commit message.
    • Example: sl commit -m title -m body now uses "title\n\nbody" instead of "body" as the commit message.
    • Applies to all commands taking -m as the commit message.

ISL

See here.

Community Contributions

0.2.20260522-084851+1e764c94

Choose a tag to compare

Sapling

Important

This release contains security fixes. If you use sapling with untrusted repos, you should upgrade.

  • Added --profile native profiling support.
  • In .git mode, sl push and sl pull no longer hold sl repo lock that might block other sl commands like metaedit.

ISL

See here.

0.2.20260317-201835+0234c21f

Choose a tag to compare

Sapling

Important

This release contains security fixes. If you use sapling with untrusted repos, you should upgrade.

  • Improved sl status performance for large .git repos.
  • Linux releases now use portable binaries that target a wide range of Linux distros, not limited to just Ubuntu.
  • Various other improvements and fixes.

ISL

See here.

Community contributions

  • Documentation and website

  • EdenFS OSS build

  • GitHub actions

    • @salmanmkc upgraded GitHub Actions to latest versions for Node 24 compatibility (#1166, #1167)
    • @ajaymenon fixed reviewstack.dev deploy by removing broken Docker container dependency (#1216)
  • GitHub pr

    • @rejc2 added support for applying pull_request_template.md when creating pull requests (#1162)

0.2.20250521-115337+25ed6ac4

Choose a tag to compare

Sapling

  • Various bug fixes and improvements.

ISL

See here.

Community contributions

0.2.20241203-120811+a2174689

Choose a tag to compare

Sapling

ISL

See here.

Community contributions

0.2.20240718-145624+f4e9df48

Choose a tag to compare

Sapling

  • Links now enabled by default for PRs in the smartlog

ISL

The full list of ISL features is here.

Community contributions

  • @horizon-blue fixed a _STACK_SECTION_START related test (#846)
  • @bolinfest got rid of an unnecessary decode() call (#862)
  • @bolinfest made it possible to _strip_stack_information() to work with \r\n (#863)
  • @rejc2 added a “follower” tag on ISL for PRs (#877)
  • @bolinfest fixed an issue where github.preserve-pull-request-description=true was adding \n to commit messages (#880)
  • @bolinfest expanded PR no. recognition support (#881)
  • @zadlg fixed a Rust compilation error (#883)
  • @randallb added a check for the websocket protocol of choice if HTTPs was being used (#886)
  • @thb-sb fixed a runtime error where it was possible for a Python symbol to not be found (#896)
  • @bolinfest made some changes to exclude the first line from body in new PRs (#899)

0.2.20240219-172743+3e819974

Choose a tag to compare

Sapling

  • Enable smarter merge algorithms for open source version (see ‘sl help automerge’ for more information)
  • Optionally limit the number of PRs created in each submission (#824)
  • Trim commit description from SSL (#820)
  • Fix AttributeError.name issue for Python < 3.10 (#825)
  • Avoid linkifying example URL (#813)

ISL

The full list of ISL features is here.

  • New DAG-based renderer
  • Fill blank commit messages from previous commits
  • Improvements to split UI tracking copied files
  • Fix dragging commits in edit stack being misaligned with the cursor
  • Node >= 16 is now required for running sl isl / sl web

0.2.20240116-133042+8acecb66

Choose a tag to compare

Sapling

  • Support ‘--amend’ for copy and rename command (link)
  • Enable cross-platform stdin listfile:pattern (link)
  • Rewrite mergestage in Rust (link)
  • Add configurable limits for files count in a commit (link)
  • Use Rust status for every operations (link)

ISL

The full list of ISL features is here.

  • Multiple improvements to Interactive Split
  • Previewing system was rewritten with several improvements, such as commits not appearing duplicated during a rebase
  • Added Bulk actions dropdown to the top bar to add actions that act on all commits at once

Community Contributions