mirror of
https://github.com/git/git
synced 2024-08-24 18:26:02 +00:00
pager: move pager-specific setup into the build
Allowing PAGER_ENV to be set at build-time allows us to move pager-specific knowledge out of our build. This allows us to set a better default for FreeBSD more(1), which pretends not to understand ANSI color escapes if the MORE environment variable is left empty, but accepts the same variables as less(1) Originally-from: https://public-inbox.org/git/xmqq61piw4yf.fsf@gitster.dls.corp.google.com/ Helped-by: Junio C Hamano <gitster@pobox.com> Helped-by: Jeff King <peff@peff.net> Signed-off-by: Eric Wong <e@80x24.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
08df31eecc
commit
995bc22d7f
21
Makefile
21
Makefile
|
@ -367,6 +367,14 @@ all::
|
|||
# Define HAVE_BSD_SYSCTL if your platform has a BSD-compatible sysctl function.
|
||||
#
|
||||
# Define HAVE_GETDELIM if your system has the getdelim() function.
|
||||
#
|
||||
# Define PAGER_ENV to a SP separated VAR=VAL pairs to define
|
||||
# default environment variables to be passed when a pager is spawned, e.g.
|
||||
#
|
||||
# PAGER_ENV = LESS=FRX LV=-c
|
||||
#
|
||||
# to say "export LESS=FRX (and LV=-c) if the environment variable
|
||||
# LESS (and LV) is not set, respectively".
|
||||
|
||||
GIT-VERSION-FILE: FORCE
|
||||
@$(SHELL_PATH) ./GIT-VERSION-GEN
|
||||
|
@ -1492,6 +1500,10 @@ ifeq ($(PYTHON_PATH),)
|
|||
NO_PYTHON = NoThanks
|
||||
endif
|
||||
|
||||
ifndef PAGER_ENV
|
||||
PAGER_ENV = LESS=FRX LV=-c
|
||||
endif
|
||||
|
||||
QUIET_SUBDIR0 = +$(MAKE) -C # space to separate -C and subdir
|
||||
QUIET_SUBDIR1 =
|
||||
|
||||
|
@ -1613,6 +1625,11 @@ ifdef DEFAULT_HELP_FORMAT
|
|||
BASIC_CFLAGS += -DDEFAULT_HELP_FORMAT='"$(DEFAULT_HELP_FORMAT)"'
|
||||
endif
|
||||
|
||||
PAGER_ENV_SQ = $(subst ','\'',$(PAGER_ENV))
|
||||
PAGER_ENV_CQ = "$(subst ",\",$(subst \,\\,$(PAGER_ENV)))"
|
||||
PAGER_ENV_CQ_SQ = $(subst ','\'',$(PAGER_ENV_CQ))
|
||||
BASIC_CFLAGS += -DPAGER_ENV='$(PAGER_ENV_CQ_SQ)'
|
||||
|
||||
ALL_CFLAGS += $(BASIC_CFLAGS)
|
||||
ALL_LDFLAGS += $(BASIC_LDFLAGS)
|
||||
|
||||
|
@ -1737,7 +1754,7 @@ common-cmds.h: $(wildcard Documentation/git-*.txt)
|
|||
|
||||
SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):$(GIT_VERSION):\
|
||||
$(localedir_SQ):$(NO_CURL):$(USE_GETTEXT_SCHEME):$(SANE_TOOL_PATH_SQ):\
|
||||
$(gitwebdir_SQ):$(PERL_PATH_SQ):$(SANE_TEXT_GREP)
|
||||
$(gitwebdir_SQ):$(PERL_PATH_SQ):$(SANE_TEXT_GREP):$(PAGER_ENV)
|
||||
define cmd_munge_script
|
||||
$(RM) $@ $@+ && \
|
||||
sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
|
||||
|
@ -1750,6 +1767,7 @@ sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
|
|||
-e 's|@@GITWEBDIR@@|$(gitwebdir_SQ)|g' \
|
||||
-e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
|
||||
-e 's|@@SANE_TEXT_GREP@@|$(SANE_TEXT_GREP)|g' \
|
||||
-e 's|@@PAGER_ENV@@|$(PAGER_ENV_SQ)|g' \
|
||||
$@.sh >$@+
|
||||
endef
|
||||
|
||||
|
@ -2153,6 +2171,7 @@ GIT-BUILD-OPTIONS: FORCE
|
|||
@echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@+
|
||||
@echo NO_PYTHON=\''$(subst ','\'',$(subst ','\'',$(NO_PYTHON)))'\' >>$@+
|
||||
@echo NO_UNIX_SOCKETS=\''$(subst ','\'',$(subst ','\'',$(NO_UNIX_SOCKETS)))'\' >>$@+
|
||||
@echo PAGER_ENV=\''$(subst ','\'',$(subst ','\'',$(PAGER_ENV)))'\' >>$@+
|
||||
ifdef TEST_OUTPUT_DIRECTORY
|
||||
@echo TEST_OUTPUT_DIRECTORY=\''$(subst ','\'',$(subst ','\'',$(TEST_OUTPUT_DIRECTORY)))'\' >>$@+
|
||||
endif
|
||||
|
|
|
@ -206,6 +206,7 @@ ifeq ($(uname_S),FreeBSD)
|
|||
HAVE_PATHS_H = YesPlease
|
||||
GMTIME_UNRELIABLE_ERRORS = UnfortunatelyYes
|
||||
HAVE_BSD_SYSCTL = YesPlease
|
||||
PAGER_ENV = LESS=FRX LV=-c MORE=FRX
|
||||
endif
|
||||
ifeq ($(uname_S),OpenBSD)
|
||||
NO_STRCASESTR = YesPlease
|
||||
|
|
|
@ -160,9 +160,11 @@ git_pager() {
|
|||
else
|
||||
GIT_PAGER=cat
|
||||
fi
|
||||
: "${LESS=-FRX}"
|
||||
: "${LV=-c}"
|
||||
export LESS LV
|
||||
for vardef in @@PAGER_ENV@@
|
||||
do
|
||||
var=${vardef%%=*}
|
||||
eval ": \"\${$vardef}\" && export $var"
|
||||
done
|
||||
|
||||
eval "$GIT_PAGER" '"$@"'
|
||||
}
|
||||
|
|
32
pager.c
32
pager.c
|
@ -63,14 +63,38 @@ const char *git_pager(int stdout_is_tty)
|
|||
return pager;
|
||||
}
|
||||
|
||||
static void setup_pager_env(struct argv_array *env)
|
||||
{
|
||||
const char **argv;
|
||||
int i;
|
||||
char *pager_env = xstrdup(PAGER_ENV);
|
||||
int n = split_cmdline(pager_env, &argv);
|
||||
|
||||
if (n < 0)
|
||||
die("malformed build-time PAGER_ENV: %s",
|
||||
split_cmdline_strerror(n));
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
char *cp = strchr(argv[i], '=');
|
||||
|
||||
if (!cp)
|
||||
die("malformed build-time PAGER_ENV");
|
||||
|
||||
*cp = '\0';
|
||||
if (!getenv(argv[i])) {
|
||||
*cp = '=';
|
||||
argv_array_push(env, argv[i]);
|
||||
}
|
||||
}
|
||||
free(pager_env);
|
||||
free(argv);
|
||||
}
|
||||
|
||||
void prepare_pager_args(struct child_process *pager_process, const char *pager)
|
||||
{
|
||||
argv_array_push(&pager_process->args, pager);
|
||||
pager_process->use_shell = 1;
|
||||
if (!getenv("LESS"))
|
||||
argv_array_push(&pager_process->env_array, "LESS=FRX");
|
||||
if (!getenv("LV"))
|
||||
argv_array_push(&pager_process->env_array, "LV=-c");
|
||||
setup_pager_env(&pager_process->env_array);
|
||||
}
|
||||
|
||||
void setup_pager(void)
|
||||
|
|
|
@ -49,6 +49,19 @@ test_expect_success TTY 'LESS and LV envvars are set for pagination' '
|
|||
grep ^LV= pager-env.out
|
||||
'
|
||||
|
||||
test_expect_success !MINGW,TTY 'LESS and LV envvars set by git-sh-setup' '
|
||||
(
|
||||
sane_unset LESS LV &&
|
||||
PAGER="env >pager-env.out; wc" &&
|
||||
export PAGER &&
|
||||
PATH="$(git --exec-path):$PATH" &&
|
||||
export PATH &&
|
||||
test_terminal sh -c ". git-sh-setup && git_pager"
|
||||
) &&
|
||||
grep ^LESS= pager-env.out &&
|
||||
grep ^LV= pager-env.out
|
||||
'
|
||||
|
||||
test_expect_success TTY 'some commands do not use a pager' '
|
||||
rm -f paginated.out &&
|
||||
test_terminal git rev-list HEAD &&
|
||||
|
|
Loading…
Reference in a new issue