test: use dtach(1) instead of screen(1) in emacs tests

dtach is simpler than screen and is not setuid/setgid program so
TMPDIR does not get cleared by dynamic loader when executed
This commit is contained in:
Tomi Ollila 2011-11-11 23:33:58 +02:00 committed by David Bremner
parent 0234a16b56
commit 2f2ea8a49a

View file

@ -39,7 +39,7 @@ done,*)
;; ;;
esac esac
# Keep the original TERM for say_color # Keep the original TERM for say_color and test_emacs
ORIGINAL_TERM=$TERM ORIGINAL_TERM=$TERM
# For repeatability, reset the environment to known value. # For repeatability, reset the environment to known value.
@ -50,8 +50,6 @@ TZ=UTC
TERM=dumb TERM=dumb
export LANG LC_ALL PAGER TERM TZ export LANG LC_ALL PAGER TERM TZ
GIT_TEST_CMP=${GIT_TEST_CMP:-diff -u} GIT_TEST_CMP=${GIT_TEST_CMP:-diff -u}
export SCREENRC=/dev/null
export SYSSCREENRC=/dev/null
# Protect ourselves from common misconfiguration to export # Protect ourselves from common misconfiguration to export
# CDPATH into the environment # CDPATH into the environment
@ -843,12 +841,15 @@ EOF
test_emacs () { test_emacs () {
if [ -z "$EMACS_SERVER" ]; then if [ -z "$EMACS_SERVER" ]; then
EMACS_SERVER="notmuch-test-suite-$$" EMACS_SERVER="notmuch-test-suite-$$"
# start a detached screen session with an emacs server # start a detached session with an emacs server
screen -S "$EMACS_SERVER" -d -m "$TMP_DIRECTORY/run_emacs" \ # user's TERM is given to dtach which assumes a minimally
--no-window-system \ # VT100-compatible terminal -- and emacs inherits that
--eval "(setq server-name \"$EMACS_SERVER\")" \ TERM=$ORIGINAL_TERM dtach -n "$TMP_DIRECTORY/emacs-dtach-socket.$$" \
--eval '(server-start)' \ sh -c "stty rows 24 cols 80; exec '$TMP_DIRECTORY/run_emacs' \
--eval "(orphan-watchdog $$)" || return --no-window-system \
--eval '(setq server-name \"$EMACS_SERVER\")' \
--eval '(server-start)' \
--eval '(orphan-watchdog $$)'" || return
# wait until the emacs server is up # wait until the emacs server is up
until test_emacs '()' 2>/dev/null; do until test_emacs '()' 2>/dev/null; do
sleep 1 sleep 1