Merge branch 'jk/color-and-pager'

* jk/color-and-pager:
  want_color: automatically fallback to color.ui
  diff: don't load color config in plumbing
  config: refactor get_colorbool function
  color: delay auto-color decision until point of use
  git_config_colorbool: refactor stdout_is_tty handling
  diff: refactor COLOR_DIFF from a flag into an int
  setup_pager: set GIT_PAGER_IN_USE
  t7006: use test_config helpers
  test-lib: add helper functions for config
  t7006: modernize calls to unset

Conflicts:
	builtin/commit.c
	parse-options.c
This commit is contained in:
Junio C Hamano
2011-08-28 21:19:16 -07:00
21 changed files with 176 additions and 147 deletions

View File

@ -13,7 +13,7 @@ cleanup_fail() {
test_expect_success 'setup' '
sane_unset GIT_PAGER GIT_PAGER_IN_USE &&
test_might_fail git config --unset core.pager &&
test_unconfig core.pager &&
PAGER="cat >paginated.out" &&
export PAGER &&
@ -94,21 +94,19 @@ test_expect_success TTY 'no pager with --no-pager' '
test_expect_success TTY 'configuration can disable pager' '
rm -f paginated.out &&
test_might_fail git config --unset pager.grep &&
test_unconfig pager.grep &&
test_terminal git grep initial &&
test -e paginated.out &&
rm -f paginated.out &&
git config pager.grep false &&
test_when_finished "git config --unset pager.grep" &&
test_config pager.grep false &&
test_terminal git grep initial &&
! test -e paginated.out
'
test_expect_success TTY 'git config uses a pager if configured to' '
rm -f paginated.out &&
git config pager.config true &&
test_when_finished "git config --unset pager.config" &&
test_config pager.config true &&
test_terminal git config --list &&
test -e paginated.out
'
@ -116,8 +114,7 @@ test_expect_success TTY 'git config uses a pager if configured to' '
test_expect_success TTY 'configuration can enable pager (from subdir)' '
rm -f paginated.out &&
mkdir -p subdir &&
git config pager.bundle true &&
test_when_finished "git config --unset pager.bundle" &&
test_config pager.bundle true &&
git bundle create test.bundle --all &&
rm -f paginated.out subdir/paginated.out &&
@ -150,7 +147,7 @@ test_expect_success 'tests can detect color' '
test_expect_success 'no color when stdout is a regular file' '
rm -f colorless.log &&
git config color.ui auto ||
test_config color.ui auto ||
cleanup_fail &&
git log >colorless.log &&
@ -159,7 +156,7 @@ test_expect_success 'no color when stdout is a regular file' '
test_expect_success TTY 'color when writing to a pager' '
rm -f paginated.out &&
git config color.ui auto ||
test_config color.ui auto ||
cleanup_fail &&
(
@ -170,9 +167,21 @@ test_expect_success TTY 'color when writing to a pager' '
colorful paginated.out
'
test_expect_success TTY 'colors are suppressed by color.pager' '
rm -f paginated.out &&
test_config color.ui auto &&
test_config color.pager false &&
(
TERM=vt100 &&
export TERM &&
test_terminal git log
) &&
! colorful paginated.out
'
test_expect_success 'color when writing to a file intended for a pager' '
rm -f colorful.log &&
git config color.ui auto ||
test_config color.ui auto ||
cleanup_fail &&
(
@ -184,6 +193,17 @@ test_expect_success 'color when writing to a file intended for a pager' '
colorful colorful.log
'
test_expect_success TTY 'colors are sent to pager for external commands' '
test_config alias.externallog "!git log" &&
test_config color.ui auto &&
(
TERM=vt100 &&
export TERM &&
test_terminal git -p externallog
) &&
colorful paginated.out
'
# Use this helper to make it easy for the caller of your
# terminal-using function to specify whether it should fail.
# If you write
@ -221,7 +241,7 @@ test_default_pager() {
$test_expectation SIMPLEPAGER,TTY "$cmd - default pager is used by default" "
sane_unset PAGER GIT_PAGER &&
test_might_fail git config --unset core.pager &&
test_unconfig core.pager &&
rm -f default_pager_used ||
cleanup_fail &&
@ -244,7 +264,7 @@ test_PAGER_overrides() {
$test_expectation TTY "$cmd - PAGER overrides default pager" "
sane_unset GIT_PAGER &&
test_might_fail git config --unset core.pager &&
test_unconfig core.pager &&
rm -f PAGER_used ||
cleanup_fail &&
@ -277,7 +297,7 @@ test_core_pager() {
PAGER=wc &&
export PAGER &&
git config core.pager 'wc >core.pager_used' &&
test_config core.pager 'wc >core.pager_used' &&
$full_command &&
${if_local_config}test -e core.pager_used
"
@ -307,7 +327,7 @@ test_pager_subdir_helper() {
PAGER=wc &&
stampname=\$(pwd)/core.pager_used &&
export PAGER stampname &&
git config core.pager 'wc >\"\$stampname\"' &&
test_config core.pager 'wc >\"\$stampname\"' &&
mkdir sub &&
(
cd sub &&
@ -324,7 +344,7 @@ test_GIT_PAGER_overrides() {
rm -f GIT_PAGER_used ||
cleanup_fail &&
git config core.pager wc &&
test_config core.pager wc &&
GIT_PAGER='wc >GIT_PAGER_used' &&
export GIT_PAGER &&
$full_command &&
@ -402,21 +422,21 @@ test_core_pager_subdir expect_success test_must_fail \
'git -p apply </dev/null'
test_expect_success TTY 'command-specific pager' '
unset PAGER GIT_PAGER;
sane_unset PAGER GIT_PAGER &&
echo "foo:initial" >expect &&
>actual &&
git config --unset core.pager &&
git config pager.log "sed s/^/foo:/ >actual" &&
test_unconfig core.pager &&
test_config pager.log "sed s/^/foo:/ >actual" &&
test_terminal git log --format=%s -1 &&
test_cmp expect actual
'
test_expect_success TTY 'command-specific pager overrides core.pager' '
unset PAGER GIT_PAGER;
sane_unset PAGER GIT_PAGER &&
echo "foo:initial" >expect &&
>actual &&
git config core.pager "exit 1"
git config pager.log "sed s/^/foo:/ >actual" &&
test_config core.pager "exit 1"
test_config pager.log "sed s/^/foo:/ >actual" &&
test_terminal git log --format=%s -1 &&
test_cmp expect actual
'
@ -425,7 +445,7 @@ test_expect_success TTY 'command-specific pager overridden by environment' '
GIT_PAGER="sed s/^/foo:/ >actual" && export GIT_PAGER &&
>actual &&
echo "foo:initial" >expect &&
git config pager.log "exit 1" &&
test_config pager.log "exit 1" &&
test_terminal git log --format=%s -1 &&
test_cmp expect actual
'

View File

@ -361,6 +361,24 @@ test_chmod () {
git update-index --add "--chmod=$@"
}
# Unset a configuration variable, but don't fail if it doesn't exist.
test_unconfig () {
git config --unset-all "$@"
config_status=$?
case "$config_status" in
5) # ok, nothing to unset
config_status=0
;;
esac
return $config_status
}
# Set git config, automatically unsetting it after the test is over.
test_config () {
test_when_finished "test_unconfig '$1'" &&
git config "$@"
}
# Use test_set_prereq to tell that a particular prerequisite is available.
# The prerequisite can later be checked for in two ways:
#