Merge branch 'jn/paginate-fix'
* jn/paginate-fix: git --paginate: paginate external commands again git --paginate: do not commit pager choice too early tests: local config file should be honored from subdirs of toplevel t7006: test pager configuration for several git commands t7006 (pager): introduce helper for parameterized tests Conflicts: t/t7006-pager.sh
This commit is contained in:
5
git.c
5
git.c
@ -167,6 +167,7 @@ static int handle_alias(int *argcp, const char ***argv)
|
|||||||
alias_string = alias_lookup(alias_command);
|
alias_string = alias_lookup(alias_command);
|
||||||
if (alias_string) {
|
if (alias_string) {
|
||||||
if (alias_string[0] == '!') {
|
if (alias_string[0] == '!') {
|
||||||
|
commit_pager_choice();
|
||||||
if (*argcp > 1) {
|
if (*argcp > 1) {
|
||||||
struct strbuf buf;
|
struct strbuf buf;
|
||||||
|
|
||||||
@ -432,6 +433,8 @@ static void execv_dashed_external(const char **argv)
|
|||||||
const char *tmp;
|
const char *tmp;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
commit_pager_choice();
|
||||||
|
|
||||||
strbuf_addf(&cmd, "git-%s", argv[0]);
|
strbuf_addf(&cmd, "git-%s", argv[0]);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -511,12 +514,12 @@ int main(int argc, const char **argv)
|
|||||||
argv++;
|
argv++;
|
||||||
argc--;
|
argc--;
|
||||||
handle_options(&argv, &argc, NULL);
|
handle_options(&argv, &argc, NULL);
|
||||||
commit_pager_choice();
|
|
||||||
if (argc > 0) {
|
if (argc > 0) {
|
||||||
if (!prefixcmp(argv[0], "--"))
|
if (!prefixcmp(argv[0], "--"))
|
||||||
argv[0] += 2;
|
argv[0] += 2;
|
||||||
} else {
|
} else {
|
||||||
/* The user didn't specify a command; give them help */
|
/* The user didn't specify a command; give them help */
|
||||||
|
commit_pager_choice();
|
||||||
printf("usage: %s\n\n", git_usage_string);
|
printf("usage: %s\n\n", git_usage_string);
|
||||||
list_common_cmds_help();
|
list_common_cmds_help();
|
||||||
printf("\n%s\n", git_more_info_string);
|
printf("\n%s\n", git_more_info_string);
|
||||||
|
241
t/t7006-pager.sh
241
t/t7006-pager.sh
@ -164,58 +164,209 @@ then
|
|||||||
test_set_prereq SIMPLEPAGERTTY
|
test_set_prereq SIMPLEPAGERTTY
|
||||||
fi
|
fi
|
||||||
|
|
||||||
test_expect_success SIMPLEPAGERTTY 'default pager is used by default' '
|
# Use this helper to make it easy for the caller of your
|
||||||
unset PAGER GIT_PAGER;
|
# terminal-using function to specify whether it should fail.
|
||||||
test_might_fail git config --unset core.pager &&
|
# If you write
|
||||||
rm -f default_pager_used ||
|
#
|
||||||
cleanup_fail &&
|
# your_test() {
|
||||||
|
# parse_args "$@"
|
||||||
|
#
|
||||||
|
# $test_expectation "$cmd - behaves well" "
|
||||||
|
# ...
|
||||||
|
# $full_command &&
|
||||||
|
# ...
|
||||||
|
# "
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# then your test can be used like this:
|
||||||
|
#
|
||||||
|
# your_test expect_(success|failure) [test_must_fail] 'git foo'
|
||||||
|
#
|
||||||
|
parse_args() {
|
||||||
|
test_expectation="test_$1"
|
||||||
|
shift
|
||||||
|
if test "$1" = test_must_fail
|
||||||
|
then
|
||||||
|
full_command="test_must_fail test_terminal "
|
||||||
|
shift
|
||||||
|
else
|
||||||
|
full_command="test_terminal "
|
||||||
|
fi
|
||||||
|
cmd=$1
|
||||||
|
full_command="$full_command $1"
|
||||||
|
}
|
||||||
|
|
||||||
cat >$less <<-\EOF &&
|
test_default_pager() {
|
||||||
#!/bin/sh
|
parse_args "$@"
|
||||||
wc >default_pager_used
|
|
||||||
EOF
|
$test_expectation SIMPLEPAGERTTY "$cmd - default pager is used by default" "
|
||||||
chmod +x $less &&
|
unset PAGER GIT_PAGER;
|
||||||
(
|
test_might_fail git config --unset core.pager &&
|
||||||
PATH=.:$PATH &&
|
rm -f default_pager_used ||
|
||||||
export PATH &&
|
cleanup_fail &&
|
||||||
test_terminal git log
|
|
||||||
) &&
|
cat >\$less <<-\EOF &&
|
||||||
test -e default_pager_used
|
#!/bin/sh
|
||||||
|
wc >default_pager_used
|
||||||
|
EOF
|
||||||
|
chmod +x \$less &&
|
||||||
|
(
|
||||||
|
PATH=.:\$PATH &&
|
||||||
|
export PATH &&
|
||||||
|
$full_command
|
||||||
|
) &&
|
||||||
|
test -e default_pager_used
|
||||||
|
"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_PAGER_overrides() {
|
||||||
|
parse_args "$@"
|
||||||
|
|
||||||
|
$test_expectation TTY "$cmd - PAGER overrides default pager" "
|
||||||
|
unset GIT_PAGER;
|
||||||
|
test_might_fail git config --unset core.pager &&
|
||||||
|
rm -f PAGER_used ||
|
||||||
|
cleanup_fail &&
|
||||||
|
|
||||||
|
PAGER='wc >PAGER_used' &&
|
||||||
|
export PAGER &&
|
||||||
|
$full_command &&
|
||||||
|
test -e PAGER_used
|
||||||
|
"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_core_pager_overrides() {
|
||||||
|
if_local_config=
|
||||||
|
used_if_wanted='overrides PAGER'
|
||||||
|
test_core_pager "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_local_config_ignored() {
|
||||||
|
if_local_config='! '
|
||||||
|
used_if_wanted='is not used'
|
||||||
|
test_core_pager "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_core_pager() {
|
||||||
|
parse_args "$@"
|
||||||
|
|
||||||
|
$test_expectation TTY "$cmd - repository-local core.pager setting $used_if_wanted" "
|
||||||
|
unset GIT_PAGER;
|
||||||
|
rm -f core.pager_used ||
|
||||||
|
cleanup_fail &&
|
||||||
|
|
||||||
|
PAGER=wc &&
|
||||||
|
export PAGER &&
|
||||||
|
git config core.pager 'wc >core.pager_used' &&
|
||||||
|
$full_command &&
|
||||||
|
${if_local_config}test -e core.pager_used
|
||||||
|
"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_core_pager_subdir() {
|
||||||
|
if_local_config=
|
||||||
|
used_if_wanted='overrides PAGER'
|
||||||
|
test_pager_subdir_helper "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_no_local_config_subdir() {
|
||||||
|
if_local_config='! '
|
||||||
|
used_if_wanted='is not used'
|
||||||
|
test_pager_subdir_helper "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_pager_subdir_helper() {
|
||||||
|
parse_args "$@"
|
||||||
|
|
||||||
|
$test_expectation TTY "$cmd - core.pager $used_if_wanted from subdirectory" "
|
||||||
|
unset GIT_PAGER;
|
||||||
|
rm -f core.pager_used &&
|
||||||
|
rm -fr sub ||
|
||||||
|
cleanup_fail &&
|
||||||
|
|
||||||
|
PAGER=wc &&
|
||||||
|
stampname=\$(pwd)/core.pager_used &&
|
||||||
|
export PAGER stampname &&
|
||||||
|
git config core.pager 'wc >\"\$stampname\"' &&
|
||||||
|
mkdir sub &&
|
||||||
|
(
|
||||||
|
cd sub &&
|
||||||
|
$full_command
|
||||||
|
) &&
|
||||||
|
${if_local_config}test -e core.pager_used
|
||||||
|
"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_GIT_PAGER_overrides() {
|
||||||
|
parse_args "$@"
|
||||||
|
|
||||||
|
$test_expectation TTY "$cmd - GIT_PAGER overrides core.pager" "
|
||||||
|
rm -f GIT_PAGER_used ||
|
||||||
|
cleanup_fail &&
|
||||||
|
|
||||||
|
git config core.pager wc &&
|
||||||
|
GIT_PAGER='wc >GIT_PAGER_used' &&
|
||||||
|
export GIT_PAGER &&
|
||||||
|
$full_command &&
|
||||||
|
test -e GIT_PAGER_used
|
||||||
|
"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_doesnt_paginate() {
|
||||||
|
parse_args "$@"
|
||||||
|
|
||||||
|
$test_expectation TTY "no pager for '$cmd'" "
|
||||||
|
rm -f GIT_PAGER_used ||
|
||||||
|
cleanup_fail &&
|
||||||
|
|
||||||
|
GIT_PAGER='wc >GIT_PAGER_used' &&
|
||||||
|
export GIT_PAGER &&
|
||||||
|
$full_command &&
|
||||||
|
! test -e GIT_PAGER_used
|
||||||
|
"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_pager_choices() {
|
||||||
|
test_default_pager expect_success "$@"
|
||||||
|
test_PAGER_overrides expect_success "$@"
|
||||||
|
test_core_pager_overrides expect_success "$@"
|
||||||
|
test_core_pager_subdir expect_success "$@"
|
||||||
|
test_GIT_PAGER_overrides expect_success "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_expect_success 'setup: some aliases' '
|
||||||
|
git config alias.aliasedlog log &&
|
||||||
|
git config alias.true "!true"
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success TTY 'PAGER overrides default pager' '
|
test_pager_choices 'git log'
|
||||||
unset GIT_PAGER;
|
test_pager_choices 'git -p log'
|
||||||
test_might_fail git config --unset core.pager &&
|
test_pager_choices 'git aliasedlog'
|
||||||
rm -f PAGER_used ||
|
|
||||||
cleanup_fail &&
|
|
||||||
|
|
||||||
PAGER="wc >PAGER_used" &&
|
test_default_pager expect_success 'git -p aliasedlog'
|
||||||
export PAGER &&
|
test_PAGER_overrides expect_success 'git -p aliasedlog'
|
||||||
test_terminal git log &&
|
test_core_pager_overrides expect_success 'git -p aliasedlog'
|
||||||
test -e PAGER_used
|
test_core_pager_subdir expect_failure 'git -p aliasedlog'
|
||||||
'
|
test_GIT_PAGER_overrides expect_success 'git -p aliasedlog'
|
||||||
|
|
||||||
test_expect_success TTY 'core.pager overrides PAGER' '
|
test_default_pager expect_success 'git -p true'
|
||||||
unset GIT_PAGER;
|
test_PAGER_overrides expect_success 'git -p true'
|
||||||
rm -f core.pager_used ||
|
test_core_pager_overrides expect_success 'git -p true'
|
||||||
cleanup_fail &&
|
test_core_pager_subdir expect_failure 'git -p true'
|
||||||
|
test_GIT_PAGER_overrides expect_success 'git -p true'
|
||||||
|
|
||||||
PAGER=wc &&
|
test_default_pager expect_success test_must_fail 'git -p request-pull'
|
||||||
export PAGER &&
|
test_PAGER_overrides expect_success test_must_fail 'git -p request-pull'
|
||||||
git config core.pager "wc >core.pager_used" &&
|
test_core_pager_overrides expect_success test_must_fail 'git -p request-pull'
|
||||||
test_terminal git log &&
|
test_core_pager_subdir expect_failure test_must_fail 'git -p request-pull'
|
||||||
test -e core.pager_used
|
test_GIT_PAGER_overrides expect_success test_must_fail 'git -p request-pull'
|
||||||
'
|
|
||||||
|
|
||||||
test_expect_success TTY 'GIT_PAGER overrides core.pager' '
|
test_default_pager expect_success test_must_fail 'git -p'
|
||||||
rm -f GIT_PAGER_used ||
|
test_PAGER_overrides expect_success test_must_fail 'git -p'
|
||||||
cleanup_fail &&
|
test_local_config_ignored expect_failure test_must_fail 'git -p'
|
||||||
|
test_no_local_config_subdir expect_success test_must_fail 'git -p'
|
||||||
|
test_GIT_PAGER_overrides expect_success test_must_fail 'git -p'
|
||||||
|
|
||||||
git config core.pager wc &&
|
test_doesnt_paginate expect_failure test_must_fail 'git -p nonsense'
|
||||||
GIT_PAGER="wc >GIT_PAGER_used" &&
|
|
||||||
export GIT_PAGER &&
|
|
||||||
test_terminal git log &&
|
|
||||||
test -e GIT_PAGER_used
|
|
||||||
'
|
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Reference in New Issue
Block a user