From a8422c9774744c9b03ffb98f315cb2bbdc905ae5 Mon Sep 17 00:00:00 2001 From: Yingjie Wang Date: Mon, 18 Nov 2024 17:03:06 -0500 Subject: [PATCH] feat: check /etc/* confliction when install --- leaf | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/leaf b/leaf index dda260c..2f8e8f0 100755 --- a/leaf +++ b/leaf @@ -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}"