[PATCH 6/7] tag: make git tag -l consider new config `pager.tag.list`
From: Martin Ågren <hidden>
Date: 2017-07-10 21:56:40
Subsystem:
documentation, the rest · Maintainers:
Jonathan Corbet, Linus Torvalds
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 [off-list ref] Suggested-by: Jeff King <redacted> Signed-off-by: Martin Ågren <redacted> --- 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