Update image.sh

This commit is contained in:
Kroese
2026-08-03 12:54:47 +02:00
committed by GitHub
parent 74ad0f1942
commit 661a4f3ca5
+41 -23
View File
@@ -9,10 +9,10 @@ getPlatform() {
counts=$(xmlstarlet sel \ counts=$(xmlstarlet sel \
-T -t \ -T -t \
-v 'count(/WIM/IMAGE/WINDOWS/ARCH[text()="0"])' -o '|' \ -v 'count(/WIM/IMAGE/WINDOWS/ARCH[normalize-space(.)="0"])' -o '|' \
-v 'count(/WIM/IMAGE/WINDOWS/ARCH[text()="9"])' -o '|' \ -v 'count(/WIM/IMAGE/WINDOWS/ARCH[normalize-space(.)="9"])' -o '|' \
-v 'count(/WIM/IMAGE/WINDOWS/ARCH[text()="12"])' \ -v 'count(/WIM/IMAGE/WINDOWS/ARCH[normalize-space(.)="12"])' \
- 2>/dev/null <<< "$xml") || counts="0|0|0" - 2>/dev/null <<< "$xml") || return 1
IFS='|' read -r x86 x64 arm64 <<< "$counts" IFS='|' read -r x86 x64 arm64 <<< "$counts"
@@ -166,19 +166,25 @@ getVersions() {
records=$(xmlstarlet sel \ records=$(xmlstarlet sel \
-T -t \ -T -t \
-m '/WIM/IMAGE' \ -m '/WIM/IMAGE' \
-v '@INDEX' -o "$separator" \ -v 'normalize-space(@INDEX)' -o "$separator" \
-v 'DISPLAYNAME' -o "$separator" \ -v 'normalize-space(DISPLAYNAME)' -o "$separator" \
-v 'WINDOWS/PRODUCTNAME' -o "$separator" \ -v 'normalize-space(WINDOWS/PRODUCTNAME)' -o "$separator" \
-v 'NAME' -o "$separator" \ -v 'normalize-space(NAME)' -o "$separator" \
-v 'WINDOWS/EDITIONID' -o "$separator" \ -v 'normalize-space(WINDOWS/EDITIONID)' -o "$separator" \
-v 'WINDOWS/INSTALLATIONTYPE' -o "$separator" \ -v 'normalize-space(WINDOWS/INSTALLATIONTYPE)' -o "$separator" \
-v 'FLAGS' -n \ -v 'normalize-space(FLAGS)' -n \
- 2>/dev/null <<< "$xml") || return 0 - 2>/dev/null <<< "$xml") || return 1
while IFS="$separator" read -r \ while IFS="$separator" read -r \
image_index display product image edition_id install_type flags; do image_index display product image edition_id install_type flags; do
[ -n "$image_index" ] || continue [ -n "$image_index" ] || continue
if [[ ! "$image_index" =~ ^[1-9][0-9]*$ ]]; then
warn "Invalid image index in WIM metadata: '$image_index'"
continue
fi
local candidate_id="" local candidate_id=""
local candidate_base="" local candidate_base=""
@@ -461,18 +467,30 @@ detectLanguage() {
local xml="$1" local xml="$1"
local index="${2:-}" local index="${2:-}"
local xpath lang culture local image='/WIM/IMAGE'
local lang culture path
local -a paths=()
if [[ "$index" =~ ^[0-9]+$ ]]; then if [[ "$index" =~ ^[1-9][0-9]*$ ]]; then
xpath="string((/WIM/IMAGE[@INDEX='$index']/WINDOWS/LANGUAGES/DEFAULT | /WIM/IMAGE[@INDEX='$index']/WINDOWS/LANGUAGES/FALLBACK/DEFAULT)[1])" image="/WIM/IMAGE[@INDEX='$index']"
else
xpath='string((/WIM/IMAGE/WINDOWS/LANGUAGES/DEFAULT | /WIM/IMAGE/WINDOWS/LANGUAGES/FALLBACK/DEFAULT)[1])'
fi fi
lang=$(xmlstarlet sel \ paths=(
-T -t \ "$image/WINDOWS/LANGUAGES/DEFAULT[1]"
-v "$xpath" \ "$image/WINDOWS/LANGUAGES/FALLBACK/DEFAULT[1]"
- 2>/dev/null <<< "$xml") || lang="" "$image/WINDOWS/LANGUAGES/LANGUAGE[1]"
)
lang=""
for path in "${paths[@]}"; do
lang=$(xmlstarlet sel \
-T -t \
-v "normalize-space(string(($path)[1]))" \
- 2>/dev/null <<< "$xml") || lang=""
[ -n "$lang" ] && break
done
if [ -z "$lang" ]; then if [ -z "$lang" ]; then
warn "Language could not be detected from ISO!" warn "Language could not be detected from ISO!"
@@ -1134,8 +1152,8 @@ readIsoImageInfo() {
metadata=$(xmlstarlet sel \ metadata=$(xmlstarlet sel \
-T -t \ -T -t \
-v 'name(/*)' -o "$separator" \ -v 'local-name(/*)' -o "$separator" \
-v 'count(/WIM/IMAGE)' \ -v 'count(/*[local-name()="WIM"]/*[local-name()="IMAGE"])' \
- 2>/dev/null <<< "$result") || return 1 - 2>/dev/null <<< "$result") || return 1
IFS="$separator" read -r root xml_count <<< "$metadata" IFS="$separator" read -r root xml_count <<< "$metadata"