- fix(squash): keep author when squashed commits have same author
- chore: update gix to 0.74
- stgit.el: Use
with-eval-after-loadinstead of a homemade version - stgit.el: Use
advice-addinstead ofdefadvice - stgit.el: Fix various checkdoc warnings
- stgit.el: Support Emacs versions < 31
- stgit.el: Move 'stgit-patch-status-face-alist' before first use
- stgit.el: Silence warnings of missing vc variables
- stgit.el: Replace ad-hoc
make-local-variablewithdefvar-local - stgit.el: Use defvar-local instead of make-local-variable
- stgit.el: Enable lexical-binding
- stgit.el: Allow empty descriptions
- stgit.el: Add "--no-color" flag to 'git log' and 'git show'
- stgit.el: Pass patch into
stgit-process-files
- chore: update gix to 0.73
- docs: Update copyright year
- feat(bash): complete patches from chosen branch
- build: statically linked packages for riscv64
- chore: update dependencies
- refactor(stgit.el): use space-based indentation consistently
- fix(stgit.el): various compile warnings
- fix(stgit.el): Replace depercated cl function calls with new style
- fix(stgit.el): checkdoc warnings
- fix(stgit.el): emacs pre-pending "Summary: " to log-edit buffers
- chore: update jiff to 0.2.0
- chore: update winnow to 0.7.2
- chore: resolve winnow deprecations
- chore: update dependencies
- fix: assure branch creation respects fetch-specs of remotes (#522)
- ci: ubuntu-24.04 is now used to build release binaries
- chore: gix is updated to 0.70
- feat: new "name" subcommand
- feat: support calling stg rebase without arguments
- docs: explain stgit.autosign a bit better
- feat: organize subcommands by group in help
- fix(squash): preserve consensus author
- chore: update gix to 0.68
- feat(push): revert overzealous modified status
- updated dependencies
- fix(push): report modified patches in output (#464)
- feat(push): colorize push status string
- chore: update gix to 0.66
- feat: use jiff instead of time
- feat: use winnow instead of nom
- updated other dependencies
- fix(import): --reject should create empty commit (#471)
- docs(changelog): repair heading
- updated dependencies
- feat(rebase): do not rebase to same base
- feat(rebase): show ref names of rebase target
- chore: update gix to 0.64.0
- fix(refresh): handle edited message and patch name (#470)
- fix: harden "stg rebase -i" against patches with multi-line subjects
- fix: prefer --authdate over patch time with author
- updated dependencies
- docs(pop): clarify --spill behavior (#445)
- fix(branch): disallow branch before subcommand (#447)
- refactor: get gix-command via gix with command feature
- Update gix to version 0.62
- fix(bash): fix completion for "committish"
- docs: Update copyright year
- chore: update gix to 0.61.1
- ci: update to wix 4.0.5
- fix: stdout from hooks (#418)
- chore: add category and keywords to Cargo.toml
- build: exclude some paths from crate
- docs(readme): enumerate more package repositories
- chore: update dependencies
- fix: pass stdio for interactive editing (#415)
- fix: update gix-tempfile and gix-lock to 13.1.0 (#413)
- chore: update dependencies
- feat(branch): allow delete of current branch
- fix(branch): delete branch config with branch
- fix: use gix-command for interactive edit (#407)
- fix: improved interactive editor diagnostics
- chore: update gix to 0.58.0 (#407)
- docs: fix dates in changelog
- refactor(branch): use gix to rename config section
- refactor: use gix to remove stgit branch config
- refactor: use gix-command for hooks
- refactor: use non-deprecated indexmap methods
- ci: update cargo-generate-rpm to 0.14.0
- ci: update to upload-artifact@v4
- ci: restore use of IO::Pty in MacOS build
- feat(pop): allow unescaped negative patch offsets
- feat(show): allow unescaped negative patch offsets
- chore: update dependencies
- fix(zsh): short -r opt for
stg series
- chore: update gix to 0.56.0
- chore: update transient dependencies
- feat(delete): --all -A -U -H options
- feat(sink): -T/--above option
- feat(branch): short opts for clone and delete
- fix(zsh): -S option for float, import, and sync
- build: avoid non-portable install options
- test: improved test script portability
- update dependencies
- fix!(uncommit): check for HEAD/top mismatch (#360)
- docs: docstring spelling and formatting fixes
- feat(uncommit): print uncommited patches
- pin serde to avoid using precompiled binary
- update dependencies
- fix(zsh): typo in completion help for stg commit --all
- fix: use canonical Message-ID spelling
- fix(stgit.el): recognize new empty patch marker
- fix(import): Keep first line break in body
- update dependencies
- import-compressed is always enabled, no longer a feature
- unofficial deb and rpm packages
- msi package for Windows
- fix(import): would panic without import-url feature
- fix(import): patch numbers not stripped from name
- use bzip2-rs instead of bzip2 crate
- update dependencies
- feat: Upgrade from ancient stack state formats (#235)
- fix(branch): create based on remote branch (#317)
- fix(import): lost subject lines resembling header (#321)
- fix(import): subject line may be discarded
- chore: update dependencies
- fix: error using on Windows (#273)
- fix: path handling for Windows compatibility
- fix: commit-msg hook run from work root
- fix: avoid "stg.exe" in usage on Windows
- fix: use gitattributes to force LF endings on Windows
- fix: wrap hooks with sh on Windows
- chore: update to gix 0.44.0
- chore: update other dependencies
- fix: rebase with '@' in ref names (#306)
- fix: improved error messages for unrecognized commands
- chore: update to clap 4.2.0
- chore: update to gix 0.43.0
- chore: pin clap minor version
- fix(branch): allow reuse of partially deleted branch names (#290)
- fix(branch): branch list alignment
- fix: running hooks from worktree subdir (#295)
- fix: running from linked worktree (#297)
- fix(float): correct -S in usage string
- fix: correctly show bold command/subcommand in overidden usage
- feat!: remove short -s option for --submodules
- fix!: patch name cannot be {base} or @
- feat: patch locator syntax
- feat: locate branches using @{-N} syntax
- feat(series): Add --reverse option
- feat(series): options for patch offsets and indices
- feat(series): --no-xxx options to override display options
- feat(series): optional value for --short
- feat!: short -s option for --signoff (#245)
- feat(init): add -b/--branch option
- fix!: use -S as short opt for --series
- feat!: constrain refresh -p to visible patches
- feat(series)!: empty patch prefix changed to *
- feat!: spell errors in lowercase
- refactor: use gitoxide instead of git2
- refactor: use time crate instead of chrono
- feat!: update to clap 4.1
- chore: update to latest dependencies
- fix: Error if author or committer is not configured
- fix: Use correct base directory for core.hooksPaths
- fix(rename): colliding patch names
- fix(rebase): repair rebasing to a tag (#265)
- fix(branch): switch branch with detached head
- docs: Repair docstrings being confused as html
- docs: normalized spelling for --branch value
- feat: Configurable push conflict policy (#60)
- feat: Add --committer-date-is-author-date option (#47)
- feat(import): Add --3way option (#36)
- feat(import): Add --directory option (#36)
- feat!: Relaxed stack initialization (#238)
- feat!: Only sign stack based on stgit.gpgsign (#238)
- fix!: Allow "---" separator in messages (#243)
- feat: More descriptive push conflict message (#60)
- feat: Avoid post-edit commits when no change
- chore: Update dependencies to latest versions
- fix: Improved error message for uninitialized stack
- fix: Improve error for re-initialization attempt
- fix(prev): Different error message for empty stack
- fix: Accept full ref name for branches
- fix(zsh): Complete --edit and --diff for stg new
- docs: Document configuration variables
- refactor: Use is-terminal instead of atty
- chore: Update Cargo.lock with latest dependencies.
- fix: Don't generate new patch name until after edit (#239)
- fix: Run shell aliases from top-level of work tree
- fix: Use GIT_PREFIX in built-in aliases
- chore: Update Cargo.lock with latest dependencies.
- fix: improved git version parsing on MacOS
- fix: StGit-specific branch config handling
- docs: fixed many typos
- chore: Update Cargo.lock with latest dependencies.
- docs(init): Add long help for
stg init.
- feat: Enable basic support for
extensions.worktreeconfigto unblock sparse checkout with partial clone (#195).
- docs: More inter-command links
- docs: Normalize quoting
- chore: Update to clap 4.0.22
- docs(readme): Clarify static versus dynamic linking (#230)
- build: Improve Documentation build performance (#229)
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.
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.
- 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 supersedes 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.
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 comparisons.
stg pullandstg rebaserecord updated stack state instead of deferring until the next stack-modifying command to do so.
- chore: Update Cargo.lock
- 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
- 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.
- 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 application with
git apply --3waywhen pushing` (#225) - Zsh completion for
--diff-optaccommodates multiple occurrences
- 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).
- 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.
- 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.
- Add install targets for
contrib/directory.
- 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.
- Repair
stg branch --describepanic when run without arguments - Repair zsh completions for
git branch - Repair
stgit.elto use compatiblestg showcommands (#202). - Repair
stg uncommit --toto work with annotated tags (#203). - Repair
make installto not install cargo tracking files.
- Improved error when push conflicts with untracked files (#193)
- Removed a few transitive dependencies by turning-off features in bstr and chrono.
- Update Cargo.lock with latest dependencies
- Update to clap 3.2 and only use non-deprecated interfaces
- Repair
stg spillwhen spilling newly added files and using path limits.
- Removed Python implementation of StGit.
- 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.
- 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.
- 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.
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.
- Bash completions for shell aliases now fallback to filename completions (#191).
- Help options listings now ensure --color and --help are shown last.
- Various zsh completion improvements:
- Add descriptions for --color values
- Complete -O/--diff-opts values (using
git diff-tree --git-completion-helper) - Comprehend
stg -C <dir>options - Improved/corrected alias expansion
- Improved error messages when completion is attempted outside git repo and/or StGit-initialized branch
- Patch name completions now look and feel like output from
stg series - Complete patch range syntax ('patch0..patchN') for all relevant commands
- Completion for
stg squashno longer allows duplicate patch name arguments - Removed completions for removed
stg mailcommand - Completion for
stg sinkno longer offers hidden patches - Completion for
stg renamecomprehends second, new patch name argument - Completion for
stg diff --rangenow works
- Compatibility with git versions prior to 2.35.0 is repaired by
avoiding using
git apply --allow-empty(#192). - Fish completions for -O/--diff-opts are repaired
stg seriesgains the-i/--commit-idoption to display patches' commit ids.stg seriescolorized output is modified. The main change is that patch descriptions are no longer yellow.stg versionnow displays copyright and license statements.stg versiongains-s/--shortflag to show shortened version info.- The
stgit.diff-optsconfiguration variable is now respected as it was in the Python implementation. 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.
- The
-O/--diff-optsflag now allows both multiple space separated opts in one value as well as multiple occurrences of-O/--diff-optson the same command line. This behavior is compatible with the Python implementation. stg serieshelp output splits options into a few sections.- Dependencies are updated to more recent versions in Cargo.lock.
stg edit --set-treeno longer causes the interactive editor to be implicitly invoked.- Repair build for non-Linux unix targets (including MacOS) and Windows targets.
- 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 comparisons.
- Add missing
-tshort option for--set-treeforstg edit. - Add missing
-kshort option for--keep.
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.stg cloneis removed (at least for the time being). Usegit cloneandstg initinstead.stg mailis removed, but will be re-added or replaced prior to the 2.0.0 release.
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 new.stg idnow accepts the-b/--branchoption.stg spillreplacesstg refresh --spill.
- 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'. - The
--ackand--reviewoptions now optionally take a value. The--ack-byand--review-byoptions are deprecated. - 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 indicate similar valid patch names. 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 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.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 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 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 the--spillflag. Usestg spillinstead.- Updated colorized output for
stg series. 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 can now be limited to certain paths by specifying path limits on the command line.stg showdiff output respects the--coloroption.- The new
--signoffpatch edit option supersedes 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>. stg squashnow allows the full suite of patch edit options, including-d/--diff. Previously only a few message-related options were available.
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.
- Add Makefile targets for installing shell completions
stg rebase --interactivelearns 'hide' instruction
- Picked patch names are preserved when possible (#175)
- Replace
--unappliedoption with--noapplyforstg pick(#174) stg pick --noapplyno longer reverses patch order (#174)- Use
stg versionusessys.executableto get Python version.
- Repair
stg repairwith amended first patch (#163) - Repair corner cases where invalid patchnames could be generated by
stg new,stg uncommit, etc. (#176) stg mailcould crash due to a misspelled reference (#178)- Zsh completion for
stg refresh -pnow completes against all patches (not just applied patches). - Zsh gains missing completion for
stg push --noapply - Minor repair to help for
stg float --noapplyandstg push --noapply - Restore
stg sink --nopushcapability.
- Python 3.5, which became EOL 2020-09-13, support is deprecated and will be removed in a future StGit release
- Python 3.6, which will be EOL 2021-12-23, support is deprecated and will be removed in a future StGit release
- The new
stg import --message-idoption causes the Message-ID from imported emails to be included as the Message-Id trailer in the patch description (#42) - The new 'stgit.import.message-id' config option also enables the Message-Id trailer (#42)
stg importno longer creates "Message-Id" trailer by default when importing patches from email (#42)- StGit works with Python 3.10
stg versionprints a more abbreviated Python versionstg commitwill no longer commit empty patches by default; the--allow-emptyoption may be used to override this behavior (#158)- The
stgit.main.main()function now takes an argv parameter and returns an int return code in most cases instead of calling sys.exit(), thus making main() a bit easier to use as an API.
- Repair stack upgrade with
stg branch --list(#155) - Repair crash in
stg squashwith out of order patches and no name specified (#157) - Zsh completions learn
stg float --noapplyoption - Zsh completion for
stg sinknow allows multiple patches
- Repair crash regression when using
stgit.autosign
- Python 3.5, which became EOL 2020-09-13, support is deprecated and will be removed in a future StGit release
- Python 3.6, which will be EOL 2021-12-23, support is deprecated and will be removed in a future StGit release
stg rebaselearns--interactive; easily re-order, edit, squash, fixup, or delete patches via your editorstg rebaselearns--autostash; stash changes before the rebase and apply them after. Also configurable with thestgit.autostashconfiguration optionstg editcan now rename patches (#119)stg editgains helpful instructions (#138)stg newlearns--verbose, which includes a diff in the editor window (similar togit commit --verbose). This behavior is also configurable with thestgit.new.verboseconfiguration optionstg pushandstg floatlearn--noapplyoption; allows patches to be reordered without updating worktree and deferring merge conflict resolution (#144)stg edit,stg refresh, andstg newlearn the--sign-by,--ack-by, and--review-byoptions which allow those respective trailers' values to be specified by the user on the command line (#92)
- Stack metadata version 5; stack metadata is moved from
refs/heads/<branch>.stgittorefs/stacks/<branch>and the stack metadata file now uses a JSON format instead of the prior custom format; the stack metadata will be upgraded to v5 on first use of this version of StGit; like all stack metadata upgrades, this is a one-way auto-upgrade for existing stacks (#65) - Use setuptools instead of distutils for packaging
- No git or python version checks in setup.py
- Use different dynamic versioning system
- Install
stgexecutable as console_script entry point - More sophisticated search for bash.exe on Windows when running hooks
- The editor window text for
stg squashhas been modified to mirror git's behavior -- the squash edit message now includes all commits (#71) - Binary diffs are no longer shown when with
stg edit -d - Multiple trailers can now be added at once; this is now allowed, for
example:
stg edit --sign --review --ack - Update zsh completion for
stg rebaseto show local and remote heads (#102) - Zsh completions for commands with patch arguments now comprehend the
effect of
-b/--branchand-B/--ref-branch - Zsh completions now guard patch names--one less TAB press to complete patch names in certain contexts
stg importnow extracts theMessage-IDemail header into the patch message (#42)
- Repair crash when attempting to export empty patch (#112)
- Exact command name matches are unambiguous (#110)
- Exiting with an empty
stg editeditor will now abort the edit; previously it would delete your commit message. (#138) - Repair completions when stg.series.description is enabled in config
- Workaround child process reaping race on Windows (#78)
- Repair crash with
stg float --serieswhen bad patch name in series - Repair zsh completion for
stg floatto accept multiple patch names - Repair zsh completion for changed files, affecting
stg refreshandstg diff
- Add link to coverage.io project to CONTRIBUTING.md
- Set smart
exclude_linesdefault for 'coverage' - Expanded test suite for
stg edit - Add pkgtest.py script to help test StGit packaging
- Cleanup .gitignore files
- StGit GPG-signs patches when
commit.gpgsignis set (#12) - Support
core.hooksPathin git config - Add
-Coption forstg importandstg fold(#18)
- Allow importing mail and series from urls (#94)
stg refresh --editmay also use--diffand--diff-opts(#98)stg gotoallows sha1 of a patch instead of patch name (#93)
- Repair hang in
stg pull -m,stg goto -m, andstg push -m - Repair
stg mailto show diffstat of whole series (#104) - Repair MANIFEST.in to include AUTHORS.md and README.md files
- Drop support for Python < 3.5
- Remove previously deprecated
stg publishcommand - Removed contrib scripts:
stg-swallow,stg-fold-files-from,stg-dispatch,stg-whatchanged, andstg-show-old
- The pre-commit hook is now run for
stg refresh - New
--spilloption forstg refresh - Add stgit.series.description config option (#88)
- Official support for Python versions up to 3.9
- Stack metadata format 4. All metadata now kept in Git objects; no more stack state files in .git/patches. A one-way auto-upgrade to format version 4 will occur when StGit commands are run on an existing StGit branch.
- Use
python3in shebangs instead ofpython contrib/stgbashprompt.shis no longer executable- Internal docstrings now use reStructuredText instead of Epytext
- Importing large patches is much, much faster (#66)
- Other performance improvements when dealing with large patches
- Repair diffstat when outside work tree root (#62)
- Use encoded (string) environment variables on Windows (#79)
- Fix
stg pullwhen no upstream is configured (#83) - Fix
refreshcrash with path limiting and files added to index (#85) - Repair
newwith patchdescr.template crash (#87) - Repair
logfrom worktree subdir with patches specified - Repair
importallowing/generating duplicate patch names (#64) - Repair
mail --autoto strip comments after addrs (#91)
- Drop support for Python 3.3; Python 2 (2.6 and 2.7) remain deprecated, but supported for one last release
- Tutorial is removed; it now exists as part of the website
- Python 2.x support is deprecated and will be removed in a future release
- Support html5 output of docs from asciidoc
- Add
--exposeoption forstg pickto allow picked commit message to be customized
- Limit mail diffstat to 72 columns
- Added pyproject.toml file for black configuration
- Minimum Git version is 2.2.0
- Quote stg and subcommand in man page synopsis
- Replaced RELEASENOTES with this CHANGELOG.md
- Replaces Documentation/SubmittingPatches with CONTRIBUTING.md
- Repair MANIFEST.in and generated source dist
- Repair importing mail with ": " (colon space) in subject
- Fix mail cover letter shortlog
- Fix mail cover letter diffstat
stg seriesnow only outputs colors whenisatty()- Repair mail SSL check (#57)
- Repair
stg mailwith both-aand-eoptions (#58) - Remove empty short-opt for
--no-submodulesofstg refresh - Repair build.py for Python 2 with explicit
flush() stgit.refreshsubmodulesadded to sample gitconfig
- Update docs build system from upstream Git docs
- Use coverage contexts to map commands to covered lines
- Improve mail tests
- Use GitHub Actions instead of TravisCI
- Format StGit source using black formatter
- Remove debian packaging; downstream Debian uses its own anyway
- Python 2.x support is deprecated and will be removed in the next StGit release
stg publishis deprecated and will be removed in the next StGit release
stg importhas new --keep-cr option, likegit mailsplit
stg newnow includes patch name in log messagestg branch --renamecan now rename the current branchstg branch --createnow works even if the workspace is dirty, consistent withgit checkoutstg branch --descriptionnow works on both regular and stgit branchesstg edit --diffnow implies--editstg refreshandstg editnow reset the committer information, consistent withstg push- git notes are now preserved when patches are modified
- Tutorial improvements
- Many additional tests and test improvements
- All stgit commands now use "new" git library infrastructure
stg branch --createinherits remote correctly from parent committish- Patch names are checked earlier to avoid inconsistent stack states
- Improved commit data parsing and handling of non-UTF8 encodings
- Repair git error messages when checking stgit version from outside a git repo
- Faster handling of large patches (#44)
- Build reproducibility repairs (Thanks reproducible-builds.org team!)
- Python can now be run with optimizations (
python -O) stg lognow prints trailing newline- Improved command line option parsing for
stg log
stg patches -dcan now output colored diffs.stg publish --overwriteallows branch to be overwritten instead of creating new commits.stg log --cleardeletes the stack's log history. Use with caution.- Fish shell completions for stg.
- Zsh completions for stg.
stg mail --domainoption overrides the host's domain in the message ID.
- Branch protection metadata now captured in config instead of .git/patches/protect file. This updates stgit's metadata format from v2 to v3.
stg diffno longer shows binary diffs by default. Use-O--binaryor add--binaryto stgit.diff-opts in config.- Diagnostic output is now routed to stderr instead of stdout. Diagnostic output is also now sent to stderr unconditionally, i.e. no more isatty() test (#35).
- Converted to "new" lib infrastructure:
show,patches,diff,pick,pull,rebase, andfold.
stg showdetects conflicting --applied and --unapplied options.stg show --statnow shows commit headers.stg patches --diffnow shows proper diff instead ofb'...'repr of diff.stg diff --rangedetects some invalid values (e.g.-r ..).- Date parsing is now more portable, only use platform specific
dateas last parsing option. Affects, e.g.,stg refresh --authdate. - Repaired search path for templates to avoid looking in Python site-packages directory.
- Ensure stdout and stderr are flushed. Rarely affected
stg diff. stg repairwill now fail if extra command line arguments are provided.- Bash completions are now generated in a reproducible manner.
stg edit --diffon an empty patch no longer crashes.stg pickno longer fails when picked commit has empty message (#39).stg rebaseno longer crashes when there are conflicts (#34).stg pickno longer crashes if --name is not provided when picking a regular commit object.- Improved test coverage for: branch, diff, pick, sync,
- New tests for: files, patches, fold, series
- Portable use of iconv, sort, and sed in tests.
- Linting using flake8 and isort.
- All Python code now conforms to PEP-8.
- Updated test infrastructure from git 2.20.
- Parallel tests with coverage (
make -j4 coverage) now works. - Documentation build is not included in code coverage.
- Repaired log end messages when using
STGIT_SUBPROCESS_LOG=debug. - Renamed "dunder" instance attributes to improve debugging.
- Fail faster when patch name has slash ('/') (#24).
- Python 3 support. StGit supports Python 2.6, 2.7, 3.3, 3.4, 3.5, 3.6, and 3.7. PyPy interpreters are also supported.
- Submodules are now ignored when checking if working tree is clean. Submodules are also not included by default when refreshing a patch.
- Config booleans are now parsed similarly to git-config.
contrib/stgit.elis now licenced with GPLv2.- Add continuous integration (travis-ci) and code coverage (coveralls) support.
- Many new test cases were added.
- Repair handling of emails with utf-8 bodies containing latin-1 characters. Also correctly decode email headers containing quoted encoded words.
- StGit's version is now correct/available in the release archive.
commit-msghook support for easier integration with Gerrit, allowing a Change-Id line to be inserted in the commit messagestg mailimprovements for 'Suggested-by:' tag and auto generation of Cc for the cover letter based on all tags in the seriesstg mailbash completion for the --to, --cc and --bcc options based on the content of the [mail "alias"] section of Git configurationstg edit --reviewoption to add a 'Reviewed-by:' tagstg pop --spillfunctionality to allow popping a patch from the stack while keeping its modification in the tree
- Project page details updated (gna.org has been shut down)
- Various fixes and test coverage improvements
- Test suite improvements.
- Print tracebacks to stderr.
- Run test suite in parallel.
- Fix dirty index errors when resolving conflicts.
- Fix --authdate date parsing.
stg delete --topoption for deleting the top patch.stg branch --mergeoption for merging the work tree changes into the other branch.- Support for sending patches both as attachment and inline.
stg mailno longer filters explicitly added--ccsender address.stg refreshwarns when index is dirty.
- Fix for parsing the commit header correctly.
- Several
stgit.el(Emacs mode) improvements. - Fix
stg status --reseterror messages. - HTML documentation fix.
- Email template fixes.
- UI adjustments to better match the Git commands.
stg statusis an alias forgit status.stg reset --hardbehaves similarly to the corresponding git command and option.
stg branch --cleanupoption to remove the StGit metadata for a given branch.stg mailcan usegit send-emaildirectly.- Vim syntax highlighting for StGit commit messages.
- Several improvements to the Emacs mode (stgit.el).
- Many bug-fixes.
- The commands "stg add", "stg rm", "stg cp", and "stg resolved" were removed, since there are corresponding Git equivalents.
- New core infrastructure for repository operations, including:
- Infinite undo/redo operations and corresponding commands.
- Automatic rollback of changes following a failed operation (using transactions)---this ensures that StGit commands either succeed or do nothing. Previously, every commands had its own ad hoc implementation of this.
- Some commands were added, including
stg squash, for combining two or more patches into one.stg publish, for maintaining merge-friendly branches (which are not rebased).stg prev/nextfor printing the name of the previous or next patch in the series.
- The
stg importandstg foldcommands support the-p Noption for stripping leading slashes from diff paths. - The
stg importandstg foldcommands support the--rejectoption for leaving rejected hunks in corresponding*.rejfiles. - New patch identification syntax:
<branch>:<patch>(see documentation for the "stg id" command). - Autosigning of imported patches when
sign.autosignconfiguration option is set. - A powerful Emacs mode for StGit was added to the "contrib" directory. It displays the patch stack in an Emacs buffer, and can handle all common StGit tasks.
- Man pages and an improved tutorial.
- Improved bash tab-completion, automatically generated from the stg command definitions.