mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
estack.eclass: Properly restore shopt options.
Calling "eshopts_push; eshopts_pop" makes Portage report a QA issue: * QA Notice: Global shell options changed and were not restored while calling 'src_prepare' This is caused by some side effect in bash, by which disabling the "posix" option (even if it was already disabled before) in a non-interactive shell also disables the "expand_aliases" option. Work around the problem by always saving and restoring both "set -o" and "shopt" option sets. Also fix "estack_push -s" which should not execute shopt when called without further parameters. Closes: https://bugs.gentoo.org/662586 Signed-off-by: Ulrich Müller <ulm@gentoo.org>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Copyright 1999-2017 Gentoo Foundation
|
||||
# Copyright 1999-2019 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
# @ECLASS: estack.eclass
|
||||
@@ -153,12 +153,13 @@ evar_pop() {
|
||||
# eshopts_pop
|
||||
# @CODE
|
||||
eshopts_push() {
|
||||
# Save both "shopt" and "set -o" option sets, because otherwise
|
||||
# restoring noglob would disable expand_aliases by side effect. #662586
|
||||
estack_push eshopts "$(shopt -p -o) $(shopt -p)"
|
||||
if [[ $1 == -[su] ]] ; then
|
||||
estack_push eshopts "$(shopt -p)"
|
||||
[[ $# -eq 0 ]] && return 0
|
||||
[[ $# -le 1 ]] && return 0
|
||||
shopt "$@" || die "${FUNCNAME}: bad options to shopt: $*"
|
||||
else
|
||||
estack_push eshopts "$(shopt -p -o)"
|
||||
[[ $# -eq 0 ]] && return 0
|
||||
set "$@" || die "${FUNCNAME}: bad options to set: $*"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user