Fix negated services with common prefix

The current sed matching mixes up common-prefix matching;
e.g. "-q-lbaas,q-lbaasv2" is changed into just "v2"

This is more verbose, but I think more reliable.  See also
Ib50f782824f89ae4eb9787f11d42416704babd90.

Change-Id: I3faad0841834e24acc811c05015625cf7f848b19
This commit is contained in:
Ian Wienand 2015-04-15 08:59:04 +10:00
parent cd7655cbfc
commit 2796a82ab4
2 changed files with 37 additions and 5 deletions

View File

@ -1621,14 +1621,38 @@ function disable_all_services {
# Uses global ``ENABLED_SERVICES`` # Uses global ``ENABLED_SERVICES``
# disable_negated_services # disable_negated_services
function disable_negated_services { function disable_negated_services {
local tmpsvcs="${ENABLED_SERVICES}" local to_remove=""
local remaining=""
local enabled=""
local service local service
for service in ${tmpsvcs//,/ }; do
# build up list of services that should be removed; i.e. they
# begin with "-"
for service in ${ENABLED_SERVICES//,/ }; do
if [[ ${service} == -* ]]; then if [[ ${service} == -* ]]; then
tmpsvcs=$(echo ${tmpsvcs}|sed -r "s/(,)?(-)?${service#-}(,)?/,/g") to_remove+=",${service#-}"
else
remaining+=",${service}"
fi fi
done done
ENABLED_SERVICES=$(_cleanup_service_list "$tmpsvcs")
# go through the service list. if this service appears in the "to
# be removed" list, drop it
for service in ${remaining//,/ }; do
local remove
local add=1
for remove in ${to_remove//,/ }; do
if [[ ${remove} == ${service} ]]; then
add=0
break
fi
done
if [[ $add == 1 ]]; then
enabled="${enabled},$service"
fi
done
ENABLED_SERVICES=$(_cleanup_service_list "$enabled")
} }
# disable_service() removes the services passed as argument to the # disable_service() removes the services passed as argument to the

View File

@ -130,7 +130,15 @@ test_disable_negated_services 'a,-a' ''
test_disable_negated_services 'b,a,-a' 'b' test_disable_negated_services 'b,a,-a' 'b'
test_disable_negated_services 'a,b,-a' 'b' test_disable_negated_services 'a,b,-a' 'b'
test_disable_negated_services 'a,-a,b' 'b' test_disable_negated_services 'a,-a,b' 'b'
test_disable_negated_services 'a,aa,-a' 'aa'
test_disable_negated_services 'aa,-a' 'aa'
test_disable_negated_services 'a_a, -a_a' ''
test_disable_negated_services 'a-b, -a-b' ''
test_disable_negated_services 'a-b, b, -a-b' 'b'
test_disable_negated_services 'a,-a,av2,b' 'av2,b'
test_disable_negated_services 'a,aa,-a' 'aa'
test_disable_negated_services 'a,av2,-a,a' 'av2'
test_disable_negated_services 'a,-a,av2' 'av2'
echo "Testing is_package_installed()" echo "Testing is_package_installed()"