Skip to content
This repository was archived by the owner on Jan 9, 2026. It is now read-only.

Commit 0a41491

Browse files
committed
allow disabling dwarfs extract
1 parent 733237a commit 0a41491

File tree

1 file changed

+81
-52
lines changed

1 file changed

+81
-52
lines changed

scripts/runner/functions.sh

Lines changed: 81 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -403,63 +403,92 @@ if [[ "${CONTINUE_SBUILD}" == "YES" ]]; then
403403
'
404404
#Remove Size0 Files
405405
find "${SBUILD_OUTDIR}" -maxdepth 1 -type f -size 0 -delete 2>/dev/null
406-
#Fix Desktop
407-
find "${SBUILD_OUTDIR}" -maxdepth 1 -type f -iname "*.desktop" -exec sed -E 's/^[[:space:]]*[Ee]xec[[:space:]]*=[[:space:]]*[^[:space:]]+/Exec={{pkg_path}}/' -i "{}" \;
408-
#Icons [Dwarfs Only]
409-
unset DWARFS_PKGS ; DWARFS_PKGS=()
410-
mapfile -t "DWARFS_PKGS" < <(find "${SBUILD_OUTDIR}" -maxdepth 1 -type f -exec bash -c 'dwarfsck --input "$1" --quiet 2>/dev/null && realpath "$1"' _ "{}" \;)
411-
if [[ ${#DWARFS_PKGS[@]} -ne 0 ]]; then
412-
echo -e "\n[+] Extracting Media from ${SBUILD_PKG} (Dwarfs)"
413-
if [[ -s "${SBUILD_OUTDIR}/.DirIcon" ]]; then
414-
rsync -achL "${SBUILD_OUTDIR}/.DirIcon" "${SBUILD_TMPDIR}/.DirIcon.bak"
415-
fi
416-
if [[ -s "${SBUILD_OUTDIR}/${PKG}.png" ]]; then
417-
rsync -achL "${SBUILD_OUTDIR}/${PKG}.png" "${SBUILD_TMPDIR}/${PKG}.png.bak"
418-
fi
419-
if [[ -s "${SBUILD_OUTDIR}/${PKG}.svg" ]]; then
420-
rsync -achL "${SBUILD_OUTDIR}/${PKG}.svg" "${SBUILD_TMPDIR}/${PKG}.svg.bak"
421-
fi
422-
pushd "${SBUILD_TMPDIR}" &>/dev/null &&\
423-
for D_PKG in "${DWARFS_PKGS[@]}"; do
424-
dwarfsextract -i "${D_PKG}" --format="ustar" | tar -x \
425-
--dereference \
426-
--no-anchored \
427-
--overwrite \
428-
--wildcards \
429-
--wildcards-match-slash \
430-
'*.DirIcon' '*.png' '*.svg'
431-
done
432-
pushd "${SBUILD_OUTDIR}" &>/dev/null
433-
find -L "${SBUILD_TMPDIR}" -type f,l -regex '.*\.\(DirIcon\|png\)' \
434-
-not -regex '.*\(favicon\|/\(16x16\|22x22\|24x24\|32x32\|36x36\|48x48\|64x64\|72x72\|96x96\)/\).*' \
435-
| awk '{print length, $0}' | sort -n | awk 'NR==1 {print $2}' | xargs -I "{}" rsync -achLv "{}" "${SBUILD_TMPDIR}/${PKG}.png"
436-
if [[ ! -f "${SBUILD_TMPDIR}/${PKG}.png" || $(stat -c%s "${SBUILD_TMPDIR}/${PKG}.png") -le 3 ]]; then
437-
find -L "${SBUILD_TMPDIR}" -regex ".*\(128x128/apps\|256x256\)/.*${PKG}.*\.\(png\)" -printf "%s %p\n" -quit | sort -n | awk 'NR==1 {print $2}' | xargs -I "{}" rsync -achLv "{}" "${SBUILD_OUTDIR}/${PKG}.png"
438-
elif [[ -s "${SBUILD_TMPDIR}/${PKG}.png" ]]; then
439-
cp -fv "${SBUILD_TMPDIR}/${PKG}.png" "${SBUILD_OUTDIR}/${PKG}.png"
406+
#Exract Media [Dwarfs Only]
407+
if [[ "${DWARFS_PKG_EXTRACT}" != "NO" ]]; then
408+
unset DWARFS_PKGS ; DWARFS_PKGS=()
409+
mapfile -t "DWARFS_PKGS" < <(find "${SBUILD_OUTDIR}" -maxdepth 1 -type f -exec bash -c 'dwarfsck --input "$1" --quiet 2>/dev/null && realpath "$1"' _ "{}" \;)
410+
if [[ ${#DWARFS_PKGS[@]} -ne 0 ]]; then
411+
echo -e "\n[+] Extracting Media from ${SBUILD_PKG} (Dwarfs)"
412+
if [[ -s "${SBUILD_OUTDIR}/${PKG}.appdata.xml" ]]; then
413+
rsync -achL "${SBUILD_OUTDIR}/${PKG}.appdata.xml" "${SBUILD_TMPDIR}/${PKG}.appdata.xml.bak"
440414
fi
441-
if [[ ! -s "${SBUILD_OUTDIR}/${PKG}.png" || $(stat -c%s "${SBUILD_TMPDIR}/${PKG}.png") -le 3 ]]; then
442-
if [[ -s "${SBUILD_TMPDIR}/.DirIcon.bak" ]]; then
443-
cp -fv "${SBUILD_TMPDIR}/.DirIcon.bak" "${SBUILD_OUTDIR}/.DirIcon"
444-
fi
445-
if [[ -s "${SBUILD_TMPDIR}/${PKG}.png.bak" ]]; then
446-
cp -fv "${SBUILD_TMPDIR}/${PKG}.png.bak" "${SBUILD_OUTDIR}/${PKG}.png"
447-
fi
415+
if [[ -s "${SBUILD_OUTDIR}/.DirIcon" ]]; then
416+
rsync -achL "${SBUILD_OUTDIR}/.DirIcon" "${SBUILD_TMPDIR}/.DirIcon.bak"
448417
fi
449-
find -L "${SBUILD_TMPDIR}" -type f,l -regex '.*\.\(svg\)' \
450-
-not -regex '.*\(favicon\|/\(16x16\|22x22\|24x24\|32x32\|36x36\|48x48\|64x64\|72x72\|96x96\)/\).*' \
451-
| awk '{print length, $0}' | sort -n | awk 'NR==1 {print $2}' | xargs -I "{}" rsync -achLv "{}" "${SBUILD_TMPDIR}/${PKG}.svg"
452-
if [[ ! -f "${SBUILD_TMPDIR}/${PKG}.svg" || $(stat -c%s "${SBUILD_TMPDIR}/${PKG}.svg") -le 3 ]]; then
453-
find -L "${SBUILD_TMPDIR}" -regex ".*\(128x128/apps\|256x256\)/.*${PKG}.*\.\(svg\)" -printf "%s %p\n" -quit | sort -n | awk 'NR==1 {print $2}' | xargs -I "{}" rsync -achLv "{}" "${SBUILD_OUTDIR}/${PKG}.svg"
454-
elif [[ -s "${SBUILD_TMPDIR}/${PKG}.svg" ]]; then
455-
cp -fv "${SBUILD_TMPDIR}/${PKG}.svg" "${SBUILD_OUTDIR}/${PKG}.svg"
418+
if [[ -s "${SBUILD_OUTDIR}/${PKG}.desktop" ]]; then
419+
rsync -achL "${SBUILD_OUTDIR}/${PKG}.desktop" "${SBUILD_TMPDIR}/${PKG}.desktop.bak"
456420
fi
457-
if [[ ! -s "${SBUILD_OUTDIR}/${PKG}.png" || $(stat -c%s "${SBUILD_TMPDIR}/${PKG}.png") -le 3 ]]; then
458-
if [[ -s "${SBUILD_TMPDIR}/${PKG}.svg.bak" ]]; then
459-
cp -fv "${SBUILD_TMPDIR}/${PKG}.svg.bak" "${SBUILD_OUTDIR}/${PKG}.svg"
460-
fi
421+
if [[ -s "${SBUILD_OUTDIR}/${PKG}.metainfo.xml" ]]; then
422+
rsync -achL "${SBUILD_OUTDIR}/${PKG}.metainfo.xml" "${SBUILD_TMPDIR}/${PKG}.metainfo.xml.bak"
423+
fi
424+
if [[ -s "${SBUILD_OUTDIR}/${PKG}.png" ]]; then
425+
rsync -achL "${SBUILD_OUTDIR}/${PKG}.png" "${SBUILD_TMPDIR}/${PKG}.png.bak"
426+
fi
427+
if [[ -s "${SBUILD_OUTDIR}/${PKG}.svg" ]]; then
428+
rsync -achL "${SBUILD_OUTDIR}/${PKG}.svg" "${SBUILD_TMPDIR}/${PKG}.svg.bak"
461429
fi
430+
pushd "${SBUILD_TMPDIR}" &>/dev/null &&\
431+
for D_PKG in "${DWARFS_PKGS[@]}"; do
432+
dwarfsextract -i "${D_PKG}" --format="ustar" | tar -x \
433+
--dereference \
434+
--no-anchored \
435+
--overwrite \
436+
--wildcards \
437+
--wildcards-match-slash \
438+
'*.appdata.xml' '*.desktop' '*.DirIcon' '*.metainfo.xml' '*.png' '*.svg' 2>/dev/null
439+
done
440+
pushd "${SBUILD_OUTDIR}" &>/dev/null
441+
find -L "${SBUILD_TMPDIR}" -type f,l -name "*.appdata.xml" -printf "%s %p\n" | awk 'BEGIN{matched=0}{lines[NR]=$0}tolower($2)~/share.*metainfo/{matches[NR]=1;matched=1}END{if(matched){for(i in matches)print lines[i]}else{for(i=1;i<=NR;i++)print lines[i]}}' | sort -n | awk 'NR==1 {print $2}' | xargs -I "{}" rsync -achLv "{}" "${SBUILD_OUTDIR}/${PKG}.appdata.xml"
442+
if [[ ! -s "${SBUILD_OUTDIR}/${PKG}.appdata.xml" || $(stat -c%s "${SBUILD_OUTDIR}/${PKG}.appdata.xml") -le 3 ]]; then
443+
if [[ -s "${SBUILD_TMPDIR}/${PKG}.appdata.xml.bak" ]]; then
444+
cp -fv "${SBUILD_TMPDIR}/${PKG}.appdata.xml.bak" "${SBUILD_OUTDIR}/${PKG}.appdata.xml"
445+
fi
446+
fi
447+
find -L "${SBUILD_TMPDIR}" -type f,l -name "*.desktop" -printf "%s %p\n" | awk 'BEGIN{matched=0}{lines[NR]=$0}tolower($2)~/share.*application/{matches[NR]=1;matched=1}END{if(matched){for(i in matches)print lines[i]}else{for(i=1;i<=NR;i++)print lines[i]}}' | sort -n | awk 'NR==1 {print $2}' | xargs -I "{}" rsync -achLv "{}" "${SBUILD_OUTDIR}/${PKG}.desktop"
448+
if [[ ! -s "${SBUILD_OUTDIR}/${PKG}.desktop" || $(stat -c%s "${SBUILD_OUTDIR}/${PKG}.desktop") -le 3 ]]; then
449+
if [[ -s "${SBUILD_TMPDIR}/${PKG}.desktop.bak" ]]; then
450+
cp -fv "${SBUILD_TMPDIR}/${PKG}.desktop.bak" "${SBUILD_OUTDIR}/${PKG}.desktop"
451+
fi
452+
fi
453+
find -L "${SBUILD_TMPDIR}" -type f,l -name "*.metainfo.xml" -printf "%s %p\n" | awk 'BEGIN{matched=0}{lines[NR]=$0}tolower($2)~/share.*metainfo/{matches[NR]=1;matched=1}END{if(matched){for(i in matches)print lines[i]}else{for(i=1;i<=NR;i++)print lines[i]}}' | sort -n | awk 'NR==1 {print $2}' | xargs -I "{}" rsync -achLv "{}" "${SBUILD_OUTDIR}/${PKG}.metainfo.xml"
454+
if [[ ! -s "${SBUILD_OUTDIR}/${PKG}.metainfo.xml" || $(stat -c%s "${SBUILD_OUTDIR}/${PKG}.metainfo.xml") -le 3 ]]; then
455+
if [[ -s "${SBUILD_TMPDIR}/${PKG}.metainfo.xml.bak" ]]; then
456+
cp -fv "${SBUILD_TMPDIR}/${PKG}.metainfo.xml.bak" "${SBUILD_OUTDIR}/${PKG}.metainfo.xml"
457+
fi
458+
fi
459+
find -L "${SBUILD_TMPDIR}" -type f,l -regex '.*\.\(DirIcon\|png\)' \
460+
-not -regex '.*\(favicon\|/\(16x16\|22x22\|24x24\|32x32\|36x36\|48x48\|64x64\|72x72\|96x96\)/\).*' \
461+
| awk '{print length, $0}' | sort -n | awk 'NR==1 {print $2}' | xargs -I "{}" rsync -achLv "{}" "${SBUILD_TMPDIR}/${PKG}.png"
462+
if [[ ! -f "${SBUILD_TMPDIR}/${PKG}.png" || $(stat -c%s "${SBUILD_TMPDIR}/${PKG}.png") -le 3 ]]; then
463+
find -L "${SBUILD_TMPDIR}" -regex ".*\(128x128/apps\|256x256\)/.*${PKG}.*\.\(png\)" -printf "%s %p\n" -quit | sort -n | awk 'NR==1 {print $2}' | xargs -I "{}" rsync -achLv "{}" "${SBUILD_OUTDIR}/${PKG}.png"
464+
elif [[ -s "${SBUILD_TMPDIR}/${PKG}.png" ]]; then
465+
cp -fv "${SBUILD_TMPDIR}/${PKG}.png" "${SBUILD_OUTDIR}/${PKG}.png"
466+
fi
467+
if [[ ! -s "${SBUILD_OUTDIR}/${PKG}.png" || $(stat -c%s "${SBUILD_TMPDIR}/${PKG}.png") -le 3 ]]; then
468+
if [[ -s "${SBUILD_TMPDIR}/.DirIcon.bak" ]]; then
469+
cp -fv "${SBUILD_TMPDIR}/.DirIcon.bak" "${SBUILD_OUTDIR}/.DirIcon"
470+
fi
471+
if [[ -s "${SBUILD_TMPDIR}/${PKG}.png.bak" ]]; then
472+
cp -fv "${SBUILD_TMPDIR}/${PKG}.png.bak" "${SBUILD_OUTDIR}/${PKG}.png"
473+
fi
474+
fi
475+
find -L "${SBUILD_TMPDIR}" -type f,l -regex '.*\.\(svg\)' \
476+
-not -regex '.*\(favicon\|/\(16x16\|22x22\|24x24\|32x32\|36x36\|48x48\|64x64\|72x72\|96x96\)/\).*' \
477+
| awk '{print length, $0}' | sort -n | awk 'NR==1 {print $2}' | xargs -I "{}" rsync -achLv "{}" "${SBUILD_TMPDIR}/${PKG}.svg"
478+
if [[ ! -f "${SBUILD_TMPDIR}/${PKG}.svg" || $(stat -c%s "${SBUILD_TMPDIR}/${PKG}.svg") -le 3 ]]; then
479+
find -L "${SBUILD_TMPDIR}" -regex ".*\(128x128/apps\|256x256\)/.*${PKG}.*\.\(svg\)" -printf "%s %p\n" -quit | sort -n | awk 'NR==1 {print $2}' | xargs -I "{}" rsync -achLv "{}" "${SBUILD_OUTDIR}/${PKG}.svg"
480+
elif [[ -s "${SBUILD_TMPDIR}/${PKG}.svg" ]]; then
481+
cp -fv "${SBUILD_TMPDIR}/${PKG}.svg" "${SBUILD_OUTDIR}/${PKG}.svg"
482+
fi
483+
if [[ ! -s "${SBUILD_OUTDIR}/${PKG}.png" || $(stat -c%s "${SBUILD_TMPDIR}/${PKG}.png") -le 3 ]]; then
484+
if [[ -s "${SBUILD_TMPDIR}/${PKG}.svg.bak" ]]; then
485+
cp -fv "${SBUILD_TMPDIR}/${PKG}.svg.bak" "${SBUILD_OUTDIR}/${PKG}.svg"
486+
fi
487+
fi
488+
fi
462489
fi
490+
#Fix Desktop
491+
find "${SBUILD_OUTDIR}" -maxdepth 1 -type f -iname "*.desktop" -exec sed -E 's/^[[:space:]]*[Ee]xec[[:space:]]*=[[:space:]]*[^[:space:]]+/Exec={{pkg_path}}/' -i "{}" \;
463492
#Icons [Display using Chafa]
464493
if command -v chafa &>/dev/null; then
465494
timeout -k 10s 60s find -L "${SBUILD_OUTDIR}" -maxdepth 1 -type f,l -regex '.*\.\(DirIcon\|png\|svg\)' -exec bash -c 'basename "{}" && chafa "{}"' \;

0 commit comments

Comments
 (0)