On 9 October 2017 at 23:45, Kevin Daudt <me@xxxxxxxxx> wrote: > When columns are set to automatic for git tag and the output is > paginated by git, the output is a single column instead of multiple > columns. > > Standard behaviour in git is to honor auto values when the pager is > active, which happens for example with commands like git log showing > colors when being paged. > > Since ff1e72483 (tag: change default of `pager.tag` to "on", > 2017-08-02), the pager has been enabled by default, exposing this > problem to more people. Oh. :( I didn't know about "column" to be honest. > finalize_colopts in column.c only checks whether the output is a TTY to > determine if columns should be enabled with columns set to autol. Also check > if the pager is active. > > Helped-by: Rafael Ascensão <rafa.almas@xxxxxxxxx> > Signed-off-by: Kevin Daudt <me@xxxxxxxxx> > --- > This came to light when someone wondered on irc why > column.tag=[auto|always] did not work on Mac OS. Testing it myself, I > found it to work with always, but not with auto. > > I could not get the test to work yet, because somehow it's not giving > any output, so feedback regarding that is welcome. I had slightly more success with PAGER="cat >actual", but the test is flaky for some reason. In any case, it might make sense to test an actual use-case also. Of course, the code should be largely the same, but in builtin/tag.c, it's quite important that `setup_auto_pager()` and `finalize_colopts()` are called in the right order. In other words, there is some regression-potential. This is a whitespace-damaged and hacky attempt to test. Maybe it helps a little. I hope I'll have more time later today. diff --git a/t/t7006-pager.sh b/t/t7006-pager.sh index f0f1abd1c..91f2b5871 100755 --- a/t/t7006-pager.sh +++ b/t/t7006-pager.sh @@ -214,6 +214,19 @@ test_expect_success TTY 'git tag as alias respects pager.tag with -l' ' ! test -e paginated.out ' +test_expect_success TTY 'git tag with column.tag=auto' ' + test_commit second && + test_commit third && + test_commit fourth && + test_when_finished "git reset --hard HEAD~3" && + cat >expected <<\EOF && +fourth initial second third +EOF + rm -f paginated.out && + test_terminal git -c pager.tag -c column.tag=auto tag && + test_cmp expected paginated.out +' + # A colored commit log will begin with an appropriate ANSI escape # for the first color; the text "commit" comes later. colorful() {