From 448d9beaae484d35753b4a2689b32174fb791a7c Mon Sep 17 00:00:00 2001 From: Michael Olbrich Date: Fri, 11 Nov 2022 09:27:46 +0100 Subject: ptxd_make_xpkg_pkg: avoid calling mkdir if possible Executing forking and executing mkdir often takes a lot of time. And in most cases, the directory already exists. So only execute mkdir if the directory does not exist yet. And only create the lockfile directory once per package. For packages with many files, this can save a lot of time in targetinstall. Signed-off-by: Michael Olbrich --- scripts/lib/ptxd_make_xpkg_pkg.sh | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/scripts/lib/ptxd_make_xpkg_pkg.sh b/scripts/lib/ptxd_make_xpkg_pkg.sh index f094cb130..9e5288418 100644 --- a/scripts/lib/ptxd_make_xpkg_pkg.sh +++ b/scripts/lib/ptxd_make_xpkg_pkg.sh @@ -22,6 +22,17 @@ ptxd_install_error() { } export -f ptxd_install_error +mkdir_p() { + local d + for d in "${@}"; do + if [ ! -d "${d}" ]; then + mkdir -p "${@}" + return + fi + done +} +export -f mkdir_p + # # ptxd_install_getent_id # @@ -119,7 +130,6 @@ export -f ptxd_install_setup_global ptxd_install_lock() { local lockfile - mkdir -p "${PTXDIST_TEMPDIR}/locks" if [ -n "${dst}" ]; then lockfile="${PTXDIST_TEMPDIR}/locks/${dst//\//-}" @@ -271,7 +281,7 @@ ptxd_install_virtfs() { for d in "${ndirs[@]/%/${dst}}"; do dir="${d%/*}/.virtfs_metadata" file="${dir}/${d##*/}"&& - mkdir -p "${dir}" && + mkdir_p "${dir}" && cat <<- EOF > "${file}" virtfs.uid=${usr} virtfs.gid=${grp} @@ -297,7 +307,7 @@ ptxd_install_dir_impl() { install -m "${mod}" -o "${usr}" -g "${grp}" -d "${pdirs[@]/%/${dst}}" else # don't overwrite existing permissions - mkdir -p "${dirs[@]/%/${dst}}" + mkdir_p "${dirs[@]/%/${dst}}" fi && ptxd_install_virtfs @@ -322,7 +332,7 @@ ptxd_ensure_dir() { if [ "${no_skip}" != 1 ]; then # just create the rest and continue if virtfs data already exists # but don't overwrite existing permissions - mkdir -p "${dirs[@]/%/${dst}}" && + mkdir_p "${dirs[@]/%/${dst}}" && return fi && ptxd_install_lock && @@ -1118,6 +1128,8 @@ ptxd_make_xpkg_pkg() { local pkg_xpkg_perms="$4" local -a dirs ndirs pdirs ddirs + mkdir_p "${PTXDIST_TEMPDIR}/locks" && + ptxd_install_setup_global && . "${pkg_xpkg_cmds}" && -- cgit v1.2.3