Releases: mackyle/topgit
TopGit-0.19.14 - Typically Tawdry
Reminder
TopGit 0.19.4 (2017-02-14) introduced support for a new top-bases location
under heads. This new location will become the default as of the TopGit
0.20.0 release. The current location under refs will continue to be
supported in the future. Seetg help migrate-basesfor more details.
Basics
This is a maintenance release.
Git 2.45.0 changed the way ref logs work (again). Git 2.46.0 broke
updating MERGE_HEAD which broke tg update whenever a manual
merge resolution is required.
- Git versions 2.46.0 and newer are now supported
- Running
make testworks more robustly - contrib/tg-completion.bash now lists all tg subcommands again
As always, there are some documentation updates to correct various
typos and so forth.
Details
The ref log changes in Git 2.45.0 caused some test failures even
though TopGit itself continued to work properly. The test has been
updated to accomodate Git versions 2.45.0 and newer.
Starting with Git 2.46.0, it's no longer possible to use a "git"
command to update MERGE_HEAD (nor FETCH_HEAD, but others such
as CHERRY_PICK_HEAD continue to work just fine). This impacted
tg update whenever a manual merge resolution was required. The
MERGE_HEAD file is now modified directly to bypass this problem.
When running the TopGit test suite (via make test), if there is
a pre-existing exported environment variable "T", it will no longer
interfere with running the test suite. (As always, the tests to
be run can be limited by using make T=<tests_to_run> test.)
Furthermore, there was a peculiar interaction with some shells on
some platforms when running the tests in parallel (a "jobs" value
greater than 1) that could result in the make test process ending
up suspended as a result of a SIGTTIN signal right after the last
test in the test suite was run.
All users of TopGit running Git version 2.46.0 or newer need this
update in order for tg update to work correctly.
Corrections
- tg-completion.bash: update tg command list extraction
- t6100: adjust for Git v2.45.0+ sane reflog behavior reaffirmation
- tg--merging.sh: use update_dotgit_ref wrapper to update MERGE_HEAD
- t/Makefile.mak:
waitafterset -mfor parallel tests - t/aggregate-results.sh: exit with non-zero status if failed tests
- Makefile: avoid accidents with environment variable "T"
Kyle J. McKay (27):
Makefiles: minor clean ups and avoid environment contamination
t1020: use version >= 0.20 for top-bases default change
t4502: add tg contains test with unexpected environment
tg-contains.sh: initialize mindepth to empty
tg-completion.bash: update tg command list extraction
various: correct several nits and typographical errors
t8000: expect success for last two tests with Git v2.38.2+
t6100: adjust for Git v2.45.0+ sane reflog behavior reaffirmation
tg.sh: provide utility function update_dotgit_ref
tg--merging.sh: use update_dotgit_ref wrapper to update MERGE_HEAD
check-non-portable-shell.pl: update from Git
t/Makefile.mak: `wait` after `set -m` for parallel tests
t/aggregate-results.sh: exit with non-zero status if failed tests
Makefile: avoid accidents with environment variable "T"
t/Makefile.sh: make sure T is expanded early
t/Makefile.mak: aggregate all .counts results
README_DOCS.rst: add tg update --continue/--abort/--skip/--stop docs
README_DOCS.rst: correct a few typographical errors
README_DOCS.rst: prefixes are prepended not appended
README_DOCS.rst: clarify automatic linearized patch series req's
README_DOCS.rst: update rest of tg prev and tg next docs
README_DOCS.rst: update `tg checkout goto <pattern>` docs
docs: tidy up build of topgit.html
docs: fuss with typography
COPYING: replace "git-commit" with "git commit"
README_DOCS.rst: fine tune -i/-w description for next/prev
topgit: version 0.19.14
TopGit-0.19.13 - Infernally Internal
Reminder
TopGit 0.19.4 (2017-02-14) introduced support for a new top-bases location
under heads. This new location will become the default as of the TopGit
0.20.0 release. The current location under refs will continue to be
supported in the future. Seetg help migrate-basesfor more details.
Basics
A great deal of behind-the-scenes work has been completed in this release.
Core awk functionality now has full test coverage. Some code refactoring
needed to move forward with some other improvements has been done (and tests
added for it). There are only a very few end-user visible changes:
tg gotois an implicit alias fortg checkout goto, but only if no
topgit.alias.gotohas been explicitly configured.- Both
tg exportandtg importaccept a new--notesoption. - Much of the help has been cleaned up and the text-only versions polished
to make them more readable and more digestible (there's still plenty of
room for future improvements though).
Details
There are several accomodations and updates to handle the idiosyncrasies
of more recent Git versions. Of particular note, --object-format=sha256
repositories (available since Git 2.29.0) are handled properly and all the
tests are automatically run against both the sha1 and sha256 formats when
testing with a version of Git that is version 2.29.0 or later.
There are several bug fixes included in this release.
All users of TopGit are strongly encouraged to update to this release
due to the various bugs that it squashes.
Of particular note is a bug that had been present since 0.19.4 that may have
resulted in a tg update finishing but then tg summary still showing that
things were out-of-date. Most often seen when dealing with TopGit remotes.
A second tg update did correct the issue and although nothing was actually
incorrectly merged, the bug, when triggered, did cause several unnecessary
merge commits to be entered into the repository's history.
Another corrected bug involves use of branch names that contain characters
with an ASCII value less than 0x2F (/). When certain combinations of
such names were encountered, incorrect operation could have resulted.
Other notable bug fixes are highlighted in the next section.
Corrections
- tg-info: make --leaves "describe" lightweight --tags
- t6120-tag-stash.sh: accomodate gpg2
- tg--merging.sh: accomodate Git v2.30.0 checkout-index breakage
- t/t6100: accomodate git symbolic-ref brokenness since v2.29.0
- t/various: introduce git_init function and switch to it
- tg-push: make all pushes atomic
- tg-contains: correctly match all possible tg remotes with -r
- hooks/pre-commit: handle alternate index sequestration
- tg-update: exclude .top* files when using --base
- t6100: compensate for Git v2.31.0+ reflog brokenness
- tg-update: avoid updating remote-removed dependencies
Kyle J. McKay (214):
tg.sh: next version is 0.19.13
t/.gitattributes: add some binary attributes
INSTALL: add missing end-of-line
README: correct typo in ref name
t/README-TESTLIB: fix five typos and two grammos
t/README: remove internal 's from sample
t/README-WRITING-TESTS: correct typo
test-lib-functions.sh: pass --git-dir for git based test_diff
topgit_deps.awk: omit self loop lines
topgit_deps.awk: omit duplicated .topdeps lines
topgit_deps.awk: clarify and refine exclbr/inclbr operation
topgit_deps.awk: always remove files when requested
topgit_deps.awk: omit annihilated self deps
t1370: test topgit_deps.awk functionality
tg--awksome.sh: mention ref_match in more require lines
topgit_recurse.awk: improve operation description
topgit_recurse.awk: always remove files when requested
tg-update.sh: correct typo in function comment
ref_prefixes.awk: minor efficiency
ref_prepare.awk: minor efficiency
topgit_branches.awk: minor efficiency
topgit_msg.awk: minor efficiency
t0001-sanity.sh: add function word count test
topgit_recurse.awk: init even with no input
topgit_recurse.awk: elaborate on functionality
topgit_recurse.awk: make multib mode ignore dupes
t0001: add a sanity test for `cat -` just in case
topgit_recurse.awk: clarify and refine exclbr/inclbr operation
t1380: test topgit_recurse.awk functionality
topgit_navigate.awk: correct typos and elaborate
topgit_navigate.awk: always remove files when requested
tg--awksome.sh: correct typo in error message
topgit_navigate.awk: disallow outgoing links from annihilated
tg-info: make --leaves "describe" lightweight --tags
topgit_navigate.awk: elaborate and correct text comments
topgit_navigate.awk: clarify and refine exclbr/inclbr operation
topgit_navigate.awk: count the step off of nil
topgit_navigate.awk: roots not always equal to starts
tg: add implicit topgit.alias.goto="checkout goto"
ChangeLog: use correct name of smudger in comment
topgit_navigate.awk: after prune recalculate incoming and outgoing
t1390: test topgit_navigate.awk functionality
t0001: advance some awk checks to "expect success"
Makefile.mak: correct typo in comment
Makefile: cleanup and polish
Makefile.mak: mention a few more settings
create-html.sh: minor nit use double-quotes
t/Makefile.mak: use TESTLIB_TEST_LINT not TEST_LINT
check-non-portable-shell.pl: update from Git
test-lib-main.sh: expunge use of perl
test-lib-functions.sh: add awk() function redirect
t/t1200/maketable: replace perl version with awk version
tg.sh: do not pass arguments to dot command
tg-update: factor out merging code
tg.sh: introduce a show-toplevel helper function
t6120-tag-stash.sh: accomodate gpg2
README: rename to README_DOCS.rst
Makefile.mak: improve html generation
README: add a descriptive Read Me
README: expand README with example
check-non-portable-shell.pl: update from Git
Merge branch 'show-toplevel-helper'
tg.sh: make .topdeps/.topmsg cache write atomic
comments: eliminate clumsy grammos
t/test-lib.sh: correct typo in comment
test-lib-main.sh: make GIT_PATH test setting actually work
tg.sh: initialize TRAPEXIT_ to empty
tg--merging.sh: accomodate Git v2.30.0 checkout-index breakage
t/t0002: add an explicit test for GIT_CONFIG_PARAMETERS
t/t2000: add --quiet option to `git init`
t/t6100: accomodate git symbolic-ref brokenness since v2.29.0
t/various: introduce git_init function and switch to it
README: future proof example against Git version 2.28.0 and later
README: add topgit.top-bases setting to example
t/README: correct yet more typos
t/README: quote the TAP regex's and mention they are PCRE
t/t6100: add more reflog verify-ref tests
tg-*.txt: improve the readability of the .txt help
README_DOCS.rst: update git mailing list archive link
t/test-lib-functions.sh: minor checkbashisms adjustments
t/test-lib-main.sh: minor checkbashisms adjustments
README_DOCS.rst: include custom tg tag color config info
README_DOCS.rst: update synopsis output
README_DOCS.rst: correct tg tag help for --clear
Makefile: trivial whitespace change
awk/ref_match.awk: do not choke on '&' in ref names
awk/ref_match.awk: always sort refs without trailing '/'
README_DOCS.rst: correct spelling error
README-TESTLIB: correct yet another typo
awk/topgit_navigate.awk: typo be gone
awk/ref_prepare.awk: grammo be gone
awk/ref_prefixes.awk: bring comments up to date
t1301: test special ref name characters with ref_match.awk
tg*.sh: use git mktree instead of git hash-object -t tree
README: mention tg push and fuss with docs mention
README_DOCS.rst: do not split ``code text`` across lines
t/Makefile.mak: add trap on INT for non-prove aggregate results
t/test-lib-main.sh: make sure test_auh is correct
t/test-lib-main.sh: use POSIX for TESTLIB_TEST_PARENT_INT_ON_ERROR
t/test-lib-{main,functions}.sh: prohibit perl in tests
test-lib*.sh: remove the last use of PERL_PATH
test framework: add underpinnings for Git sha256 support
t0002: update for Git hash algorithm sha256
test-lib-*.sh: make sure GIT_DEFAULT_HASH gets into the test cache
t1050: add Git sha256 support
tg: initial Git sha256 hash algorithm support
t1200: add support for Git sha256 hash algorithm
tg: improve Git sha256 hash algorithm support
t4400: update for Git hash algorithm sha256
t8100: update for Git hash algorithm sha256
t8300: compensate for Git sha256 patch-id behavior
t6120: update for Git hash algorithm sha256
t6100: update for Git 2.31+ and hash algorithm sha256
t6100: expunge test_tolerate_failure items
tg-update.sh: issue more messages when post-update checkout fails
tg-update.sh: avoid false positive git checkout complaints
t/t*.sh: do not ignore failures in for loops
tg-push: make all pushes atomic
README_DOCS.rst: include hint about gc.rerereResolved
README_DOCS.rst: use t/release instead of release
README_DOCS.rst: update URL from http: to https:
t1060: update rev-parse --git-common-dir test
tg.sh: accept -P as alternative for --no-pager
tg-update.sh: correct typo in help
README_DOCS.rst: mention --paginate and -P options
README_DOCS.rst: replace man git-config with git help config
tg-push: pass --follow-tags and --no-follow-tags options to git
tg-revert.sh: make -h output accessible without tg.sh
tg-update: keep state in tg-state directory
t/README-TESTLIB-TG: add missing closing formatting character
README_DOCS.rst: correct tg update post-update state
t5060: test tg update --continue functi...
TopGit-0.19.12 - Compatibility Conundrum
Reminder
TopGit 0.19.4 (2017-02-14) introduced support for a new top-bases location
under heads. This new location will become the default as of the TopGit
0.20.0 release. The current location under refs will continue to be
supported in the future. Seetg help migrate-basesfor more details.
Tiny tweaks to provide improved compatibility with various earlier Git
versions.
The minimum Git version required is now 1.9.2 (released 2014-04-09). This
reflects a bump up from a minimum of Git version 1.8.5 for two reasons:
- A feature (exclude pathspec magic) required for the 0.19.7 changes was
actually introduced in Git 1.9.0 not Git 1.8.5 so the minimum version
should have been updated to 1.9.0 at that point. - A feature (
update-ref --stdin) also required for the 0.19.7 update,
which was actually introduced in Git 1.8.5, turns out not to work correctly
until a bug fix for it was included in Git 1.9.2.
There's no pressing need to pick up this update when running a Git version
that is greater than or equal to 2.10.0. Users of Git versions that are
greater than or equal to 1.9.2 but less than 2.10.0 probably want this update.
Corrections
- Don't use
--create-reflogbefore Git 2.10.0 (which added it) - Don't pass
--togit cat-fileas it's unnecessary and breaks Git < 2.5
Kyle J. McKay (6):
tg.sh: next version is 0.19.12
tg: avoid passing '--' options terminator to git cat-file
tg.sh: require Git 1.9.0 or later
tg.sh: require Git 1.9.2 or later
tg.sh: omit --create-reflog option prior to Git version 2.10.0
topgit: version 0.19.12
TopGit-0.19.11 - Speed Bump
Reminder
TopGit 0.19.4 (2017-02-14) introduced support for a new top-bases location
under heads. This new location will become the default as of the TopGit
0.20.0 release. The current location under refs will continue to be
supported in the future. Seetg help migrate-basesfor more details.
A small speed bump most noticeable with tg summary, a few regression fixes,
minor enhancements and more tests.
Enhancements
- Enormous reduction in subshell creation reaps a minor speedup
tg infonow understands the-iand-woptions- Two stage anonymous stash by first moving old TG_STASH to ORIG_TG_STASH
tg pushwon't push out-of-date branches without--allow-outdated- The default push remote can be configured as
topgit.pushRemote
Corrections
tg info --leavesworks properly again (broken since 0.19.8)- The
-iand-woptions now work as intended withtg summary
Kyle J. McKay (72):
tg.sh: next version is 0.19.11
t2000: add kludge for ancient broken shells
README: update Magit links
test-lib-functions.sh: prereqs may use whitespace
tg: repair tg info --leaves regression
t6000: test tg revert --list with short hashes
tg.sh: refresh short ref cache as needed
tg-revert.sh: honor --hash when listing all refs
tg: reduce subshell creation phase I
tg: reduce subshell creation phase II
tg-{export,push}.sh: avoid using "true" and "false" for testing
tg: improve "set -e" friendliness
pre-commit.sh: minor efficiencies
tg: reduce subshell creation phase III
t1360: test topgit_msg.awk functionality
README: mention effect of tg tag --drop ...@{0}
tg-mail.sh: properly quote temp file name
tg.sh: quote alias test
tg.sh: provide for recurse_deps_internal run_awk_topgit_deps options
tg-summary.sh: restore correct -i and -w operation
t4400: test -i and -w informational options
tg-info: support -i and -w options
tg: sanitize `git branch --contains` output
tg-info.sh: validate non-TopGit committish shortcut answers
t4400: add tests for tg info -i/-w options
tg-tag.sh: show correct name in HEAD ref log displays
tg-tag.sh: only supply --updateref when dropping @{0}
tg-tag: when dropping @{0} avoid deleting the ref
tg-tag.sh: preserve ref when dropping @{0} reflog entry
test-lib: make prereqs list look nice
tg-tag: avoid --stale-fix if possible when --drop'ing
tg-tag: avoid unreliable --stale-fix entirely
tg-tag.sh: use correct git dir for linked HEAD
t6100: test tg tag reflog manipulations
tg-tag.sh: properly --clear reflogs
t6100: add tag --clear tests
tg-tag: never try to delete one's HEAD
tg-tag.sh: carefully resolve full ref names
t6110: test tg tag --delete
t6100: add --no-type tests
tg-tag.sh: improve parsing of --all option
tg-tag: detach HEAD before deleting its symref
tg: tidy up "detaching" messages
tg-revert.sh: don't forget to stash
tg-tag: last gasp save in ORIG_TG_STASH
test-lib-functions.sh: fix test_external test counts
test-lib-main.sh: check --run before prereqs
tg.sh: accept --paginate as --pager alias
tg.sh: mimic Git alias expansion more closely
tg-tag.sh: do not require ident with --refs
tg.sh: disambiguate @{upstream} for rev-parse
tg-revert.sh: try to tame rev-parse --symbolic-full-ref
tg-tag.sh: show ambiguous refname error
tg-tag: prefer refs/heads disambiguations
t6120: add tg tag and stash tests
tg-revert.sh: keep matching tags when reverting
tg-tag.sh: send "not up-to-date" message to STDERR
tg-push: check for out-of-dateness before pushing
README: minute wordsmithing
test-lib-main.sh: make sure GIT_PATH and PERL_PATH are absolute
tg-info.sh: show needed remote branch updates
tg-info: omit annihilated dependencies from list
tg-push.sh: improve branch name checks
tg-push: pass more options through to git push
install-html: allow RST2HTML to override rst2html
t/Makefile.sh: correct variable name
Makefile.mak: allow parallel bin-wrappers creation
test-lib.sh: fully construct UNSET_VARS before test-lib-main.sh
tg-info.sh: omit ignored dependencies
t7000: test tg push
tg-tag.sh: remove shell-confusing, unnecessary space
topgit: version 0.19.11
TopGit-0.19.10 - Pedantically POSIX
Reminder
TopGit 0.19.4 (2017-02-14) introduced support for a new top-bases location
under heads. This new location will become the default as of the TopGit
0.20.0 release. The current location under refs will continue to be
supported in the future. Seetg help migrate-basesfor more details.
Minor nits and updates, but nothing earth shattering. Some "deprecated"
POSIX syntax has been removed and there are now over 1000 individual tests in
the test suite!
Kyle J. McKay (40):
tg.sh: next version is 0.19.10
README: correct various typographical errors
tg.sh: add '-u' option to wayback-updates alias
tg.sh: make "tg help st" work
README-WRITING-TESTS: update test_plan and test_when_finished info
create-html-usage.pl: do not strip ````` lines
README: correct "The Update Process" description
t1330: test topgit_branches.awk functionality
*.sh: purge use of test '-a' and '-o' ops
tg: eliminate use of xargs -0
tg.sh/pre-commit.sh: do not rely on word-splitting inside braces
tg--awksome.sh: run_awk_topmsg_header requires topgit_msg_prepare
tg-checkout.sh: allow +[n] and -[n] aliases
tg-checkout.sh: fix typo
tg-checkout.sh: warn about future removal of bare "tg checkout"
t1060-mergesetup.sh: fix typo in comment
tg: improve handling of configured core.hooksPath
tg.sh: completely ignore hooksPath until setup_hook
README: remedy incorrect formatting instructions
tg.sh: avoid trailing space in fullcmd
tg-update.sh: include real branch in fullcmd
t0001: tolerate failure involving xargs -0
tg.sh: move tmpdir cleanup into its own function
tg: tickle gc --auto when appropriate
tg-update.sh: add missing '{' ... '}' around && || logic
t5050: test bug fixed by recent logic correction
tg-summary.sh: omit superfluous rdeps-once trailing '^'
.gitattributes: mark some files as eol=lf
Makefile.mak: sed from stdin to stdout
README-TESTLIB: vanquish yet another typo
spelling: annihildated is not a word
topgit_*_prepare.awk: do not append ^{} to missing
topgit_*_prepare.awk: carefully append ^{blob} to missing
topgit_*_prepare.awk: do not incorrectly spawn misscmd
topgit_msg_prepare.awk: make withan=1 withmt=0 work
t1340: test topgit_msg_prepare.awk functionality
t1350: test topgit_deps_prepare.awk functionality
tg.sh: setup_hook even more carefully
topgit_deps.awk: strip trailing \r off .topdeps lines
topgit: version 0.19.10
TopGit-0.19.9 - Regression Relief
Reminder
TopGit 0.19.4 (2017-02-14) introduced support for a new top-bases location
under heads. This new location will become the default as of the TopGit
0.20.0 release. The current location under refs will continue to be
supported in the future. Seetg help migrate-basesfor more details.
This release is a bug fix and maintenance release primarily intended to
correct the regression introduced in 0.19.8 that prevented tg update from
properly handling remote branches with an out-of-date base with respect to its
remote head.
Many additional tg update tests have been added to the test suite to greatly
improve test coverage of both local and remote updating.
A very few extra minor cosmetic updates are included as well.
Kyle J. McKay (10):
tg.sh: next version is 0.19.9
tg-export: strip [RELEASE] whenever stripping [BASE]
t5010-update-local.sh: test non-remote update handling
t5020-update-remote.sh: test remote update handling
tg-update.sh: make remote updates work again
tg-update.sh: show correct blocking ref in message
t5030-update-newbranch.sh: test remote update new branch handling
t5040-update-octopus.sh: test octopus update handling
tg-update.sh: run only one copy of sed, not three
topgit: version 0.19.9
TopGit-0.19.8 - Wayback to POSIX Proficiency
Reminder
TopGit 0.19.4 (2017-02-14) introduced support for a new top-bases location
under heads. This new location will become the default as of the TopGit
0.20.0 release. The current location under refs will continue to be
supported in the future. Seetg help migrate-basesfor more details.
This release is primarily a bug fix and maintenance release. A few extra
options may have slipped in here and there. The test suite has grown immensely
which should help reduce future regressions. One new feature did rear its head
way back at the last minute though.
POSIX Propaganda
With this release TopGit should be fully POSIX compliant once it has been
installed. Installation and testing also require Perl, but as of this release
even the test suite can be run with just POSIX + Perl. (If you want to make
the .html docs you will also need a .rst processor, but "shhhh" about that.)
It even works with some awks (I'm looking at you "mawk{1}") that aren't
actually fully POSIX compliant.
Maintenance Maintenance Maintenance
A veritable plethora of fixes pervades this release. There are now over 875
individual tests in 33 files. Some things that probably should have worked
before (like tg export --quilt --force and @ and HEAD being accepted as
aliases for the current branch everywhere it makes sense) do now.
Some more commands that should have worked in a read-only bare repository but
didn't now do.
There's more tolerance for "not-quite-POSIX" shells when running in what they
claim to be is a "POSIX" mode but really isn't all that. Before choosing one
of them as TopGit's shell be sure to first run the test suite using that shell.
Not to worry, both bash and dash (when running as /bin/sh) are fine.
Bare branches (a TopGit branch with neither a .topmsg nor a .topdeps file) are
officially tolerated. They mostly worked before; they work better now.
And speaking of .topdeps files, manually edited ones (naughty, naughty) that
are not quite up to snuff should cause fewer problems now.
An overall overhaul of tg summary resulted in a nice speed boost there
(probably the last it's likely to get as its stone has been squeezed dry now).
Options Galore
The tg export --quilt mode now understands how to --force outputting to a
directory that already exists (and no longer commplains if the directory does
exist but is empty).
A new branch can be tg created using --no-update to skip the final update
when more than one dependency is listed.
The tg summary command in list mode will include annihilated branches now
if you ask nicely (--list --verbose --verbose or just -vvl) and tg info
will even describe them properly too.
But back to tg export and its two other --collapse and --linearize modes;
It got a new -s <mode> option to specify how to handle subject lines
primarily focused on removal of [PATCH] and similar tags. Instead of blindly
stripping everything off, the default now is to delicately remove only the
first [...] tag and only if it's one of the four TopGit knows about (those
would be "PATCH", "BASE", "ROOT" and "STAGE"). This should result in patches
that are imported and then exported keeping their same subject line. But there
are five possible modes (including the previous "strip it all off") available
in an attempt to make sure everybody gets happy.
And last but not least there's one new global option...
The Wayback Machine
A new feature slipped into this release at the last minute. It comes with a
new global -w <tgtag> option and a new shell subcommand.
By specifying the name of a tag created using tg tag (or even automatically
via the auto stash functionality), a TopGit command can be run in the context
of the refs namespace recorded in that tg tag. Either with all other refs
present and unchanged or with all other refs pruned away.
This functionality can be particularly useful in combination with tg export
to easily produce copies of older versions of a patch set.
The global -w option only permits use with read-only TopGit subcommands and
the new shell subcommand.
The new tg shell command will spawn a new copy of the shell (or execute a
specific command) with the current working directory set to a temporary
repository that shares the objects but has had its refs namespace altered to
the specified wayback state. When the shell is exited it's all cleaned up
automatically, but there's even an option to place that "temporary" directory
somewhere else so that it can persist and be reused.
Kyle J. McKay (188):
tg.sh: next version is 0.19.8
Makefile: add "target" target
Makefile.sh: add v_sort function
Makefile.sh: add v_filter and v_filter_out functions
Makefile: make sure $(MAKE) is passed to Makefile.sh
Makefile.mak: compute TG-BUILD-SETTINGS differently
Makefile.sh: support sub makes
t/Makefile: switch to gnomake system
t/Makefile.mak: improve DEFAULT_TEST_TARGET handling
Makefile: run $(MAKE) -f Makefile.mak using -e
tg-create.sh: add missing ">/dev/null" to rev-parse test
tg-create.sh: allow "@" and "HEAD" as dep shortcuts
test-lib-tg: consistently use "tg_test" or "TG_TEST" prefix
Makefile.mak: work around broken sh behavior
Makefile.sh: make sure CONFIGMAK is always set
Makefile.mak: do not use non-POSIX make -C option
awk: make sure close function calls use parentheses
README: fix several typos
Makefile.sh: correct default location of hooksdir
hooks/pre-commit: make it work properly in test environment
README: add topgit.{cc,cc,to,subjectPrefix} links to vars section
README: minor tg-checkout doc updates
t/test-lib-main.sh: include $this_test in comments
README: add a "TESTING TOPGIT" section
t/Makefile.mak: introduce TESTLIB_MAKE_OPTS make variable
t/Makefile.mak: avoid bloat when making self
test-lib: bail quickly and with line number
test-lib: move BASH_XTRACEFD assignment into test_lib_main_init_specific
test-lib-main.sh: workaround broken bash
test-lib-main.sh: enable line numbers when using bash
test-lib-functions.sh: allow test_commit to skip the tag
t/README*: cleanup whitespace and typo errors
README-TESTLIB: improve test_tick documentation
test-lib: introduce TRASHTMP_DIRECTORY and test_get_temp
test-lib: make test_when_finished fully functional
Makefile.sh: add dependency lines for awk scripts
awk/ref_match.awk: minor optimizations and typo fixes
test-lib-functions.sh: initialize empty $test_tick
test-lib-functions.sh: test_commit: ignore more invalid tag names
test-lib: change default author and committer names
test-lib-functions-tg: tg_test_create_branches does it all
t8000: add tests for broken git mailinfo -b
hooks/pre-commit.sh: remove superfluous trailing ';'
all: unset ksh errors
test-lib.sh: correct typographical error in comment
all: unset and unalias zsh traps
tg.sh: update/add some comments
test-lib-functions: add wc wrapper
tests: renumber t0001 and t0002
test-lib-main: bless use of $color for debug output
test-lib: improve test_cmp_rev utility function
test-lib: introduce test_clear_when_finished
t/t0003-testlib-git.sh: add tests for git utility functions
awk/ref_match.awk: minor optimizations
testlib: allow "test_plan'?'"
t2000: test hook and merge setup happens
testlib: add an example for test_pause
testlib-tg: add tg_test_setup_topgit function
t2020: test bare mode hook restrictions
t2010: basic hook sanity checking tests
t2030: test hook sequestration
t0001: add test for broken awk implementation
t0001: test for awk pattern {m[,[n]]} support
awk: don't mock mawk
gnomake.sh: move Makefile.sh utility functions to separate file
tg.sh: add internal command --awk-path
ref_match.awk: add dupesok knob
ref_match.awk: correctly match multiple patterns
t1300: test ref_match.awk functionality
t0001: add POSIX awk ENVIRON and POSIX tr NUL tests
Makefile: always clear .SUFFIXES before setting it
test-lib-functions.sh: make test_expect_code work with set -e
t1310: test ref_prefixes.awk functionality
tg.sh: add fatal function
pre-commit.sh: complain about everything
tg: refactor remote top-bases sniff out code
t2020: include more commands in setup checks
tg.sh: allow --top-bases to work for remotes
tg: document and tolerate "bare branches"
tg-info.sh: support --dependencies for the pedantically challenged
README: add missing verbiage to correct grammatical error
tg.sh: do not do hook or merge setup in a bare repository
tg: call ensure_work_tree where needed
test-lib-functions.sh: add test_diff that uses git diff --no-index
tg: find added lines missing final \n
.topdeps: tolerate missing \n on last line
tg-export.sh: minor correction and efficiency
tg-create.sh: fix code typo
aggregate-results.sh: purge expr and show all failures
tg-export: understand more ranges and purge expr
ref_prepare.awk: improve default headbase for multi-level remotes
ref_prepare.awk: remove refs file on request even if not read
tg-create: require format.signoff for active sob line
tg-info.sh: show a message when the remote base is missing
testlib: pimp out test_plan
gnomake: suppress unwanted gratuitous "Entering directory ..." lines
ChangeLog: start one
t0001:...
TopGit-0.19.7
Awking Awesome Acceleration!
It was supposed to be such a quick and simple update, surely it
would be done in no time at all. And then it started growing...
THE BIG AWKING CHANGE
By moving the .topdeps traversal code into awk (strictly POSIX awk), everything
has become stupendously faster. For example "tg summary --verbose --list" is
now nearly instant ("--verbose" is new and includes the subjects in the list).
The sole remaining bottlenecks are the git commands; generally checking for
some kind of branch containment (similar to "git branch --contains") or
performing actual merge operations themselves.
The results of branch containment checks continue to be cached and auto-updated
on an as-needed bases, but now with index-only merging support there's likely
little, if any, more water left to be squeezed out of the performance stone.
NEW COMMAND
"tg contains" (the original driver for this set of updates) shows what
TopGit branch a commit logically belongs to. For example, after finding
something with "git log -S", passing the result to "tg contains" will show
which TopGit branch (if any) that commit logically belongs to (and where
any "fix" should therefore end up).
POSIX MAKE INSTALLS
While the tests still require gnumake, the build and installation now require
only a POSIX compatible make (and POSIX compatible utilities).
UNIFIED "NEXT" AND "PREV" MEANINGS
-
The "tg prev" and "tg next" commands now show you exactly where the
corresponding "tg checkout next" and "tg checkout prev" will take you. -
"tg info" understands new "--deps" and "--dependents" options if that's
what was really wanted in the first place. -
A new "NAVIGATION" section has been added to the documentation with
copious explanations and pictures explaining exactly what "next" and
"prev" really are, where the alternate "push", "pop", "child" and "parent"
terms come from and how to see the full patch series list or check it
out using "tg info --series" or "tg checkout --series" (yup those are
new too). -
Along with this overhaul, "tg checkout", "tg next" and "tg prev" got
a few new options. And, notabley, "tg checkout n" and "tg checkout p"
are shortcuts for "tg checkout next" and "tg checkout prev" respectively
(to use something else just employ the new "topgit.alias.*" functionality).
OTHER UPDATES
Not necessarily a comprehensive list here, but these are notable.
-
Fixed a 0.19.6 bug when "tg update" was returning to a detached HEAD
(If you never ran "tg update" with a detached HEAD you'd not see the bug) -
Using TopGit with "git worktree add" repositories should work better now
-
"topgit.alias." now works for "tg" like "alias." works for "git"
-
"tg summary" has a new column showing "needs merge" branches
(these are the ones with changes that are causing others to be out-of-date) -
Both "tg create" and "tg update" now take a "--base" option (aka --no-deps
for "tg create"), to simplify "[BASE]" TopGit branch setup and maintenance -
"tg update" now automatically just keeps going and going if "rerere.enabled"
is true and "rerere" was able to resolve all merge conflicts -
tg checkout will pass along --ignore-other-worktrees (aka --iow), --force
(aka -f), --quiet (aka -q) and/or --merge (aka -m) to git checkout now -
The "--heads" option now works as originally intended in various places
-
"tg patch" can add a missing "From:" header to its output patch with --from
("git am" really, really, really doesn't like patches without "From:" lines) -
"tg" can now be used on read-only repositories! The temporary trees some
operations need now end up in an "alternate" object store that's removed
when the command completes and while this temporary location is inside
TopGit's temporary directory, that now auto-relocates elsewhere if the
repository is read-only. Obviously, "tg" commands that make changes still
won't work on a read-only repository. :) -
The ".topfiles" (i.e. .topdeps and .topmsg) are now kept out of the bases
when merging updates from dependencies into the base. They are not
logically part of the base and this keeps the bases cleaner. "tg create"
now also makes sure the initial base has no ".topdeps" or ".topmsg" either
which nicely cleans up the ugly diffs of one TopGit branch's .topfiles
against another's in "git log -p" output. -
Merging remote branch updates into the local branch no longer quietly
discards .topmsg and/or .topdeps changes from the remote branch version
(previously they might have been picked up or might have been discarded) -
"tg log" now supports "--compact" and "--command=" to use something
other than plain "log" to show the log -
A new "--no-pager" global option for all "tg" commands works like Git's
-
"tg tag" allows the first parent of a consolidation commit (if needed) to be
explicitly selected
Kyle J. McKay (116):
tg.sh: next version is 0.19.7
tg.sh: st[atus] --help
Makefile: support V=1
test-lib-main.sh: when $HARNESS_ACTIVE use exit 0
tg status: show upstream info and implement verbose
tg.sh: verify_topgit_branch correctly for 'HEAD' on checked out base
tg: improve multiple worktree support
tg status: behave reasonably in a bare repository
tests: support building and using helpers
tests: add recurse_deps_internal helper
tg.sh: add v_verify_topgit_branch function
tg-checkout.sh: pass along a --force option to git checkout
summary/revert: make --heads DWIM and add alternative
tg-info.sh: make --heads work as intended
t/helper/branch_needs_update.sh: needs_update testing helper
tg-contains.sh: new command to show containing TopGit branch(es)
tg-contains.sh: be cognizant of annihilated branches
tg-info.sh: show dependents with --verbose
tg-summary.sh: include new '*' "needs merge" column
tg.sh: allow --top-bases to work outside a git dir
tg.sh: add topgit.alias.* support
tg-migrate-bases.sh: handle HEAD symrefs
helpers: make -u option actually work and fix a usage typo
test-lib-functions-tg.sh: introduce TopGit-specific test functions library
testlib: add TEST_HELPER_DIRECTORY and some doc updates
tg.sh: recurse_deps provide _dep_has_remote and early termination
tg: avoid tree turds
tg.sh: fallback to tmp dir outside .git
tg.sh: quote problem alternate directory paths
tg: avoid "not a valid object name" messages
tg.sh: allow pretty_tree to accept any treeish ref
tg-create.sh: create bases without .top* files
tg-update.sh: after simple merge failure keep simple merges disabled
tg-update.sh: improve .topdeps and .topmsg merge handling
tg--index-merge-one-file.sh: be more or less --aggressive
tg: refactor diff added lines extractor
tg-update: automatically set up newly picked up remote deps
tg-update.sh: repeat update when new dependencies picked up
tg-update.sh: warn when a new non-existing dependency gets merged
pre-commit.sh: limit hook's auto_create_local_remote activity
Replace "tg-migrate-bases.sh: handle HEAD symrefs"
tg-create.sh: use --base to create a [BASE] branch
tg-update.sh: introduce --base mode
tg-log.sh: omit --no-merges option for [BASE] branches
tg-log.sh: support --compact and --command=<name> options
Makefile: expand @AWK_PATH@ and @SHELL_PATH@ everywhere
tg: the great LC_ALL=C out
tg-create.sh: make "@" work properly as alias for HEAD
tg: consolidate contained_by
tg.sh: fix tg update --abort and clarify --stop
tg: support --exec-path option
t1200: add tests for index-merge-one-file merge-index helper
tg: support $tgdisplayac for --abort/--continue display
tg: replace $tg with tg() and export TG_EXPLICIT_REMOTE
tg-update.sh: behave when --stop|--skip|--continue used out of update
tg.sh: avoid multiple rev-parse --show-cdup calls
tg-update.sh: give progress messages some structure
tg: add missing --no-pager option
tg.sh: include bad ref in ref_exists_rev failure message
tg.sh: avoid schizophrenic caching
tg.sh: use --no-deref when returning to a detached HEAD
tg.sh: make checkout_symref_full -f really -f
tg-update.sh: remove special case and allow auto rerere continue
tg-update.sh: --aggressive optimizations
tg.sh: add ensure_clean_topfiles
tg-create.sh: make sure creation does not lose .topdeps or .topmsg
tg-create.sh: prevent existing "clean" .topfiles from aborting creation
tg-create.sh: word creation using "base" not "$topbases/"
tg.sh: minor branch_needs_update efficiency
Awking Awesome Acceleration!
tg.sh: awksome accelerate recurse_deps_internal
tg.sh: awksome accelerate non_annihilated_branches
tg: add navigate_deps function and helper
tg-summary.sh: awksome accelerate --heads
tg.sh: preload .ref cache
tg-info.sh: awksome accelerate --heads
tg.sh: accelerate find_leaves a bit
tg-summary.sh: miscellaneous small improvements
tg-summary.sh: awksome accelerate --list --verbosely
tg.sh: allow recurse_deps to pass options into run_awk_topgit_recurse
tg-summary.sh: support --rdeps-once and --rdeps-full
tg.sh: I hate bash bugs
tg-patch.sh: get all awked up on --from
tg-info.sh: introduce --series[=<head>] option
tg-tag.sh: allow choosing a consolidation commit's first parent
README: add an explicit TopGit alias example
tg-checkout: push previous parent child terms aside to make next pop
tg.sh: support global --no-page...
TopGit-0.19.6
Small bug fix release
-
When an octopus merge fails suppress simple merges for all of
the affected heads not just the failing ones because if one of them
needs to use a recursive merge to be successful then the rest need
to also use that logic to avoid unexpected merge results. -
The pre-loaded commit message when using tg create with multiple
dependencies now survives the base merge again (regression fix)
and the pre-loaded message is now suppressed for all but '[PATCH]'
TopGit branches. -
The tg update process can now return to any non-unborn HEAD.
-
The tg patch output will now survive passing through diff-highlight
without being corrupted (workaround for diff-highlight bug). -
If tg create would fail when it goes to checkout the first dependency
then it will now fail right away before prompting for any messages. -
Special characters (including spaces) in the repository's path no longer
cause problems with the TopGit cache (mostly a regression fix). -
Some more tests have been added as well as minor testing framework
improvements. -
The TopGit-specific index-only merge strategies are now described in
full in the README file (accessible viatg help tgortg help -w tg).
Kyle J. McKay (19):
tg.sh: next version is 0.19.6
tg-create.sh: preserve pre-loaded message during update
t: remove "tg-" from test file names
README: add merge strategy information
tg-update.sh: suppress "automatic" merges on failed octopus
tg-update.sh: allow detached return
tg-create.sh: only preload "[PATCH]" commit msgs
tg-patch.sh: add blank line before footer
tg-create.sh: abort early if initial checkout would fail
rename: t1001 -> t1000
tg.sh: avoid problems with special chars in repo path
tg.sh: refactor switch_to_base into checkout_symref_full
tg.sh: allow checkout_symref_full to accept a hash
tg-update.sh: allow returning to arbitrary HEADs
t1100: test tg migrate-bases command
test-lib.sh: make sure exported variables get cached
test-lib*.sh: set GIT_CEILING_DIRECTORIES
t0000: verify that git rev-parse --git-dir fails
t*.sh: remove GIT_CEILING_DIRECTORIES settings
TopGit-0.19.5
Small bug fix and update release
The git rev-parse --git-common-dir command is broken when run in
a subdirectory of the top level of a normal Git checkout. This is
now worked around by cd'ing to the top level before using it.
The tg base command now understands the standard --short,
--short=n and --no-short options to control the number of hash
digits shown.
The subcommand -h or --help options can now be used outside of
a Git repository.
An initial batch of tests has been added that cover the common global
tg options and setup (and the broken rev-parse --git-common-dir issue).
Kyle J. McKay (17):
tg.sh: next version is 0.19.5
README: fix typo
tg-base.sh: understand --short[=n] and --no-short options
tg-create.sh: remove mention of --continue
tg.sh: work around broken git rev-parse --git-common-dir
tg.sh: allow -h or --help subcommands to work w/o repository
t/README: establish test numbering conventions
t1001: add basic option tests
tg.sh: prevent the `tg base` command from causing merge setup to happen
test-lib-main.sh: avoid chmod ""
t1010: test that help works anywhere
test-lib-functions.sh: make test_create_repo use --quiet
t1020: test proper tg --top-bases operation
t1030: test tg -C option used multiple times
t1040: test proper operation of -r and -u options
t1050: test tg status output
t1060: test mergesetup configuration and broken --git-common-dir