1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265
|
#!/bin/sh
test_description='help'
. ./test-lib.sh
configure_help () {
test_config help.format html &&
# Unless the path has "://" in it, Git tries to make sure
# the documentation directory locally exists. Avoid it as
# we are only interested in seeing an attempt to correctly
# invoke a help browser in this test.
test_config help.htmlpath test://html &&
# Name a custom browser
test_config browser.test.cmd ./test-browser &&
test_config help.browser test
}
test_expect_success "setup" '
# Just write out which page gets requested
write_script test-browser <<-\EOF
echo "$*" >test-browser.log
EOF
'
# make sure to exercise these code paths, the output is a bit tricky
# to verify
test_expect_success 'basic help commands' '
git help >/dev/null &&
git help -a --no-verbose >/dev/null &&
git help -g >/dev/null &&
git help -a >/dev/null
'
test_expect_success 'invalid usage' '
test_expect_code 129 git help -a add &&
test_expect_code 129 git help --all add &&
test_expect_code 129 git help -g add &&
test_expect_code 129 git help -a -c &&
test_expect_code 129 git help -g add &&
test_expect_code 129 git help -a -g &&
test_expect_code 129 git help --user-interfaces add &&
test_expect_code 129 git help -g -c &&
test_expect_code 129 git help --config-for-completion add &&
test_expect_code 129 git help --config-sections-for-completion add
'
for opt in '-a' '-g' '-c' '--config-for-completion' '--config-sections-for-completion'
do
test_expect_success "invalid usage of '$opt' with [-i|-m|-w]" '
git help $opt &&
test_expect_code 129 git help $opt -i &&
test_expect_code 129 git help $opt -m &&
test_expect_code 129 git help $opt -w
'
if test "$opt" = "-a"
then
continue
fi
test_expect_success "invalid usage of '$opt' with --no-external-commands" '
test_expect_code 129 git help $opt --no-external-commands
'
test_expect_success "invalid usage of '$opt' with --no-aliases" '
test_expect_code 129 git help $opt --no-external-commands
'
done
test_expect_success "works for commands and guides by default" '
configure_help &&
git help status &&
echo "test://html/git-status.html" >expect &&
test_cmp expect test-browser.log &&
git help revisions &&
echo "test://html/gitrevisions.html" >expect &&
test_cmp expect test-browser.log
'
test_expect_success "--exclude-guides does not work for guides" '
>test-browser.log &&
test_must_fail git help --exclude-guides revisions &&
test_must_be_empty test-browser.log
'
test_expect_success "--help does not work for guides" "
cat <<-EOF >expect &&
git: 'revisions' is not a git command. See 'git --help'.
EOF
test_must_fail git revisions --help 2>actual &&
test_cmp expect actual
"
test_expect_success 'git help' '
git help >help.output &&
test_grep "^ clone " help.output &&
test_grep "^ add " help.output &&
test_grep "^ log " help.output &&
test_grep "^ commit " help.output &&
test_grep "^ fetch " help.output
'
test_expect_success 'git help -g' '
git help -g >help.output &&
test_grep "^ everyday " help.output &&
test_grep "^ tutorial " help.output
'
test_expect_success 'git help fails for non-existing html pages' '
configure_help &&
mkdir html-empty &&
test_must_fail git -c help.htmlpath=html-empty help status &&
test_must_be_empty test-browser.log
'
test_expect_success 'git help succeeds without git.html' '
configure_help &&
mkdir html-with-docs &&
touch html-with-docs/git-status.html &&
git -c help.htmlpath=html-with-docs help status &&
echo "html-with-docs/git-status.html" >expect &&
test_cmp expect test-browser.log
'
test_expect_success 'git help --user-interfaces' '
git help --user-interfaces >help.output &&
grep "^ attributes " help.output &&
grep "^ mailmap " help.output
'
test_expect_success 'git help -c' '
git help -c >help.output &&
cat >expect <<-\EOF &&
'\''git help config'\'' for more information
EOF
grep -v -E \
-e "^[^.]+\.[^.]+$" \
-e "^[^.]+\.[^.]+\.[^.]+$" \
help.output >actual &&
test_cmp expect actual
'
test_expect_success 'git help --config-for-completion' '
git help -c >human &&
grep -E \
-e "^[^.]+\.[^.]+$" \
-e "^[^.]+\.[^.]+\.[^.]+$" human |
sed -e "s/\*.*//" -e "s/<.*//" |
sort -u >human.munged &&
git help --config-for-completion >vars &&
test_cmp human.munged vars
'
test_expect_success 'git help --config-sections-for-completion' '
git help -c >human &&
grep -E \
-e "^[^.]+\.[^.]+$" \
-e "^[^.]+\.[^.]+\.[^.]+$" human |
sed -e "s/\..*//" |
sort -u >human.munged &&
git help --config-sections-for-completion >sections &&
test_cmp human.munged sections
'
test_section_spacing () {
cat >expect &&
"$@" >out &&
grep -E "(^[^ ]|^$)" out >actual
}
test_section_spacing_trailer () {
test_section_spacing "$@" &&
test_expect_code 1 git >out &&
sed -n '/list available subcommands/,$p' <out >>expect
}
for cmd in git "git help"
do
test_expect_success "'$cmd' section spacing" '
test_section_spacing_trailer git help <<-\EOF &&
usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
These are common Git commands used in various situations:
start a working area (see also: git help tutorial)
work on the current change (see also: git help everyday)
examine the history and state (see also: git help revisions)
grow, mark and tweak your common history
collaborate (see also: git help workflows)
EOF
test_cmp expect actual
'
done
test_expect_success "'git help -a' section spacing" '
test_section_spacing \
git help -a --no-external-commands --no-aliases <<-\EOF &&
See '\''git help <command>'\'' to read about a specific subcommand
Main Porcelain Commands
Ancillary Commands / Manipulators
Ancillary Commands / Interrogators
Interacting with Others
Low-level Commands / Manipulators
Low-level Commands / Interrogators
Low-level Commands / Syncing Repositories
Low-level Commands / Internal Helpers
User-facing repository, command and file interfaces
Developer-facing file formats, protocols and other interfaces
EOF
test_cmp expect actual
'
test_expect_success "'git help -g' section spacing" '
test_section_spacing_trailer git help -g <<-\EOF &&
The Git concept guides are:
EOF
test_cmp expect actual
'
test_expect_success 'generate builtin list' '
mkdir -p sub &&
git --list-cmds=builtins >builtins
'
while read builtin
do
test_expect_success "$builtin can handle -h" '
(
GIT_CEILING_DIRECTORIES=$(pwd) &&
export GIT_CEILING_DIRECTORIES &&
test_expect_code 129 git -C sub $builtin -h >output 2>err
) &&
test_must_be_empty err &&
test_grep usage output
'
done <builtins
test_done
|