Переглянути джерело

fix(install_config): replace cp -nv with explicit file existence check (#4897)

* fix(install_config): replace cp -nv with explicit file existence check

Newer coreutils (Ubuntu 24.04+, Debian 13+) emit a portability warning
when using cp -n: 'behavior of -n is non-portable and may change in future'.

Replace all cp -nv usages with an explicit [ ! -f dest ] guard, which is
portable across all distros and preserves the same OK/SKIP/FAIL behaviour.

* fix(install_config): use -e and -L checks to handle broken symlinks

Using only -f missed broken symlinks (-e returns false for them but
-L returns true). Use both checks to match the skip behaviour of cp -n.
Daniel Gibbs 1 місяць тому
батько
коміт
9dfbb8eeed
1 змінених файлів з 28 додано та 5 видалено
  1. 28 5
      lgsm/modules/install_config.sh

+ 28 - 5
lgsm/modules/install_config.sh

@@ -34,8 +34,13 @@ fn_default_config_remote() {
 		if [ "${config}" == "${servercfgdefault}" ]; then
 			mkdir -p "${servercfgdir}"
 			echo -en "copying config file [ ${italic}${servercfgfullpath}${default} ]"
-			changes+=$(cp -nv "${lgsmdir}/config-default/config-game/${config}" "${servercfgfullpath}")
-			exitcode=$?
+			if [ ! -e "${servercfgfullpath}" ] && [ ! -L "${servercfgfullpath}" ]; then
+				cp "${lgsmdir}/config-default/config-game/${config}" "${servercfgfullpath}"
+				exitcode=$?
+				[ "${exitcode}" -eq 0 ] && changes="copied"
+			else
+				exitcode=0
+			fi
 			if [ "${exitcode}" -ne 0 ]; then
 				fn_print_fail_eol_nl
 				fn_script_log_fail "copying config file ${servercfgfullpath}"
@@ -48,7 +53,13 @@ fn_default_config_remote() {
 		elif [ "${shortname}" == "arma3" ] && [ "${config}" == "${networkcfgdefault}" ]; then
 			mkdir -p "${servercfgdir}"
 			echo -en "copying config file [ ${italic}${networkcfgfullpath}${default} ]"
-			changes+=$(cp -nv "${lgsmdir}/config-default/config-game/${config}" "${networkcfgfullpath}")
+			if [ ! -e "${networkcfgfullpath}" ] && [ ! -L "${networkcfgfullpath}" ]; then
+				cp "${lgsmdir}/config-default/config-game/${config}" "${networkcfgfullpath}"
+				exitcode=$?
+				[ "${exitcode}" -eq 0 ] && changes="copied"
+			else
+				exitcode=0
+			fi
 			if [ "${exitcode}" -ne 0 ]; then
 				fn_print_fail_eol_nl
 				fn_script_log_fail "copying config file ${networkcfgdefault}"
@@ -60,7 +71,13 @@ fn_default_config_remote() {
 			fi
 		elif [ "${shortname}" == "dst" ] && [ "${config}" == "${clustercfgdefault}" ]; then
 			echo -en "copying config file [ ${italic}${clustercfgfullpath}${default} ]"
-			changes+=$(cp -nv "${lgsmdir}/config-default/config-game/${clustercfgdefault}" "${clustercfgfullpath}")
+			if [ ! -e "${clustercfgfullpath}" ] && [ ! -L "${clustercfgfullpath}" ]; then
+				cp "${lgsmdir}/config-default/config-game/${clustercfgdefault}" "${clustercfgfullpath}"
+				exitcode=$?
+				[ "${exitcode}" -eq 0 ] && changes="copied"
+			else
+				exitcode=0
+			fi
 			if [ "${exitcode}" -ne 0 ]; then
 				fn_print_fail_eol_nl
 				fn_script_log_fail "copying config file ${clustercfgfullpath}"
@@ -72,7 +89,13 @@ fn_default_config_remote() {
 			fi
 		else
 			echo -en "copying config file [ ${italic}${servercfgdir}/${config}${default} ]"
-			changes+=$(cp -nv "${lgsmdir}/config-default/config-game/${config}" "${servercfgdir}/${config}")
+			if [ ! -e "${servercfgdir}/${config}" ] && [ ! -L "${servercfgdir}/${config}" ]; then
+				cp "${lgsmdir}/config-default/config-game/${config}" "${servercfgdir}/${config}"
+				exitcode=$?
+				[ "${exitcode}" -eq 0 ] && changes="copied"
+			else
+				exitcode=0
+			fi
 			if [ "${exitcode}" -ne 0 ]; then
 				fn_print_fail_eol_nl
 				fn_script_log_fail "copying config file ${servercfgdir}/${config}"