Releases: stacked-git/stgit
Stacked Git 2.0.4
This release makes some repairs to aliases, including documenting aliases along with all other StGit configuration variables.
Changed
- docs: Document configuration variables
- refactor: Use
is-terminalinstead ofatty - chore: Update Cargo.lock with latest dependencies.
Fixed
- fix: Don't generate new patch name until after edit (#239)
- fix: Run shell aliases from top-level of work tree
- fix: Use
GIT_PREFIXin built-in aliases
Stacked Git 2.0.3
This release includes a few minor bug fixes and lots of spelling corrections.
Changed
- chore: Update Cargo.lock with latest dependencies.
Fixed
- fix: improved git version parsing on MacOS
- fix: StGit-specific branch config handling
- docs: fixed many typos
Stacked Git 2.0.2
This release further improves support for sparse checkout with partial clone and worktrees. A few documentation improvements are also included.
Changed
- chore: Update Cargo.lock with latest dependencies.
- docs(init): Add long help for
stg init(#233).
Added
- feat: Enable basic support for
extensions.worktreeconfigto unblock sparse checkout with partial clone (#195).
Fixed
- docs: More inter-command links
- docs: Normalize quoting
Stacked Git 2.0.1
Stacked Git 2.0.0
This major release of StGit brings improved performance, several new features, and many refinements compared to StGit 1.x. It is recommended that all StGit users upgrade to 2.0.0.
Many thanks to all the StGit users who took the time and effort to try out the many alpha, beta, and release candidate releases leading up to this final 2.0.0 release. Lots of issues, big and small, were worked out from this effort to make this a high-confidence release.
Removed
stg cloneis removed. Usegit cloneandstg initinstead.stg mailis replaced withstg email formatandstg email send.stg refresh --spillis replaced with dedicatedstg spillcommand.stg editno longer accepts-O/--diff-opts. Custom diff options is in conflict with editable diffs since many (most?) diff options cause the diff to no long be applicable.stg filesno longer accepts-O/--diff-opts. This option was of marginal value since it only had a possible side effect when--statwas being used.
Added
stg idnow accepts the-b/--branchoption.stg completioncommand provides runtime support for shell completions.stg completion bashgenerates bash shell completion script.stg completion fishgenerates fish shell completion script.stg completion zshoutputs zsh shell completion script.stg completion listshows StGit commands and aliases and is used at completion-time by shell completion scripts.stg completion mangenerates man pages in asciidoc format.stg email formatwrapsgit format-patchand provides a mechanism to generate patch emails and optional cover letter in mbox format.stg email sendwrapsgit send-emailand allows sending patch emails, either from files generated bystg email formator by specifying patches directly.stg new --refreshallows a new patch to be refreshed with changes in one step. The-i/--index,-F/--force,-s/--submodules, and--no-submodulesoptions fromstg refreshare also available tostg newwhen using-r/--refresh.stg seriesgains the-i/--commit-idoption to display patches' commit ids.stg showdiff output can now be limited to certain paths by specifying path limits on the command line.stg spillreplacesstg refresh --spill.stg versiongains-s/--shortflag to show shortened version info.- Added documentation for patch range syntax to stg(1) man page.
- Added
install-alltarget to top-level Makefile that installs the executable, man pages, html pages, and shell completions.
Changed
- StGit is now implemented entirely in Rust instead of Python.
- StGit is generally much faster; many commands are up to 4x faster. There was an emphasis on making informational commands such as
stg id,stg series, andstg topas fast as possible to make their use in interactive contexts (shell prompts, IDE extensions) more comfortable. - StGit error messages have been updated; many have different, and hopefully better, wording. Error messages are also use color (when color is enabled). Scripts relying on exact error messages from StGit will need to be updated.
- StGit output to stdout is generally more terse. Commands that change the stack such as
push,pop, andcommit, use sigils to denote the changes made to the stack. E.g.stg commit p0..p3will output$ p0..p3where the "$" sigil means that a patch, or patch range, has been committed. These are all the currently used stack change sigils:+patch was pushed-patch was popped>patch became the current topmost patch&patch was updated$patch was committed#patch was deleted@patch was rolled-back!patch was hidden
- StGit aliases are now more like Git aliases. Normal aliases refer to StGit subcommands, but aliases prefixed with '!' are shell aliases that may run arbitrary commands. An example normal alias would be
git config stgit.alias.list 'series --description --empty'. An example shell alias would begit config stgit.alias.st '!git status --short'. - Commands such as
stg goto,stg push, andstg popnow require full/correct patch names on the command line and no longer accept unambiguous patch name prefixes. When an inexact patch name is provided on the command line, the error message will now suggest similar valid patch names. - Additional template search paths were added. In addition to looking for template files in .git/, also look in
$XDG_CONFIG_HOME/stgit/templates/and$HOME/.stgit/templates. This search strategy is consistent with how git looks for the global config file. - The new
--signoffpatch edit option supercedes the deprecated--signand--sign-byoptions.--signoffwithout its optional value does the same thing as--sign, while--signoff=<value>does the same thing as--sign-by=<value>. - The
--ackand--reviewpatch edit options now optionally take a value. The--ack-byand--review-byoptions are deprecated. stg branchoutput is now generally less verbose.stg branch --describereplacesstg branch --description. The--descriptionsubcommand remains supported as a hidden alias to--describe, but the description string must now be provided as its own argument; i.e.--description="description string"is no longer supported.stg branch --listnow produces colorized output. The--coloroption orNO_COLORenvironment variable may be used to affect this behavior.stg branch --renamenow supports renaming regular git branches in addition to StGit-enabled branches.stg cleannow uses-Aand-Ushort options for--appliedand--unappliedinstead of-aand-u. This is done for consistency withstg seriesandstg show.stg importnow only recognizes compressed patches by their file extension (.bz2or.gz) and no longer proactively attempts to decompress using all known decompressors.stg importsupport for compressed input files is selectable at compile time using theimport-compressedfeature.stg importsupport for importing from a URL is selectable at compile time using theimport-urlfeature. N.B. there is a measurable runtime performance impact of building withimport-urldue to the unconditional, pre-main initialization ofcurlwhich affects allstgcommands.stg lognow colorizes output by default. The--coloroption orNO_COLORenvironment variable may be used to affect this behavior.stgit.new.verbosechanged tostgit.edit.verboseand now also affects edit behavior foredit,refresh, andsquashalong withnew.stg newnow accepts-e/--editand-d/--diffinstead of-v/--verbosestg picknow allows a mix of commits and patches to be picked whereas previously only a single commit xor multiple patches could be picked.stg picknow performs a single stack transaction for all the picked patches/commits instead of one transaction per pick.stg pushnow attempts to perform three-way merges, which may improve conflict resolution in some cases. This feature is enabled by default when git >= 2.32.0 is detected.stg rebase --interactivethe "squash" and "fixup" instructions may no longer be applied to the first patch in the instruction list. The stated semantics of both "squash" and "fixup" is that they squash the labeled patch with the preceding patch, which is not possible/valid when there is no preceding patch.stg refreshno longer has a--spillflag. Usestg spillinstead.stg serieshas updated colorized output.stg seriesnow requires patch range arguments to be both in-order and contiguous. Constraining patch ranges in this manner ensures that the output fromstg seriesis always a valid/correct view of a subset of the series.stg showdiff output respects the--coloroption.stg squashnow allows the full suite of patch edit options, including-d/--diff. Previously only a few message-related options were available.stg versionnow displays copyright and license statements.
Fixed
stg branch --createinherits the current branch's remote branch configuration, if available. The Python implementation had an apparent bug that prevented inheriting the remote branch configuration when creating from the current branch.- Avoid case insensitive patch name collisions. On operating systems with case-insensitive paths, patch names that only differ by case lead to patch reference collisions. StGit now ensures that patch names are distinct under case insensitive comparisions.
stg pullandstg rebaserecord updated stack state instead of deferring until the next stack-modifying command to do so.
Changed since 2.0.0-rc.2
Changed
- chore: Update Cargo.lock
Fixed
- fix(zsh): Repair broken completion of --git-opt
- fix(zsh): Add missing
stg email send --branch - fix(email): Send using --branch option
- fix: Avoid duplicate signoff with stgit.autosign
- fix: Do not use 3way for merged checks
Stacked Git 2.0.0-rc.2
This second 2.0 release candidate repairs several bugs and refines how git options are passed-through in stg diff, stg show, and stg email commands.
Changed
- The
--diff-optsoption is renamed to--diff-opt.--diff-optsremains available as an alias. - The
--diff-optoption no longer allows multiple git options per occurrence. This allows git diff options with spaces in their values. - The
--git-optsoption forstg email formatandstg email sendis renamed--git-opt. - The
--git-optoption no longer allows multiple git options per occurrence. This allows git options with spaces in their values. - Zsh completion for
--diff-optand--git-optleverage the full-featured git completion capability.
Fixed
- Repair check for modifications to stack by external tools.
stg pullandstg rebaserecord updated stack state instead of deferring until the next stack-modifying command to do so.- Improve patch appliction with
git apply --3waywhen pushing` (#225) - Zsh completion for
--diff-optaccommodates multiple occurrences
Stacked Git 2.0.0-rc.1
This first 2.0 release candidate brings a new look to the online help thanks to updating to clap 4.0. Further compatibility improvements with sparse checkouts and multiple worktrees comes from the update to git2 0.15.0. And several changes were made to support patch names starting with '-'.
Added
- Added
--annotateflag tostg email send. - Added
-p/--patchoption tostg showas alternative way to select patch ranges (#216). - Added
-n/--nameoption tostg newas alternative way to specify new patch name (#216).
Changed
- Update
git2to 0.15.0, which may further help compatibility with sparse checkouts and multiple worktrees (#195). - Update to
clap4.0, which changes the help formatting and coloring. - Update other dependencies to latest versions in Cargo.lock.
- No longer depend on
lazy_staticcrate. - Use
std::thread::scopeinstead of custom mechanism. This brings the total number of uses ofunsafein StGit to zero. - Minimum rustc requirement is set to 1.63.0.
- The '$' sigil used for committed patches is now yellow instead of white.
- Patch names beginning with a hyphen '-' may be disambiguated from command line options by escaping the leading '-' with a backslash.
stg email formatandstg email sendnow use-G/--git-optsto pass additional options togit format-patchandgit send-email.- Patch name arguments to
stg email formatandstg email-sendcan now be placed after a--separator (#216). - Update top-level usage help for
stg.
Fixed
- Various errors that may occur when executing a stack transaction are now handled more robustly such that the changes from the transaction are rolled-back so that the stack, repository, and worktree are all in a consistent state (#205).
- The
stg uncommit -husage indentation is repaired. - The
stg floatusage now shows the two distinct usage modes. stg squash --nameallows patch names with leading '-'.stg diff --rangeallows patch names and ranges with leading '-'.- Fix some pre-indented paragraphs in help/about strings.
- Zsh completion for
stg editincorrectly included -O/--diff-opts. - Zsh completion for
stg filesincorrectly included -O/--diff-opts.
Stacked Git 2.0.0-beta.3
This third, and likely last, beta release of StGit 2.0 improves StGit's compatibility with sparse checkouts and further improves the Makefiles which should hopefully help downstream packagers. Several other minor bug fixes are also included in this release.
Added
- Add install targets for
contrib/directory.
Changed
- Use
gitexecutable instead oflibgit2for all status and index operations to improve compatibility with sparse index checkouts (#195). - Show commit hash in
stg versionoutput when not built from tag. - Use
cargo --lockedconsistently in Makefiles. - Use "patch" extension in temp file name when editing a patch with a diff.
- Updated transient dependencies in Cargo.lock.
Fixed
Stacked Git 2.0.0-beta.2
This second beta release of StGit 2.0 improves a couple use cases related to patch spilling (stg pop --spill and stg spill) as well as updating and reducing StGit's dependencies.
Changed
- Improved error when push conflicts with untracked files (#193)
- Removed a few transitive dependencies by turning-off features in
bstrandchrono. - Update
Cargo.lockwith latest dependencies - Update to
clap3.2 and only use non-deprecated interfaces
Fixed
- Repair
stg spillwhen spilling newly added files and using path limits.
Stacked Git 2.0.0-beta.1
This is the first beta release of Stacked Git 2.0, the Rust reimplementation of StGit.
The main changes from v2.0.0-alpha.2 are man pages and packaging. The Python implementation has been removed from the sources, Makefiles are updated to build and install the Rust implementation, and man pages are now generated from the Rust code. As such, this release is ready for broader consumption by StGit users and downstream packagers.
Removed
- Removed Python implementation of StGit.
Added
- Man page generation in asciidoc format with
stg completion man. This was needed for feature parity with the Python implementation. - Added documentation for patch range syntax to stg(1) man page.
- Added
install-alltarget to top-level Makefile that installs the executable, man pages, html pages, and shell completions.
Changed
- Additional template search paths were added. In addition to looking for template files in
.git/, also look in
$XDG_CONFIG_HOME/stgit/templates/and$HOME/.stgit/templates. This search strategy is consistent with how git looks for the global config file. - Makefile targets are updated such that they are all applicable to the Rust implementation.
- Argument value names are now all lowercase in help and man pages.
- Updated Cargo.lock with latest versions of dependencies.
- Release checklist is updated for Rust implementation.
Fixed
- Minor typo fixes in help strings
- Improved documentation for top-level
stgoptions. - Improve error message in edge case of attempting to push a hidden patch by name when there are no unapplied patches.