1 #!/bin/sh
3 test_description='Test automatic use of a pager.'
5 . ./test-lib.sh
7 rm -f stdout_is_tty
8 test_expect_success 'is stdout a terminal?' '
9 if test -t 1
10 then
11 : > stdout_is_tty
12 fi
13 '
15 if test -e stdout_is_tty
16 then
17 test_set_prereq TTY
18 else
19 say stdout is not a terminal, so skipping some tests.
20 fi
22 unset GIT_PAGER GIT_PAGER_IN_USE
23 git config --unset core.pager
24 PAGER='cat > paginated.out'
25 export PAGER
27 test_expect_success 'setup' '
28 test_commit initial
29 '
31 rm -f paginated.out
32 test_expect_success TTY 'some commands use a pager' '
33 git log &&
34 test -e paginated.out
35 '
37 rm -f paginated.out
38 test_expect_success TTY 'some commands do not use a pager' '
39 git rev-list HEAD &&
40 ! test -e paginated.out
41 '
43 rm -f paginated.out
44 test_expect_success 'no pager when stdout is a pipe' '
45 git log | cat &&
46 ! test -e paginated.out
47 '
49 rm -f paginated.out
50 test_expect_success 'no pager when stdout is a regular file' '
51 git log > file &&
52 ! test -e paginated.out
53 '
55 rm -f paginated.out
56 test_expect_success TTY 'git --paginate rev-list uses a pager' '
57 git --paginate rev-list HEAD &&
58 test -e paginated.out
59 '
61 rm -f file paginated.out
62 test_expect_success 'no pager even with --paginate when stdout is a pipe' '
63 git --paginate log | cat &&
64 ! test -e paginated.out
65 '
67 rm -f paginated.out
68 test_expect_success TTY 'no pager with --no-pager' '
69 git --no-pager log &&
70 ! test -e paginated.out
71 '
73 # A colored commit log will begin with an appropriate ANSI escape
74 # for the first color; the text "commit" comes later.
75 colorful() {
76 read firstline < $1
77 ! expr "$firstline" : "^[a-zA-Z]" >/dev/null
78 }
80 rm -f colorful.log colorless.log
81 test_expect_success 'tests can detect color' '
82 git log --no-color > colorless.log &&
83 git log --color > colorful.log &&
84 ! colorful colorless.log &&
85 colorful colorful.log
86 '
88 rm -f colorless.log
89 git config color.ui auto
90 test_expect_success 'no color when stdout is a regular file' '
91 git log > colorless.log &&
92 ! colorful colorless.log
93 '
95 rm -f paginated.out
96 git config color.ui auto
97 test_expect_success TTY 'color when writing to a pager' '
98 TERM=vt100 git log &&
99 colorful paginated.out
100 '
102 rm -f colorful.log
103 git config color.ui auto
104 test_expect_success 'color when writing to a file intended for a pager' '
105 TERM=vt100 GIT_PAGER_IN_USE=true git log > colorful.log &&
106 colorful colorful.log
107 '
109 unset PAGER GIT_PAGER
110 git config --unset core.pager
111 test_expect_success 'determine default pager' '
112 less=$(git var GIT_PAGER) &&
113 test -n "$less"
114 '
116 if expr "$less" : '^[a-z]*$' > /dev/null && test_have_prereq TTY
117 then
118 test_set_prereq SIMPLEPAGER
119 fi
121 unset PAGER GIT_PAGER
122 git config --unset core.pager
123 rm -f default_pager_used
124 test_expect_success SIMPLEPAGER 'default pager is used by default' '
125 cat > $less <<-EOF &&
126 #!$SHELL_PATH
127 : > default_pager_used
128 EOF
129 chmod +x $less &&
130 PATH=.:$PATH git log &&
131 test -e default_pager_used
132 '
134 unset GIT_PAGER
135 git config --unset core.pager
136 rm -f PAGER_used
137 test_expect_success TTY 'PAGER overrides default pager' '
138 PAGER=": > PAGER_used" &&
139 export PAGER &&
140 git log &&
141 test -e PAGER_used
142 '
144 unset GIT_PAGER
145 rm -f core.pager_used
146 test_expect_success TTY 'core.pager overrides PAGER' '
147 PAGER=: &&
148 export PAGER &&
149 git config core.pager ": > core.pager_used" &&
150 git log &&
151 test -e core.pager_used
152 '
154 rm -f GIT_PAGER_used
155 test_expect_success TTY 'GIT_PAGER overrides core.pager' '
156 git config core.pager : &&
157 GIT_PAGER=": > GIT_PAGER_used" &&
158 export GIT_PAGER &&
159 git log &&
160 test -e GIT_PAGER_used
161 '
163 test_done