Releases: stacked-git/stgit
Stacked Git 2.0.0-alpha.2
This is the second alpha release of StGit 2.0, the Rust reimplementation of StGit.
This release introduces the stg email format and stg email send commands, which replace the functionality of the removed stg mail command from StGit 1.x. Other changes include repaired compatibility with older versions of git and various repairs and improvements to shell completions.
Added
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.
Changed
- 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 improvments:
- 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
Fixed
- 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
Stacked Git 2.0.0-alpha.1
This is the first official alpha release of StGit 2.0, the Rust reimplementation of StGit.
The change notes below cover both this alpha.1 release as well as the untagged/unreleased alpha.0.
The biggest change from alpha.0 is the addition of shell completions and the stg completion support commands. Shell completions were rewritten from the ground-up, but are hopefully at least as capable as those that shipped with StGit 1.x.
[2.0.0-alpha.1] 2022-06-17
Removed
Added
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.
Changed
- 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.
Fixed
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 comparisions.
- Add missing
-tshort option for--set-treeforstg edit. - Add missing
-kshort option for--keep.
[2.0.0-alpha.0] 2022-05-17
Removed
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.
Added
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.
Changed
- 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 usin 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 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>. stg squashnow allows the full suite of patch edit options, including-d/--diff. Previously only a few message-related options were available.
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.
Stacked Git 1.5
Several pesky bugs repaired along with some other minor improvements.
Thanks to everyone who submitted a PR or reported an issue!
Added
- Add Makefile targets for installing shell completions
stg rebase --interactivelearns 'hide' instruction
Changed
- 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.
Fixed
- 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.
Stacked Git 1.4
This is mostly a bugfix release with a couple minor features affecting
importing patches from mail and stg commit no longer committing empty
patches by default.
Removed
- 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
Added
- 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)
Changed
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.
Fixed
Stacked Git 1.3
This is a hot fix release that repairs a crash regression when using
the stgit.autosign configuration option.
Stacked Git 1.2
This release is choc full of new features, including
stg rebase --interactive and stg rebase --autostash as well as many
quality of life improvements to new, edit, squash.
StGit v1.2 updates the stack metadata. Gone are .stgit branches!
Instead, stack metadata refs are now found in the new refs/stacks
namespace instead of the regular branches namespace (refs/heads). This
change eliminates clutter when looking at branch lists and in various
forms of git log.
An important packaging change to be aware of is that StGit now uses
setuptools instead of the deprecated distutils. This change will affect
downstream StGit packagers, but hopefully StGit vectoring toward modern
Python packaging standards will be a positive in the long run.
Many thanks to Topher Brown for significant contributions to StGit
v1.2!
Deprecated
- 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
Added
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.autostash
configuration 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)
Changed
- 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)
Fixed
- 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 refreshand
stg diff
Internal
- 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
Stacked Git 1.1
The marquee feature of StGit 1.1 is preliminary support signed patches.
StGit now respects Git's commit.gpgsign configuration option to create
signed patches (commits).
Removed
Added
- StGit GPG-signs patches when
commit.gpgsignis set (#12) - Support
core.hooksPathin git config - Add
-Coption forstg importandstg fold(#18)
Changed
- 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)
Fixed
- 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
Stacked Git 1.0
The 1.0 release has been over a decade in the making. While light on new
features, this release represents a major upgrade in StGit's foundation.
Internally, StGit now maintains all metadata in Git objects. This
enables novel workflows involving StGit stacks to be pushed and pulled
from remote repositories using git push and git pull.
And StGit has been fully migrated to Python 3. Dropping compatibility
with Python 2 has allowed StGit's code to become simpler and avoid
error-prone compatibility code. Python 3.5 is the new minimum required
version.
Removed
- 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
Added
- 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
Changed
- 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
Fixed
- 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)
Stacked Git 0.23
Stacked Git v0.23 is primarily a bug fix release that corrects
several bugs found in v0.22 along with several other longstanding
issues.
Removed
- 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
Deprecated
- Python 2.x support is deprecated and will be removed in a future release
Added
- Support html5 output of docs from asciidoc
- Add
--exposeoption forstg pickto allow picked commit message to be customized
Changed
- 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
Fixed
- 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
Internal
- 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
v0.22
Stacked Git 0.22 released
StGit is a Python application providing functionality similar to Quilt
(i.e. pushing/popping patches to/from a stack) on top of Git. These
operations are performed using Git commands, and the patches are
stored as Git commit objects, allowing easy merging of the StGit
patches into other repositories using standard Git functionality.
Download: https://github.com/ctmarinas/stgit/releases/download/v0.22/stgit-0.22.tar.gz
Main repository: https://github.com/ctmarinas/stgit
Project homepage: http://www.procode.org/stgit/
Issue tracker: https://github.com/ctmarinas/stgit/issues
Changes since 0.21:
- 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 releasestg newnow includes patch name in log messagestg branch --createinherits remote correctly from parent commitishstg 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 importhas new --keep-cr option, likegit mailsplitstg refreshandstg editnow reset the commiter information, consistent withstg pushstg edit --diffnow implies--edit- git notes are now preserved when patches are modified
- 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
- Tutorial improvements
- Many additional tests and test improvements
- Remove debian packaging; downstream Debian uses its own anyway
- All stgit commands now use "new" git library infrastructure