feat: check /etc/* confliction when install

This commit is contained in:
Yingjie Wang 2024-11-18 17:03:06 -05:00
parent a74250ead3
commit a8422c9774

11
leaf
View File

@ -147,7 +147,8 @@ leaf_invoke_hooks() {
leaf_merge_package() {
pushd $1 > /dev/null 2>&1
local _trace_dir="${TRACE_DIR}/${PKG_PREFIX}/${PKG_NAME}"
local _item _mode _owner _group
local _item _item_conflict _mode _owner _group
local _time="$(date +%Y%m%d%H%M%S)"
cat "${_trace_dir}"/DIRS | while read -r _item; do
_mode=$(stat -c %a ."${_item}")
_owner=$(stat -c %u ."${_item}")
@ -158,7 +159,13 @@ leaf_merge_package() {
_mode=$(stat -c %a ."${_item}")
_owner=$(stat -c %u ."${_item}")
_group=$(stat -c %g ."${_item}")
install -D -m ${_mode} -o ${_owner} -g ${_group} ."${_item}" "${_item}"
if [[ "${_item}" == /etc/* && -e "{_item}" ]]; then
_item_conflict="$(dirname "${_item}")/._$(basename "${_item}").conflict_${PKG_NAME}_${_time}"
install -D -m ${_mode} -o ${_owner}-g ${_group} ."${_item}" "${_item_conflict}"
leaf_record_message "Config file confliction on ${_item}, the package provided version is installed as ${_item_conflict}."
else
install -D -m ${_mode} -o ${_owner} -g ${_group} ."${_item}" "${_item}"
fi
done
cat "${_trace_dir}"/LINKS | while read -r _item; do
cp -dp ."${_item}" "${_item}"