Skip to content

Releases: stacked-git/stgit

Stacked Git 2.0.0-beta.3

29 Aug 01:54
v2.0.0-beta.3
6d09a00
Compare
Choose a tag to compare
Pre-release

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 git executable instead of libgit2 for all status and index operations to improve compatibility with sparse index checkouts (#195).
  • Show commit hash in stg version output when not built from tag.
  • Use cargo --locked consistently in Makefiles.
  • Use "patch" extension in temp file name when editing a patch with a diff.
  • Updated transient dependencies in Cargo.lock.

Fixed

  • Repair stg branch --describe panic when run without arguments
  • Repair zsh completions for git branch
  • Repair stgit.el to use compatible stg show commands (#202).
  • Repair stg uncommit --to to work with annotated tags (#203).
  • Repair make install to not install cargo tracking files.

Stacked Git 2.0.0-beta.2

05 Aug 23:02
v2.0.0-beta.2
1d82990
Compare
Choose a tag to compare
Pre-release

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 bstr and chrono.
  • Update Cargo.lock with latest dependencies
  • Update to clap 3.2 and only use non-deprecated interfaces

Fixed

  • Repair stg spill when spilling newly added files and using path limits.

Stacked Git 2.0.0-beta.1

28 Jul 21:14
v2.0.0-beta.1
02c7ed8
Compare
Choose a tag to compare
Pre-release

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-all target 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 stg options.
  • Improve error message in edge case of attempting to push a hidden patch by name when there are no unapplied patches.

Stacked Git 2.0.0-alpha.2

08 Jul 00:18
v2.0.0-alpha.2
7b3c65e
Compare
Choose a tag to compare
Pre-release

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 format wraps git format-patch and provides a mechanism to generate patch emails and optional cover letter in mbox format.
  • stg email send wraps git send-email and allows sending patch emails, either from files generated by stg email format or 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 squash no longer allows duplicate patch name arguments
    • Removed completions for removed stg mail command
    • Completion for stg sink no longer offers hidden patches
    • Completion for stg rename comprehends second, new patch name argument
    • Completion for stg diff --range now 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

17 Jun 15:17
v2.0.0-alpha.1
48258d2
Compare
Choose a tag to compare
Pre-release

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 series gains the -i/--commit-id option to display patches' commit ids.
  • stg series colorized output is modified. The main change is that patch descriptions are no longer yellow.
  • stg version now displays copyright and license statements.
  • stg version gains -s/--short flag to show shortened version info.
  • The stgit.diff-opts configuration variable is now respected as it was in the Python implementation.
  • stg completion command provides runtime support for shell completions.
  • stg completion bash generates bash shell completion script.
  • stg completion fish generates fish shell completion script.
  • stg completion zsh outputs zsh shell completion script.
  • stg completion list shows StGit commands and aliases and is used at completion-time by shell completion scripts.

Changed

  • The -O/--diff-opts flag now allows both multiple space separated opts in one value as well as multiple occurrences of -O/--diff-opts on the same command line. This behavior is compatible with the Python implementation.
  • stg series help output splits options into a few sections.
  • Dependencies are updated to more recent versions in Cargo.lock.

Fixed

  • stg edit --set-tree no 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 -t short option for --set-tree for stg edit.
  • Add missing -k short option for --keep.

[2.0.0-alpha.0] 2022-05-17

Removed

  • stg edit no 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 files no longer accepts -O/--diff-opts. This option was of marginal value since it only had a possible side effect when --stat was being used.
  • stg clone is removed (at least for the time being). Use git clone and stg init instead.
  • stg mail is removed, but will be re-added or replaced prior to the 2.0.0 release.

Added

  • stg new --refresh allows a new patch to be refreshed with changes in one step. The -i/--index, -F/--force, -s/--submodules, and --no-submodules options from stg refresh are also available to stg new.
  • stg id now accepts the -b/--branch option.
  • stg spill replaces stg 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 be git config stgit.alias.st '!git status --short'.
  • The --ack and --review options now optionally take a value. The --ack-by and --review-by options are deprecated.
  • Commands such as stg goto, stg push, and stg pop now 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 branch output is now generally less verbose.
  • stg branch --describe replaces stg branch --description. The --description subcommand 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 --list now produces colorized output. The --color option or NO_COLOR environment variable may be used to affect this behavior.
  • stg branch --rename now supports renaming regular git branches in addition to StGit-enabled branches.
  • stg clean now uses -A and -U short options for --applied and --unapplied instead of -a and -u. This is done for consistency with stg series and stg show.
  • stg import now only recognizes compressed patches by their file extension (.bz2 or .gz) and no longer attempts to decompress usin all known decompressors.
  • stg import support for compressed input files is selectable at compile time using the import-compressed feature.
  • stg import support for importing from a URL is selectable at compile time using the import-url feature.
  • stg log now colorizes output by default. The --color option or NO_COLOR environment variable may be used to affect this behavior.
  • stgit.new.verbose changed to stgit.edit.verbose and now affects edit behavior for edit, refresh, and squash along with new.
  • stg new now accepts -e/--edit and -d/--diff instead of -v/--verbose
  • stg pick now allows a mix of commits and patches to be picked whereas previously only a single commit xor multiple patches could be picked.
  • stg pick now performs a single stack transaction for all the picked patches/commits instead of one transaction per pick.
  • stg rebase --interactive the "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 refresh no longer has the --spill flag. Use stg spill instead.
  • Updated colorized output for stg series.
  • stg series now requires patch range arguments to be both in-order and contiguous. Constraining patch ranges in this manner ensures that the output from stg series is always a valid/correct view of a subset of the series.
  • stg show diff can now be limited to certain paths by specifying path limits on the command line.
  • stg show diff output respects the --color option.
  • The new --signoff patch edit option supercedes the deprecated --sign and --sign-by options. --signoff without its optional value does the same thing as --sign, while --signoff=<value> does the same thing as --sign-by=<value>.
  • stg squash now allows the full suite of patch edit options, including -d/--diff. Previously only a few message-related options were available.

Fixed

  • stg branch --create inherits 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

28 Jan 20:18
v1.5
03fc757
Compare
Choose a tag to compare

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 --interactive learns 'hide' instruction

Changed

  • Picked patch names are preserved when possible (#175)
  • Replace --unapplied option with --noapply for stg pick (#174)
  • stg pick --noapply no longer reverses patch order (#174)
  • Use stg version uses sys.executable to get Python version.

Fixed

  • Repair stg repair with amended first patch (#163)
  • Repair corner cases where invalid patchnames could be generated by
    stg new, stg uncommit, etc. (#176)
  • stg mail could crash due to a misspelled reference (#178)
  • Zsh completion for stg refresh -p now completes against all patches
    (not just applied patches).
  • Zsh gains missing completion for stg push --noapply
  • Minor repair to help for stg float --noapply and stg push --noapply
  • Restore stg sink --nopush capability.

Stacked Git 1.4

27 Oct 14:00
v1.4
262b2fc
Compare
Choose a tag to compare

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-id option 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 import no longer creates "Message-Id" trailer by default when
    importing patches from email (#42)
  • StGit works with Python 3.10
  • stg version prints a more abbreviated Python version
  • stg commit will no longer commit empty patches by default; the
    --allow-empty option 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

  • Repair stack upgrade with stg branch --list (#155)
  • Repair crash in stg squash with out of order patches and no name
    specified (#157)
  • Zsh completions learn stg float --noapply option
  • Zsh completion for stg sink now allows multiple patches

Stacked Git 1.3

27 Sep 01:42
v1.3
0590035
Compare
Choose a tag to compare

This is a hot fix release that repairs a crash regression when using
the stgit.autosign configuration option.

Stacked Git 1.2

26 Sep 13:41
v1.2
7a0760d
Compare
Choose a tag to compare

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 rebase learns --interactive; easily re-order, edit, squash,
    fixup, or delete patches via your editor
  • stg rebase learns --autostash; stash changes before the rebase and
    apply them after. Also configurable with the stgit.autostash
    configuration option
  • stg edit can now rename patches (#119)
  • stg edit gains helpful instructions (#138)
  • stg new learns --verbose, which includes a diff in the editor
    window (similar to git commit --verbose). This behavior is also
    configurable with the stgit.new.verbose configuration option
  • stg push and stg float learn --noapply option; allows patches
    to be reordered without updating worktree and deferring merge conflict
    resolution (#144)
  • stg edit, stg refresh, and stg new learn the --sign-by,
    --ack-by, and --review-by options 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>.stgit to refs/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 stg executable as console_script entry point
  • More sophisticated search for bash.exe on Windows when running hooks
  • The editor window text for stg squash has 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 rebase to show local and remote heads
    (#102)
  • Zsh completions for commands with patch arguments now comprehend the
    effect of -b/--branch and -B/--ref-branch
  • Zsh completions now guard patch names--one less TAB press to complete
    patch names in certain contexts
  • stg import now extracts the Message-ID email 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 edit editor 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 --series when bad patch name in series
  • Repair zsh completion for stg float to accept multiple patch names
  • Repair zsh completion for changed files, affecting stg refresh and
    stg diff

Internal

  • Add link to coverage.io project to CONTRIBUTING.md
  • Set smart exclude_lines default for 'coverage'
  • Expanded test suite for stg edit
  • Add pkgtest.py script to help test StGit packaging
  • Cleanup .gitignore files

Stacked Git 1.1

30 Apr 19:58
v1.1
68f9498
Compare
Choose a tag to compare

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.gpgsign is set (#12)
  • Support core.hooksPath in git config
  • Add -C option for stg import and stg fold (#18)

Changed

  • Allow importing mail and series from urls (#94)
  • stg refresh --edit may also use --diff and --diff-opts (#98)
  • stg goto allows sha1 of a patch instead of patch name (#93)

Fixed

  • Repair hang in stg pull -m, stg goto -m, and stg push -m
  • Repair stg mail to show diffstat of whole series (#104)
  • Repair MANIFEST.in to include AUTHORS.md and README.md files