From: Junio C Hamano Date: Thu, 15 Jul 2010 19:09:14 +0000 (-0700) Subject: Merge branch 'jn/paginate-fix' X-Git-Tag: v1.7.2~16 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/53b304224a561b5fd4ae35cedc0a978d91d4b1da?ds=inline;hp=-c 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 --- 53b304224a561b5fd4ae35cedc0a978d91d4b1da diff --combined git.c index 265fa09d8d,99517dd83a..17538117a5 --- a/git.c +++ b/git.c @@@ -167,6 -167,7 +167,7 @@@ static int handle_alias(int *argcp, con alias_string = alias_lookup(alias_command); if (alias_string) { if (alias_string[0] == '!') { + commit_pager_choice(); if (*argcp > 1) { struct strbuf buf; @@@ -329,7 -330,7 +330,7 @@@ static void handle_internal_command(in { "fsck-objects", cmd_fsck, RUN_SETUP }, { "gc", cmd_gc, RUN_SETUP }, { "get-tar-commit-id", cmd_get_tar_commit_id }, - { "grep", cmd_grep, USE_PAGER }, + { "grep", cmd_grep }, { "hash-object", cmd_hash_object }, { "help", cmd_help }, { "index-pack", cmd_index_pack }, @@@ -432,6 -433,8 +433,8 @@@ static void execv_dashed_external(cons const char *tmp; int status; + commit_pager_choice(); + strbuf_addf(&cmd, "git-%s", argv[0]); /* @@@ -511,12 -514,12 +514,12 @@@ int main(int argc, const char **argv argv++; argc--; handle_options(&argv, &argc, NULL); - commit_pager_choice(); if (argc > 0) { if (!prefixcmp(argv[0], "--")) argv[0] += 2; } else { /* The user didn't specify a command; give them help */ + commit_pager_choice(); printf("usage: %s\n\n", git_usage_string); list_common_cmds_help(); printf("\n%s\n", git_more_info_string); diff --combined t/t7006-pager.sh index eb9651da89,9215c2ff56..71d3ceff8f --- a/t/t7006-pager.sh +++ b/t/t7006-pager.sh @@@ -3,7 -3,6 +3,7 @@@ test_description='Test automatic use of a pager.' . ./test-lib.sh +. "$TEST_DIRECTORY"/lib-pager.sh cleanup_fail() { echo >&2 cleanup failed @@@ -37,7 -36,7 +37,7 @@@ the } test_set_prereq TTY else - say no usable terminal, so skipping some tests + say "# no usable terminal, so skipping some tests" fi test_expect_success 'setup' ' @@@ -159,63 -158,223 +159,214 @@@ test_expect_success 'color when writin colorful colorful.log ' -test_expect_success 'determine default pager' ' - unset PAGER GIT_PAGER; - test_might_fail git config --unset core.pager || - cleanup_fail && - - less=$(git var GIT_PAGER) && - test -n "$less" -' - -if expr "$less" : '[a-z][a-z]*$' >/dev/null && test_have_prereq TTY +if test_have_prereq SIMPLEPAGER && test_have_prereq TTY then - test_set_prereq SIMPLEPAGER + test_set_prereq SIMPLEPAGERTTY fi - test_expect_success SIMPLEPAGERTTY 'default pager is used by default' ' - unset PAGER GIT_PAGER; - test_might_fail git config --unset core.pager && - rm -f default_pager_used || - cleanup_fail && + # Use this helper to make it easy for the caller of your + # terminal-using function to specify whether it should fail. + # If you write + # + # 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 && - #!/bin/sh - wc >default_pager_used - EOF - chmod +x $less && - ( - PATH=.:$PATH && - export PATH && - test_terminal git log - ) && - test -e default_pager_used - ' + test_default_pager() { + parse_args "$@" + - $test_expectation SIMPLEPAGER "$cmd - default pager is used by default" " ++ $test_expectation SIMPLEPAGERTTY "$cmd - default pager is used by default" " + unset PAGER GIT_PAGER; + test_might_fail git config --unset core.pager && + rm -f default_pager_used || + cleanup_fail && + + cat >\$less <<-\EOF && + #!/bin/sh + wc >default_pager_used + EOF + chmod +x \$less && + ( + PATH=.:\$PATH && + export PATH && + $full_command + ) && + test -e default_pager_used + " + } - test_expect_success TTY 'PAGER overrides default pager' ' - unset GIT_PAGER; - test_might_fail git config --unset core.pager && - rm -f PAGER_used || - cleanup_fail && + test_PAGER_overrides() { + parse_args "$@" - PAGER="wc >PAGER_used" && - export PAGER && - test_terminal git log && - test -e PAGER_used - ' + $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 && - test_expect_success TTY 'core.pager overrides PAGER' ' - unset GIT_PAGER; - rm -f core.pager_used || - cleanup_fail && + PAGER='wc >PAGER_used' && + export PAGER && + $full_command && + test -e PAGER_used + " + } - PAGER=wc && - export PAGER && - git config core.pager "wc >core.pager_used" && - test_terminal git log && - test -e core.pager_used - ' + test_core_pager_overrides() { + if_local_config= + used_if_wanted='overrides PAGER' + test_core_pager "$@" + } - test_expect_success TTY 'GIT_PAGER overrides core.pager' ' - rm -f GIT_PAGER_used || - cleanup_fail && + test_local_config_ignored() { + if_local_config='! ' + used_if_wanted='is not used' + test_core_pager "$@" + } - git config core.pager wc && - GIT_PAGER="wc >GIT_PAGER_used" && - export GIT_PAGER && - test_terminal git log && - test -e GIT_PAGER_used + 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_pager_choices 'git log' + test_pager_choices 'git -p log' + test_pager_choices 'git aliasedlog' + + test_default_pager expect_success 'git -p aliasedlog' + test_PAGER_overrides expect_success 'git -p aliasedlog' + test_core_pager_overrides expect_success 'git -p aliasedlog' + test_core_pager_subdir expect_failure 'git -p aliasedlog' + test_GIT_PAGER_overrides expect_success 'git -p aliasedlog' + + test_default_pager expect_success 'git -p true' + test_PAGER_overrides expect_success 'git -p true' + test_core_pager_overrides expect_success 'git -p true' + test_core_pager_subdir expect_failure 'git -p true' + test_GIT_PAGER_overrides expect_success 'git -p true' + + test_default_pager expect_success test_must_fail 'git -p request-pull' + test_PAGER_overrides expect_success test_must_fail 'git -p request-pull' + test_core_pager_overrides expect_success test_must_fail 'git -p request-pull' + test_core_pager_subdir expect_failure test_must_fail 'git -p request-pull' + test_GIT_PAGER_overrides expect_success test_must_fail 'git -p request-pull' + + test_default_pager expect_success test_must_fail 'git -p' + test_PAGER_overrides expect_success test_must_fail 'git -p' + 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' + + test_doesnt_paginate expect_failure test_must_fail 'git -p nonsense' + test_done