Skip to content

Commit de121ff

Browse files
Martin Ågrengitster
authored andcommitted
tag: respect pager.tag in list-mode only
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. Someone who makes use of both `git tag -a` and `git tag -l` will probably not set `pager.tag`, so that `git tag -a` will actually work, at the cost of not paging output of `git tag -l`. Use the mechanisms introduced in two earlier patches to ignore `pager.tag` in git.c and let the `git tag` builtin handle it on its own. Only respect `pager.tag` when running in list-mode. There is a window between where the pager is started before and after this patch. This means that early errors can behave slightly different before and after this patch. Since operation-parsing has to happen inside this window, this can be seen with `git -c pager.tag="echo pager is used" tag -l --unknown-option`. This change in paging-behavior should be acceptable since it only affects erroneous usages. Update the documentation and update tests. If an alias is used to run `git tag -a`, then `pager.tag` will still be respected. Document this known breakage. It will be fixed in a later commit. Add a similar test for `-l`, which works. Noticed-by: Anatoly Borodin <[email protected]> Suggested-by: Jeff King <[email protected]> Signed-off-by: Martin Ågren <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent b3ee740 commit de121ff

File tree

4 files changed

+21
-2
lines changed

4 files changed

+21
-2
lines changed

Documentation/git-tag.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,9 @@ it in the repository configuration as follows:
205205
signingKey = <gpg-keyid>
206206
-------------------------------------
207207

208+
`pager.tag` is only respected when listing tags, i.e., when `-l` is
209+
used or implied.
210+
See linkgit:git-config[1].
208211

209212
DISCUSSION
210213
----------

builtin/tag.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,9 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
461461
cmdmode = 'l';
462462
}
463463

464+
if (cmdmode == 'l')
465+
setup_auto_pager("tag", 0);
466+
464467
if ((create_tag_object || force) && (cmdmode != 0))
465468
usage_with_options(git_tag_usage, options);
466469

git.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ static struct cmd_struct commands[] = {
466466
{ "stripspace", cmd_stripspace },
467467
{ "submodule--helper", cmd_submodule__helper, RUN_SETUP | SUPPORT_SUPER_PREFIX},
468468
{ "symbolic-ref", cmd_symbolic_ref, RUN_SETUP },
469-
{ "tag", cmd_tag, RUN_SETUP },
469+
{ "tag", cmd_tag, RUN_SETUP | DELAY_PAGER_CONFIG },
470470
{ "unpack-file", cmd_unpack_file, RUN_SETUP },
471471
{ "unpack-objects", cmd_unpack_objects, RUN_SETUP },
472472
{ "update-index", cmd_update_index, RUN_SETUP },

t/t7006-pager.sh

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ test_expect_success TTY 'git tag -a defaults to not paging' '
187187
! test -e paginated.out
188188
'
189189

190-
test_expect_failure TTY 'git tag -a ignores pager.tag' '
190+
test_expect_success TTY 'git tag -a ignores pager.tag' '
191191
test_when_finished "git tag -d newtag" &&
192192
rm -f paginated.out &&
193193
test_terminal git -c pager.tag tag -am message newtag &&
@@ -201,6 +201,19 @@ test_expect_success TTY 'git tag -a respects --paginate' '
201201
test -e paginated.out
202202
'
203203

204+
test_expect_failure TTY 'git tag as alias ignores pager.tag with -a' '
205+
test_when_finished "git tag -d newtag" &&
206+
rm -f paginated.out &&
207+
test_terminal git -c pager.tag -c alias.t=tag t -am message newtag &&
208+
! test -e paginated.out
209+
'
210+
211+
test_expect_success TTY 'git tag as alias respects pager.tag with -l' '
212+
rm -f paginated.out &&
213+
test_terminal git -c pager.tag -c alias.t=tag t -l &&
214+
test -e paginated.out
215+
'
216+
204217
# A colored commit log will begin with an appropriate ANSI escape
205218
# for the first color; the text "commit" comes later.
206219
colorful() {

0 commit comments

Comments
 (0)