#!/bin/sh -e
#
# 2013 Nico Schottelius (nico-cdist at schottelius.org)
# 2020 Ander Punnar (ander@kvlt.ee)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.

path_is="$( cat "${__object:?}/explorer/path_is" )"

path_should="$( cat "${__object:?}/parameter/path" )"

if [ "$path_is" = "$path_should" ]
then
    exit 0
fi

if [ "$( cat "${__object:?}/explorer/path_should_state" )" = 'absent' ] \
    && [ -z "${__cdist_dry_run+dry run}" ]
then
    echo "$path_should does not exist in target" >&2
    exit 1
fi

name=${__object_id:?}

if ! grep -Fxq "$path_should" "${__object:?}/explorer/alternatives"
then
    if [ -f "${__object:?}/parameter/install" ]
    then
        link="$( cat "${__object:?}/explorer/link" )"
        echo "update-alternatives --install '$link' '$name' '$path_should' 1000"
    elif [ -z "${__cdist_dry_run+dry run}" ]
    then
        # NOTE: ignore error for dry-runs because a package providing the link
        #       to be installed might be managed by another cdist object (which
        #       wasn't executed, because dry run…).
        echo "$path_should is not in $name alternatives." >&2
        echo 'Please install missing packages or use --install to add path to alternatives.' >&2
        exit 1
    fi
fi

echo "update-alternatives --set '$name' '$path_should'"
