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-----