Tags: MarcWeber/topgit
Tags
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. 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 functionality README_DOCS.rst: add mention of [ROOT] branches tg-depend.sh: match tg status terminology README_DOCS.rst: use "working directory" terminology README_DOCS.rst: add missing punctuation tg-{push,revert,summary}: accept --tgish for --tgish-only README_DOCS.rst: update tg prev and tg next usage summary tg.sh: also unset GIT_OBJECT_DIRECTORY when using -C README_DOCS.rst: mention source of tg tag -g date and time tg.sh: improve cherry-pick/revert detection README_DOCS.rst: update tg import -s docs tg.sh: disallow alternate refStorage backends tg-migrate-bases.sh: become POSIX compliant tg.sh: add fer_branch_contains utility function tg-{contains,info}.sh: adopt fer_branch_contains t/test-lib-main.sh: remove extraneous line t/helper/test_have_prereq.sh: make test_have_prereq available Makefile.mak: add test-sha1 and test-sha256 and update test target Makefile.sh: sort -u Makefile.dep Makefiles: remove __file_which_should_not_exist t0002: correct typo in unit test description README-TESTLIB-TG: eliminate typo in description t4500: test tg contains functionality t/helper/git_version.sh: make git_version available t/Makefile.mak: show git version being used for tests t/test-lib-functions-tg.sh: rectify grammo in description t4200/t6120: make tests work with new bases location tg-contains.sh: accomodate new bases location t4501: test tg contains with multi-level names test-lib-tg: grok default --top-bases of tg being tested t1020: automatically adapt to tg version >= 0.19.20 tg-contains: correctly match all possible tg remotes with -r tg-info.sh: add a few "sort" filters t2031: test sequestration with git commit -a hooks/pre-commit: handle alternate index sequestration t5001: test tg update --base fast forwards some more tg--merging.sh: support --no-commit option tg-update: exclude .top* files when using --base tg.sh: replace marc.info URL with lore.kernel.org URL various: update a few outdated URLs tg-*.sh: make sure stripspace uses the correct comment char t5002: explicitly test the issue 11 problem create-html-usage.pl: improve wrapping and options support tg-export: support --notes option tg-import: support --notes option tg-create.sh: handle @ alias for HEAD with --no-deps tg.sh: ensure ensure_clean_tree works on unborn branches tg-import: pass --no-deps to tg create when appropriate README_DOCS.rst: squash another typo topgit.html: generate using a consistent style README_DOCS.rst: reword incoherent conventions paragraph README_DOCS.rst: add 3-way merge glossary reference tg-export.sh: correct fatal wayback message README_DOCS.rst: update the out-of-date glossary entry README*: minor nits and alternate stub README_DOCS.rst: tweak tg tag -g date comments tg-tag.sh: discard irrelevant spam when using --drop t6100: compensate for Git v2.31.0+ reflog brokenness t6101: perform a few more tg tag --drop tests tg-tag: do not update ref when dropping @{0} if different tg--merging.sh: add single file merge utility function t5011: test tg update --skip-missing tg-update: do not attempt to merge missing depedency t5012: test tg update with remote .topdeps removal tg-update: avoid updating remote-removed dependencies README_DOCS.rst: expand the update process description t5021: test partial fast-forward dependency updates tg--merging: use correct first parent when fast-forwarding README_DOCS.rst: minor documentation nits t2200: add very basic tg depend add multiple tests t2300: test tg annihilate including tg update action docs: yet another alternate stub create-html-usage.pl: fuss with options indentation various: use "command" instead of "subcommand" tg: clean up generic help output tg.sh: handle help -h tg: clean up help usage output Makefile.sh: use --abbrev=8 instead of --abbrev=4 tg.sh: adjust use of --create-reflog option t6102: test tg tag -g with tabs present tg-tag: handle reflog entries with extra tabs README_DOCS.rst: wordsmith some of the commentary topgit: version 0.19.13 Adam Mizerski (1): Update INSTALL ```
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. 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 =========================== _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 =================================== _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 ================================= _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 ============================================ _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 create`d 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: add export unset works test tg.sh: make sure GIT_OBJECT_DIRECTORY is never set to "" testlib: quiet verbose only sanity tg-create.sh: turn template <patch description> into comment tg.sh: implement full GIT_ALTERNATE_OBJECT_DIRECTORIES quoting rule Makefile.mak: create a tgx bin-wrapper testlib: make --run implicitly activate --quiet without --no-quiet t1080: add miscellaneous tg.sh tests tg-create.sh: with --no-deps (aka --base) allow any committish help: improve formatting of plain text and fix typo t2100: test tg create branch creation t2100: add some --no-commit tests tg-create: support new --no-update option tg-create.sh: strip leading spaces off --topmsg argument tg-create: align -n with Git and improve --no-edit t2110: test tg create --topmsg, --no-edit and friends tg-update.sh: improve --base message handling testlib: allow die function to accept a message t5000: add tg update --base tests tg.sh: make sure tg_tmp_dir is not a frankenpath testlib: suppress superfluous messages from rm tg: always pass the correct empty blob to awk ref_prepare.awk: support arbitrary blob checking tg.sh: add support for --make-empty-blob test-lib-functions-tg: tg_test_create_branches really does do it all topgit_{deps,msg}_prepare.awk: provide missing blob action Makefile.mak: help tg wrapper find itself tg--awksome.sh: create empty blob on demand tg: bare more functionality t4000: add bare branch sanity checks t/Makefile.mak: suppress superfluous messages from rm testlib: improve test target handling testlib: quick reference and other doc updates tg-summary.sh: always show all with no options or arguments topgit_recurse.awk: include excess visit counts tg-summary: append ^ to rdeps-once branches with elided deps tg-summary: show annihilated with -v -v -l tg-summary: introduce --with-related option t4100: add several summary tests tg-summary: use run_awk_topgit_msg for all messages tg-summary: the last of the great speed-ups tg.sh: use correct remote branch list for recurse_deps_internal tg: provide global --pager (-p) option tg.sh: make needs_update return 1 for out-of-date remote tg.sh: enhance needs_update_check to check branch itself testlib: improve test_merge utility function helper/needs_update_check.sh: allow test scripts access tg.sh: improve needs_update_check remote base handling t4200: test the out-of-date checking code topgit_deps.awk: scrutinize incoming branch names tg: disambiguate refs/heads/refs/remotes/<name>/<branch> tg-export.sh: construct playground before trying to use it tg-export.sh: contravene collapse collisions tests: require proper POSIX tr NUL behavior tg-summary.sh: allow -v and -l options to bundle t8200: test export subject stripping behaviors test-lib-main.sh: compute TRASH_DIRECTORY differently tg: avoid bogus missing status for solitary branches topgit_msg.awk: allow extracting multiple headers topgit_msg.awk: mostly avoid outputting blank lines tg-info.sh: switch to nicer subject formatting tg-export.sh: support --quilt --force and tidy up usage create-html-usage.pl: unwrap multi-line usage lines help: polish up the plain text help a bit testlib: support TESTLIB_TEST_TAP_ONLY for sanity testlib: warn if there's no TG-TEST-SETTINGS file make: remake TG-BUILD-SETTINGS and TG-TEST-SETTINGS on config mods tg-export: add subject [...] handling modes tg--awksome.sh: make run_awk_topmsg_header see the truth tg-revert.sh: correct missing reftype in damaged tag message tg.sh: make sure noalt_setup takes effect when it should t4100: shake up one of the .topmsg subjects a bit hooks/pre-commit: stop using cat_file -i tg--awksome.sh: -tm= for topmsg_header and correct comments tg-info.sh: make full use of run_awk_topmsg_header tg: add missing --tgish-only argument tg-summary.sh: overhaul it all tg.sh: fully enable caching as designed tg-revert.sh: minor optimizations tg.sh: add is_empty_dir function tg-export.sh: allow --quilt export to pre-existing empty dir topgit_msg: expose bare branches testlib-tg: add tg_test_create_tag utility function test-lib-main.sh: promote test_done messages to TAP status tg: add wayback machine topgit.html: clean up the generated XHTML tg export: no need for merge or hook setup README-TESTLIB-TG: fix typo tg-export: wayback to older patch sets ChangeLog: topgit-0.19.8 release t8400: export tests for all three modes with remotes ```
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=<cmd>" 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-pager option tg: awksome accelerate top-bases computation tg: awksome accelerate list_deps by banishing it tg-export.sh: use $_dep_annihilated not branch_annihilated function tg-checkout: awking awesome --series of overhauls tg-annihilate.sh: do not use `tg prev` or `tg next` tg-info.sh: support --deps and --dependents options tg: previous to next overhaul tg-update.sh: automatically set rerere.autoUpdate by default tg-info.sh: with --series=<name> HEAD may be detached t/Makefile: provide GNU make required hint t/Makefile: clean TG-TEST-SETTINGS too t/Makefile: nicety for test target aggregation when no results t/Makefile: compute TG-TEST-SETTINGS differently Makefile: switch to gnomake system Makefile: add dependencies t/helper/recurse_deps_internal: more correctly parse args tg: provide some debugging help with TG_DEBUG topgit: fully qualify more refs tg: alternatively not so much leaking tg-checkout.sh: pass on -q and -m to git tg-annihilate.sh: autostash and support --stash and --no-stash tg-delete.sh: autostash and support --stash and --no-stash tg-annihilate.sh: allow a name to be specified tg-update.sh: watch out for sneaky blobs tg-update.sh: word merge messages using "base" not "$topbases/" README: update to match current tg create behavior tg.sh: allow recursive tg invocations to reuse temporary dir tg.sh: create the ref cache dir hierarchy more efficiently ```
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 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 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 ============= There be octopuses here! ------------------------ tg update now prefers to perform index-only merges where possible and will now make octopus merges when only simple in-index merge resolution can be accomplished. It now also uses a --continue mechanism rather than the prior subshell mechanism for conflict resolution and supports multiple explicit branch names without the `-a` option. The tg annihilate, tg create and tg depend add (which now allows multiple dependencies to be added at once) all run `tg update` under the hood as the final step so they too can end up creating an octopus merge. A new `tg status` command has been added to show the current state of any pending tg operation that's awaiting user action (along with a helpful list of the correct commands to use to continue/abort the action). Just a few tiny updates ----------------------- Other than already mentioned in the above section, the `tg tag` command has a new `--tree` option to force a particular tree to be used in the tag. The `tg revert` command now understands the standard `--short=n`, `--no-short` and `--short` options when showing the contents of a TopGit tag as well as the new `--hash` option to only show the hash (lets it work similarly to the `git rev-parse --verify` command to extract hashes from a TopGit tag). The `tg revert` command will now accept a bare hash value when reverting if it's the hash of a TopGit tag. The `tg summary` command has a convenient `--heads-only` option that limits the output to independent heads only. The `tg info` command has a new `--leaves` option to show the leaves of the TopGit portion of the graph which is extremely helpful when determining what the correct commit to rebase onto should be when creating a linearized patch output (it should be the single line output by `tg info --leaves` -- bad news if more than one line comes out). Like Git, TopGit will now accept `@` for `HEAD`. Correctness, cleanup, git accomodations and minor bug fixes ----------------------------------------------------------- Some sh-is-bash bugs have been accomodated, the `-r` option should now really be usable with `tg create` (it's now properly parsed), any branch names passed to `tg update` using the `-a` option should now be honored again (broken since 0.18.0), multiple `-b` options to the `tg export --quilt` command now work, the `tg revert` command will now detach your HEAD if it modifies the ref a symbolic-ref HEAD points to, the topgit.autostash boolean now defaults to true if not set -- it will save your butt so better it's on by default and a few Git idiosyncracies are now better accomodated (early detection of no valid ident and supplying --allow-unrelated-histories to git merge for v2.9.0+, multiple work trees since v2.5.0, core.hooksPath since v2.9.0). Git version 1.8.5 or later is now required. It has actually been required since 0.19.0 but was not being checked for. The reason is the use of the cat-file --batch-check command and its new `%(rest)` format -- there really isn't any good alternative for it and Git 1.8.5 was released over three years ago at this point (and Git versions prior to 2.4.11 have known security issues and really should be avoided anyhow). With this release, hopefully all ref ambiguity and quoting issues have been resolved and any valid Git branch name should now be useable as a TopGit branch name. New Top-Bases Location ---------------------- TopGit now allows the top-bases refs to be stored under refs/heads (as they are really branches) rather than bare refs/. The new `tg migrate-bases` command (and associated help) talk about this and there's a new preference `topgit.top-bases` (can be set to "refs" or "heads" or left unset for auto) and new `tg --top-bases` option to show the value for the current repository. The default is still to store the top-bases in the same refs/ location as always but starting with release 0.20.0 the default will change to the new location. All commands should now, howevver, accomodate either location (but you cannot mix and match, it's one or the other) automatically detecting whatever is in use in the repository by default. Testing Framework ----------------- There is a new testing framework (adopted from Git but modified) now present in the "t/" subdirectory. Currently it only tests the testing framework but more tests will be added in the future. Kyle J. McKay (128): tg.sh: next version is 0.19.4 hooks/pre-commit.sh: run grep with LC_ALL=C tg-create.sh: fix parsing of -r branch option tg.sh: update version comparison code tg-create: add some --quiet options tg.sh: require Git 1.8.5 or later tg-annihilate: minor optimization and cleanup bashbug: workaround bash bug set -e exit failure tg-rebase.sh: correct more "git rebase" messages tg-rebase.sh: stop the --auto-continue if no progress tg: better accomodate user.useConfigOnly=true tg: avoid echo option misinterpretation tg: supply --allow-unrelated-histories option to git merge tg-annihilate: delay all updates until the end tg-patch: do not show "depends on:" if the list is empty tg.sh: add make_empty_commit function tg-revert.sh: detach HEAD before reverting its symref tg.sh: restore non_annihilated_branches support for args tg-tag.sh: add --shell to git for-each-ref and eval tg: replace top-bases with "$topbases" and avoid unquoted refs tg: remove unnecessary trailing '\' line continuation characters tg: replace `...` with $(...) tg.sh: remove wc_l function tg-update.sh: default topgit.autostash to true tg-export.sh: validate and accept multiple -b options tg-delete.sh: make a -f -f HEAD detach nicer tg: add bin-wrappers/tg to run uninstalled tg tg: add testing framework Makefile: switch from TG-PREFIX to TG-BUILD-SETTINGS testlib: provide config settings to tests and use them testlib: make test-lib-functions.sh pure functions test-lib.sh: move to test-lib-main.sh testlib: make test-lib-main.sh pure functions test-lib-main.sh: split initialization into generic and specific test-lib-main.sh: minor efficiencies testlib: cache generic test setup for multiple test runs test-lib-main.sh: do not run any tput commands with --no-color test-lib-functions.sh: use '%s\n' instead of "%s\n" test-lib-{main,functions}.sh: eliminate use of expr t/Makefile: make test target work as well as prove test-lib-functions.sh: replace egrep with grep -E tg.sh: use command -v instead of which testlib: show failing filename and line number on failures testlib: move tee and special func defs into functions testlib: improve lazy prereq cache eval testlib: alter color handling test-lib-main.sh: use say_tap and say_color_tap for TAP output testlib: find the test library more robustly test-lib-main.sh: introduce TESTLIB_TEST_NO_SUBSHELL testlib: allow a test script of '-' testlib: empty tests fail plus improved lint test-lib-functions.sh: make test_must_fail work properly t0001: add basic testlib tests test-lib-main.sh: let --color enable color output testlib: never hide error failures testlib: more efficiencies and correctness tg: case cleanup tg-revert.sh: do not show "no change" lines tg-revert.sh: accept hash names when reverting tg-tag.sh: when using -g on tgstash show "commit" message tg.sh: switch to more efficient vcmp tg-revert.sh: convert any top-bases in TOPGIT REFS tg.sh: auto-detect proper value for topbases tg: purge use of basename, dirname and touch tg: minor subshell efficiencies tg.sh: make sure the hooks directory exists tg: case $topbases before heads tg-revert.sh: do reverse topbases conversion if necessary tg-update.sh: optimize recursion tg: use --count with rev-list tg: retire use of fgrep tg-revert.sh: accept list --short=n, --no-short and --short options tg: refactor quotearg function tg-revert.sh: support new --hash option tg-update.sh: merge into base all at once tg.sh: new --top-bases option to show refs/$topbases README: add lots more docs tg.sh: avoid modifying a symbolic link pre-commit hook tg-update.sh: reduce number of checkouts slightly tg-update.sh: perform index-only merges whenever possible tg-{revert,update}.sh: quiet confusing auto stash messages tg: move $tab and $lf defs into tg.sh tg-update.sh: there be octopuses here! tg.sh: allow @ to be used instead of HEAD tg-summary.sh: default to --with-deps when sensible tg-annihilate.sh: suppress `tg update` with --no-update tg-create.sh: show `tg create --continue` to continue tg-update.sh: allow multiple branch names Makefile: use $(commands_in) instead of $(wildcard ...) tg-tag.sh: clean up usage message assignment tg-tag.sh: allow "anonymous" stashes tg-update.sh: rename --skip to --skip-missing tg: introduce "tg status" command tg: accomodate multiple git worktrees tg.sh: make ensure_clean_tree also ensure clean state tg-remote.sh: handle new bases location better tg-annihilate.sh: ensure_clean_tree & undetach HEAD tg-summary.sh: skip annihilated branches tg-push.sh: restore "-a" functionality tg-update.sh: abolish subshells! tg-annihilate.sh: run a single tg update command tg-depend.sh: allow adding multiple dependencies tg-depend.sh: expunge use of tsort tg-create.sh: use tg update to merge extra dependencies tg-create.sh: handle -r with new bases tg-info.sh: report correct status for new bases location README: fine tune update process description tg-summary.sh: handle new top-bases location tg.sh: handle remote bases in new location tg-tag.sh: with --tree=treeish set tag's tree tg--index-merge-one-file.sh: add rudimentary -h help tg-migrate-bases.sh: migrate top-bases to new location tg.sh: respect core.hooksPath mostly Makefile: define PROGRAMS variable tg.sh: support tg status --exit-code tg-summary.sh: add --heads-only option tg-info.sh: new --leaves option tg-remote.sh: handle new bases location README: add a REQUIREMENTS section README: explain what tg log does test-lib-main.sh: allow --expensive as --long-tests alias test-lib-main.sh: allow --xtrace long option name for -x test-lib-main.sh: keep same exit code with --tee test-lib-main.sh: with --verbose-log allow --verbose-only=... and -x test-lib-main.sh: add test_plan function test-lib-functions.sh: make test_copy_bytes use dd test-lib-functions.sh: implement LASTOK prerequisite README*: add testing library documentation
PreviousNext