topgit-0.19.4
tagbb76bd167e167139156b58c6209ebad47a406e90
object 24aed12661b5a4765f3e62ba5f3e7fbafce3afaf
authorKyle J. McKay <mackyle@gmail.com>
Wed, 15 Feb 2017 00:46:16 +0000 (14 16:46 -0800)
TopGit-0.19.4
=============

There be octopuses here!
------------------------

tg update now prefers to perform index-only merges where possible
and will now make octopus merges when only simple in-index merge
resolution can be accomplished.  It now also uses a --continue
mechanism rather than the prior subshell mechanism for conflict
resolution and supports multiple explicit branch names without the
`-a` option.

The tg annihilate, tg create and tg depend add (which now allows
multiple dependencies to be added at once) all run `tg update`
under the hood as the final step so they too can end up creating
an octopus merge.

A new `tg status` command has been added to show the current state
of any pending tg operation that's awaiting user action (along
with a helpful list of the correct commands to use to
continue/abort the action).

Just a few tiny updates
-----------------------

Other than already mentioned in the above section, the `tg tag`
command has a new `--tree` option to force a particular tree to be
used in the tag.

The `tg revert` command now understands the standard `--short=n`,
`--no-short` and `--short` options when showing the contents of a
TopGit tag as well as the new `--hash` option to only show the
hash (lets it work similarly to the `git rev-parse --verify`
command to extract hashes from a TopGit tag).

The `tg revert` command will now accept a bare hash value when
reverting if it's the hash of a TopGit tag.

The `tg summary` command has a convenient `--heads-only` option
that limits the output to independent heads only.

The `tg info` command has a new `--leaves` option to show the
leaves of the TopGit portion of the graph which is extremely
helpful when determining what the correct commit to rebase onto
should be when creating a linearized patch output (it should be
the single line output by `tg info --leaves` -- bad news if more
than one line comes out).

Like Git, TopGit will now accept `@` for `HEAD`.

Correctness, cleanup, git accomodations and minor bug fixes
-----------------------------------------------------------

Some sh-is-bash bugs have been accomodated, the `-r` option should
now really be usable with `tg create` (it's now properly parsed),
any branch names passed to `tg update` using the `-a` option
should now be honored again (broken since 0.18.0), multiple `-b`
options to the `tg export --quilt` command now work, the `tg
revert` command will now detach your HEAD if it modifies the ref a
symbolic-ref HEAD points to, the topgit.autostash boolean now
defaults to true if not set -- it will save your butt so better
it's on by default and a few Git idiosyncracies are now better
accomodated (early detection of no valid ident and supplying
--allow-unrelated-histories to git merge for v2.9.0+, multiple
work trees since v2.5.0, core.hooksPath since v2.9.0).

Git version 1.8.5 or later is now required.  It has actually been
required since 0.19.0 but was not being checked for.  The reason
is the use of the cat-file --batch-check command and its new
`%(rest)` format -- there really isn't any good alternative for it
and Git 1.8.5 was released over three years ago at this point (and
Git versions prior to 2.4.11 have known security issues and really
should be avoided anyhow).

With this release, hopefully all ref ambiguity and quoting issues
have been resolved and any valid Git branch name should now be
useable as a TopGit branch name.

New Top-Bases Location
----------------------

TopGit now allows the top-bases refs to be stored under refs/heads
(as they are really branches) rather than bare refs/.  The new
`tg migrate-bases` command (and associated help) talk about this
and there's a new preference `topgit.top-bases` (can be set to
"refs" or "heads" or left unset for auto) and new `tg --top-bases`
option to show the value for the current repository.

