Skip to content

Releases: mackyle/topgit

TopGit-0.19.13 - Infernally Internal

10 Sep 03:08
topgit-0.19.13
Compare
Choose a tag to compare

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. See tg help migrate-bases for 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:

  1. tg goto is an implicit alias for tg checkout goto, but only if no
    topgit.alias.goto has been explicitly configured.
  2. Both tg export and tg import accept a new --notes option.
  3. 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...
Read more

TopGit-0.19.12 - Compatibility Conundrum

01 Jan 16:17
topgit-0.19.12
Compare
Choose a tag to compare

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. See tg help migrate-bases for 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:

  1. 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.
  2. 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-reflog before Git 2.10.0 (which added it)
  • Don't pass -- to git cat-file as 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

21 Mar 03:24
topgit-0.19.11
Compare
Choose a tag to compare

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. See tg help migrate-bases for 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 info now understands the -i and -w options
  • Two stage anonymous stash by first moving old TG_STASH to ORIG_TG_STASH
  • tg push won't push out-of-date branches without --allow-outdated
  • The default push remote can be configured as topgit.pushRemote

Corrections

  • tg info --leaves works properly again (broken since 0.19.8)
  • The -i and -w options now work as intended with tg 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

18 Feb 21:16
topgit-0.19.10
Compare
Choose a tag to compare

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. See tg help migrate-bases for 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

31 Aug 02:09
topgit-0.19.9
Compare
Choose a tag to compare

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. See tg help migrate-bases for 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

28 Jun 00:36
topgit-0.19.8
Compare
Choose a tag to compare

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. See tg help migrate-bases for 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:...
Read more

TopGit-0.19.7

07 Apr 01:59
topgit-0.19.7
Compare
Choose a tag to compare

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...
Read more

TopGit-0.19.6

06 Mar 12:27
topgit-0.19.6
Compare
Choose a tag to compare

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 via tg help tg or tg 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

16 Feb 01:46
topgit-0.19.5
Compare
Choose a tag to compare

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

TopGit-0.19.4

15 Feb 11:16
topgit-0.19.4
Compare
Choose a tag to compare

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-...
Read more