diff options
author | Michael Olbrich <m.olbrich@pengutronix.de> | 2022-11-11 09:27:46 +0100 |
---|---|---|
committer | Michael Olbrich <m.olbrich@pengutronix.de> | 2022-11-11 14:26:40 +0100 |
commit | 448d9beaae484d35753b4a2689b32174fb791a7c (patch) | |
tree | dae94ec9b5f2ea9d2c35b8309716f879e56d50e8 | |
parent | 807c0dd6b5e187d22026a5beb08591dabaa73273 (diff) | |
download | ptxdist-448d9beaae484d35753b4a2689b32174fb791a7c.tar.gz ptxdist-448d9beaae484d35753b4a2689b32174fb791a7c.tar.xz |
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 <m.olbrich@pengutronix.de>
-rw-r--r-- | scripts/lib/ptxd_make_xpkg_pkg.sh | 20 |
1 files 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}" && |