The default is still to store the top-bases in the same refs/
location as always but starting with release 0.20.0 the default
will change to the new location.  All commands should now,
howevver, accomodate either location (but you cannot mix and
match, it's one or the other) automatically detecting whatever is
in use in the repository by default.

Testing Framework
-----------------

There is a new testing framework (adopted from Git but modified)
now present in the "t/" subdirectory.  Currently it only tests the
testing framework but more tests will be added in the future.

Kyle J. McKay (128):
      tg.sh: next version is 0.19.4
      hooks/pre-commit.sh: run grep with LC_ALL=C
      tg-create.sh: fix parsing of -r branch option
      tg.sh: update version comparison code
      tg-create: add some --quiet options
      tg.sh: require Git 1.8.5 or later
      tg-annihilate: minor optimization and cleanup
      bashbug: workaround bash bug set -e exit failure
      tg-rebase.sh: correct more "git rebase" messages
      tg-rebase.sh: stop the --auto-continue if no progress
      tg: better accomodate user.useConfigOnly=true
      tg: avoid echo option misinterpretation
      tg: supply --allow-unrelated-histories option to git merge
      tg-annihilate: delay all updates until the end
      tg-patch: do not show "depends on:" if the list is empty
      tg.sh: add make_empty_commit function
      tg-revert.sh: detach HEAD before reverting its symref
      tg.sh: restore non_annihilated_branches support for args
      tg-tag.sh: add --shell to git for-each-ref and eval
      tg: replace top-bases with "$topbases" and avoid unquoted refs
      tg: remove unnecessary trailing '\' line continuation characters
      tg: replace `...` with $(...)
      tg.sh: remove wc_l function
      tg-update.sh: default topgit.autostash to true
      tg-export.sh: validate and accept multiple -b options
      tg-delete.sh: make a -f -f HEAD detach nicer
      tg: add bin-wrappers/tg to run uninstalled tg
      tg: add testing framework
      Makefile: switch from TG-PREFIX to TG-BUILD-SETTINGS
      testlib: provide config settings to tests and use them
      testlib: make test-lib-functions.sh pure functions
      test-lib.sh: move to test-lib-main.sh
      testlib: make test-lib-main.sh pure functions
      test-lib-main.sh: split initialization into generic and specific
      test-lib-main.sh: minor efficiencies
      testlib: cache generic test setup for multiple test runs
      test-lib-main.sh: do not run any tput commands with --no-color
      test-lib-functions.sh: use '%s\n' instead of "%s\n"
      test-lib-{main,functions}.sh: eliminate use of expr
      t/Makefile: make test target work as well as prove
      test-lib-functions.sh: replace egrep with grep -E
      tg.sh: use command -v instead of which
      testlib: show failing filename and line number on failures
      testlib: move tee and special func defs into functions
      testlib: improve lazy prereq cache eval
      testlib: alter color handling
      test-lib-main.sh: use say_tap and say_color_tap for TAP output
      testlib: find the test library more robustly
      test-lib-main.sh: introduce TESTLIB_TEST_NO_SUBSHELL
      testlib: allow a test script of '-'
      testlib: empty tests fail plus improved lint
      test-lib-functions.sh: make test_must_fail work properly
      t0001: add basic testlib tests
      test-lib-main.sh: let --color enable color output
      testlib: never hide error failures
      testlib: more efficiencies and correctness
      tg: case cleanup
      tg-revert.sh: do not show "no change" lines
      tg-revert.sh: accept hash names when reverting
      tg-tag.sh: when using -g on tgstash show "commit" message
      tg.sh: switch to more efficient vcmp
      tg-revert.sh: convert any top-bases in TOPGIT REFS
      tg.sh: auto-detect proper value for topbases
      tg: purge use of basename, dirname and touch
      tg: minor subshell efficiencies
      tg.sh: make sure the hooks directory exists
      tg: case $topbases before heads
      tg-revert.sh: do reverse topbases conversion if necessary
      tg-update.sh: optimize recursion
      tg: use --count with rev-list
      tg: retire use of fgrep
      tg-revert.sh: accept list --short=n, --no-short and --short options
      tg: refactor quotearg function
      tg-revert.sh: support new --hash option
      tg-update.sh: merge into base all at once
      tg.sh: new --top-bases option to show refs/$topbases
      README: add lots more docs
      tg.sh: avoid modifying a symbolic link pre-commit hook
      tg-update.sh: reduce number of checkouts slightly
      tg-update.sh: perform index-only merges whenever possible
      tg-{revert,update}.sh: quiet confusing auto stash messages
      tg: move $tab and $lf defs into tg.sh
      tg-update.sh: there be octopuses here!
      tg.sh: allow @ to be used instead of HEAD
      tg-summary.sh: default to --with-deps when sensible
      tg-annihilate.sh: suppress `tg update` with --no-update
      tg-create.sh: show `tg create --continue` to continue
      tg-update.sh: allow multiple branch names
      Makefile: use $(commands_in) instead of $(wildcard ...)
      tg-tag.sh: clean up usage message assignment
      tg-tag.sh: allow "anonymous" stashes
      tg-update.sh: rename --skip to --skip-missing
      tg: introduce "tg status" command
      tg: accomodate multiple git worktrees
      tg.sh: make ensure_clean_tree also ensure clean state
      tg-remote.sh: handle new bases location better
      tg-annihilate.sh: ensure_clean_tree & undetach HEAD
      tg-summary.sh: skip annihilated branches
      tg-push.sh: restore "-a" functionality
      tg-update.sh: abolish subshells!
      tg-annihilate.sh: run a single tg update command
      tg-depend.sh: allow adding multiple dependencies
      tg-depend.sh: expunge use of tsort
      tg-create.sh: use tg update to merge extra dependencies
      tg-create.sh: handle -r with new bases
      tg-info.sh: report correct status for new bases location
      README: fine tune update process description
      tg-summary.sh: handle new top-bases location
      tg.sh: handle remote bases in new location
      tg-tag.sh: with --tree=treeish set tag's tree
      tg--index-merge-one-file.sh: add rudimentary -h help
      tg-migrate-bases.sh: migrate top-bases to new location
      tg.sh: respect core.hooksPath mostly
      Makefile: define PROGRAMS variable
      tg.sh: support tg status --exit-code
      tg-summary.sh: add --heads-only option
      tg-info.sh: new --leaves option
      tg-remote.sh: handle new bases location
      README: add a REQUIREMENTS section
      README: explain what tg log does
      test-lib-main.sh: allow --expensive as --long-tests alias
      test-lib-main.sh: allow --xtrace long option name for -x
      test-lib-main.sh: keep same exit code with --tee
      test-lib-main.sh: with --verbose-log allow --verbose-only=... and -x
      test-lib-main.sh: add test_plan function
      test-lib-functions.sh: make test_copy_bytes use dd
      test-lib-functions.sh: implement LASTOK prerequisite
      README*: add testing library documentation
-----BEGIN PGP SIGNATURE-----

iQPcBAABAgAGBQJYo6TYAAoJEFh5SEJa2uvTrDseAIq0BN+rYbo0t0LC63RCxrYE
67cVqBT7SX7fxUJ1kS8Nr8hQaWftGswuXPOTu+xu30jkpNVdCe8WqT3XB4R88TJz
cG8o6RC6LycBpNLONcIhwBOI/HZszN7jqeSV/6tV8ScBm0BbD9fZX3oiZwSaKET7
ZblLZ+HWUU0oao+lZOsIyCvZQXH6kVg5p63TpqbtkfBlv8wZP/VrYgI9ffsXyl31
kL+dIaqP5ojinJb7FpbrMrJzoUai1JNHxW8dydGvYljRSJ8cPzPDr3JoL/eRbosm
jz+yP56baC+bPhPwb/5dLP2mHLSmV/iG0u1oRsU8SuX4R1BJGIaNSgvUYwwns/Lo
cJj4wM3KRRSSno3r+TgDhJ1Qt7C6xtH5JGhTWUqD/QC/DSmI/7lh/viqmx8to2xm
UgSHBxSM5rKGCEED19ylAiq0hwfbkTxTjh9hb5K3OT8UXhr4vs5RqA2XMm2T+DCQ
sNF4yofnnXRCxj8ad5UOSfr3+N+/mdSK/RG/vPLrH0AxzlA+2sEkPqB5fTPAFj/b
RL76quDv0iAGIOjXxe2L4f+9K0jUq02PNPCRRNyk/LoeztiAUM99UittLtjHbiLb
kDZuFqSgU9FPdB426w/pkFzvhusHmws1CFtXbhSeyoArPhrxcIoJk5rkrqdd0K9S
cGo6VHav/fN+P1RWy0KPPhCHviqjMeFgxCWAAvmsgwU39ercpMIFZ9sTYs4PODXJ
U1voLpnJctQ+aH+r/MWDeYV/9QN4gqVIkj4Xcl5n6f6JUerzS8j5NLx5lI3Ls+dO
50OWvZEItTUsEew+8r93zzSZ+FaBWJyKPgJtNW33s6FEmmDYF7FUQYK08rLWDEAY
fy48Fl9fGblHRHPhRwcXPChjbjYBokczJ/r5HU4Riqif4w3erf/jvIx1ElHWTrBQ
jVL+jb8UxpH2aeZ0GT9Pkty+C1ZNM+usggJMD/Zi3g21aWu2vSN+NxHthrCYyOgH
zyySIVB5Fv05/yBGluo2r/BI6exvMUZoiMO9oDJlgW/w1fka0DeJUC0aEyZaAZUa
hxiudNHlBlSQhbdlqBZMg81mE1he4ktxn+m9GygWAyewqvr7VmSN9ILojJMSAnDZ
spdKl7ycupCLhv0RUxHcWah90ox4bW+1H6bbczVI9I1D33g6a5TbrgqFx7A6ACST
3jX/emSWbDnw2fk9t/tU2yL2A4GqLEMv/Oe5lkS5jQxj82+sUJ9EORosPe3lrohn
qX9EkC6/lg2Xdbk5ol0l8hQ67PMYPThXvCZ24W5WGw==
=i7JQ
-----END PGP SIGNATURE-----