aboutsummaryrefslogtreecommitdiff
path: root/hooks/find_config_updates.hook
blob: f050cfd84c78de2719ce06ed5904e45729028e03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/env bash
# vim: set et sw=4 sts=4 :

# Copyright (c) 2006, 2007, 2008, 2009 Ciaran McCreesh
#
# This file is part of the Paludis package manager. Paludis is free software;
# you can redistribute it and/or modify it under the terms of the GNU General
# Public License, version 2, as published by the Free Software Foundation.
#
# Paludis 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
# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA  02111-1307  USA

check_for_config_updates()
{
    if [[ "${PRETEND}" == true ]] ; then
        return
    fi

    shopt -s extglob

    export PATH="$(${PALUDIS_EBUILD_DIR}/utils/canonicalise ${PALUDIS_EBUILD_DIR}/utils/ ):${PATH}"
    source ${PALUDIS_ECHO_FUNCTIONS_DIR:-${PALUDIS_EBUILD_DIR}}/echo_functions.bash

    if [[ -n "${PALUDIS_NO_LIVE_DESTINATION}" ]] ; then
        einfo_unhooked "No need to search for configuration files requiring action"
        exit 0
    fi

    echo
    einfo_unhooked "Searching for configuration files requiring action..."

    local c dir dirs=""
    for prot in /etc ${CONFIG_PROTECT} ; do
        if [[ -d "${ROOT%/}/${prot}" ]]; then
            dir="${prot}"
            c=$(find "${ROOT%/}/${dir}" -iname '._cfg????_*' -not -name '*~' | wc -l )
        else
            dir="${prot%/*}"
            [[ -d "${ROOT%/}/${dir}" ]] || continue
            c=$(find "${ROOT%/}/${dir}" -maxdepth 1 -iname "._cfg????_${prot##*/}" -not -name '*~' | wc -l )
        fi
        if [[ ${c} -gt 0 ]] ; then
            einfo_unhooked "Found ${c} files in ${ROOT%%+(/)}/${dir##+(/)}"
            dirs="${dirs:+${dirs}$'\n'}${dir}"
        fi
    done

    if [[ -z "${dirs}" ]] ; then
        einfo_unhooked "No configuration file updates required"
        exit 0
    else
        ewarn "Found files in $(sort -u <<<"${dirs}" | wc -l ) directories"
        ewarn "Your action is required"
        exit 0
    fi
}

stale_hook()
{
    export PATH="$(${PALUDIS_EBUILD_DIR}/utils/canonicalise ${PALUDIS_EBUILD_DIR}/utils/ ):${PATH}"
    source ${PALUDIS_ECHO_FUNCTIONS_DIR:-${PALUDIS_EBUILD_DIR}}/echo_functions.bash

    echo
    ewarn "find_config_updates hook should not be run in phase '${HOOK}'"
    ewarn "Do you have stale symlinks?"
}

for h in install_task_execute_post ; do
    eval "hook_run_${h}() { check_for_config_updates ; }"
    eval "hook_after_${h}() { echo log write_cache_clean news ; }"
done

for h in install_all_post ; do
    eval "hook_run_${h}() { stale_hook ; }"
done

hook_auto_names() {
    echo install_task_execute_post
}