Using, e.g., `git -c pager.tag tag -a new-tag` results in errors such as "Vim: Warning: Output is not to a terminal" and a garbled terminal. A user who makes use of `git tag -a` and `git tag -l` will probably choose not to configure `pager.tag` or to set it to "no", so that `git tag -a` will actually work, at the cost of not getting the pager with `git tag -l`. Introduce `pager.tag.list`. Teach git tag to prefer it over `pager.tag` when running with -l. Update the documentation and add tests. Update an existing test to use `pager.tag.list` instead of `pager.tag` together with `git tag -l` since the former is arguably more relevant. Do not introduce an "else" where we call setup_auto_pager(), although we could have. Omitting it might keep someone who later implements even more fine-grained configurations from building a correspondingly complicated decision tree which carefully ensures that setup_auto_pager() is called precisely once. A greedy approach such as the one taken here works just fine. Noticed-by: Anatoly Borodin <anatoly.borodin@xxxxxxxxx> Suggested-by: Jeff King <peff@xxxxxxxx> Signed-off-by: Martin Ågren <martin.agren@xxxxxxxxx> --- Documentation/git-tag.txt | 4 ++++ builtin/tag.c | 2 ++ t/t7006-pager.sh | 16 +++++++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt index 1eb15afa1..6ad5811a2 100644 --- a/Documentation/git-tag.txt +++ b/Documentation/git-tag.txt @@ -101,6 +101,10 @@ patterns may be given; if any of them matches, the tag is shown. This option is implicitly supplied if any other list-like option such as `--contains` is provided. See the documentation for each of those options for details. ++ +When determining whether to use a pager, `pager.tag.list` is considered +before `pager.tag`. +See linkgit:git-config[1]. --sort=<key>:: Sort based on the key given. Prefix `-` to sort in diff --git a/builtin/tag.c b/builtin/tag.c index e0f129872..e96ef7d70 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -446,6 +446,8 @@ int cmd_tag(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, prefix, options, git_tag_usage, 0); + if (cmdmode == 'l') + setup_auto_pager("tag.list", 0); setup_auto_pager("tag", 0); if (keyid) { diff --git a/t/t7006-pager.sh b/t/t7006-pager.sh index 43cce3694..ed34c6734 100755 --- a/t/t7006-pager.sh +++ b/t/t7006-pager.sh @@ -146,9 +146,15 @@ test_expect_success TTY 'git tag -l respects pager.tag' ' test -e paginated.out ' +test_expect_success TTY 'git tag -l respects pager.tag.list' ' + rm -f paginated.out && + test_terminal git -c pager.tag=false -c pager.tag.list tag -l && + test -e paginated.out +' + test_expect_success TTY 'git tag -l respects --no-pager' ' rm -f paginated.out && - test_terminal git -c pager.tag --no-pager tag -l && + test_terminal git -c pager.tag.list --no-pager tag -l && ! test -e paginated.out ' @@ -166,6 +172,14 @@ test_expect_success TTY 'git tag -a respects pager.tag' ' test -e paginated.out ' +test_expect_success TTY 'git tag -a ignores pager.tag.list' ' + test_when_finished "git tag -d newtag" && + rm -f paginated.out && + test_terminal git -c pager.tag -c pager.tag.list=false \ + tag -am message newtag && + test -e paginated.out +' + test_expect_success TTY 'git tag -a respects --paginate' ' test_when_finished "git tag -d newtag" && rm -f paginated.out && -- 2.13.2.653.gfb5159d