github meta/sapling 0.2.20261028-123539+7415fb2f

5 hours ago

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).

Don't miss a new sapling release

NewReleases is sending notifications on new releases.