java-topology/test/jdk/tools/jpackage/clean_stashed_files.sh
russell@unturf.com 0a580b313d undefect. CWE-407 — 63 sites patched across 27 ecosystems
Authors: russell@unturf.com · brackishbert@gmail.com · foxhop.net · TimeHexOn.com

Patches, unit tests, benchmarks, whitepaper, and outreach briefs.
Public domain — no copyright claimed. Use freely.
2026-03-26 17:11:57 -04:00

203 lines
5.7 KiB
Bash

#!/bin/bash
# Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#
# Filters output produced by running jpackage with "jpackage.test.stash-root=<PATH>" property.
#
set -e
set -o pipefail
declare -a stash_dirs
if [ $# -eq 0 ]; then
stash_dirs=(${0%/*})
else
stash_dirs=($@)
fi
sed_inplace_option=-i
sed_version_string=$(sed --version 2>&1 | head -1 || true)
if [ "${sed_version_string#sed (GNU sed)}" != "$sed_version_string" ]; then
# GNU sed, the default
:
elif [ "${sed_version_string#sed: illegal option}" != "$sed_version_string" ]; then
# Macos sed
sed_inplace_option="-i ''"
else
echo 'WARNING: Unknown sed variant, assume it is GNU compatible'
fi
winActions='
'
winMsiActions='
winMsiRmDotPackage
winMsiFilterAppImageListing
winMsiFilterUiWxf
winMsiFilterBundleWxf
'
winAllActions="${winActions} ${winMsiActions}"
macActions='
macFormatInfoPlist
macFormatEntitlements
'
macPkgActions='
macPkgFormatCplPlist
'
macDmgActions='
macDmgFilterScpt
'
macAllActions="${macActions} ${macDmgActions} ${macPkgActions}"
linuxActions=
linuxRpmActions=
linuxDebActions=
linuxAllActions="${linuxActions} ${linuxRpmActions} ${linuxDebActions}"
actions='
rmPostImageScript
sortAppImageListing
derandomizeServiceTestCfgFiles
'
allActions="${actions} ${winAllActions} ${macAllActions} ${linuxAllActions}"
rmPostImageScript() {
# Remove post-image scripts
find "$stash_dir" '(' -name '*-post-image.sh' -o -name '*-post-image.wsf' ')' -type f -exec rm -f {} \;
}
sortAppImageListing() {
# Sort app image listings
find "$stash_dir" -name 'app-image-listing.txt' -type f -exec sort -o {} {} \;
}
derandomizeServiceTestCfgFiles() {
# Convert variable part of 'java-options=-Djpackage.test.appOutput=/tmp/AddLServiceTest-0000019a5a3fac9c-launcher-as-service.txt'
# in '*.cfg' files of the ServiceTest test.
find "$stash_dir" -path '*/ServiceTest/*.cfg' -type f | xargs -I {} sed $sed_inplace_option \
-e 's|ServiceTest-[[:xdigit:]]\{1,\}-\([^ ]*\.txt\)|ServiceTest-<SEED>-\1|g' \
'{}'
}
#
# MAC:
#
macFormatInfoPlist() {
# Info.plist
# - Format
find "$stash_dir" -name 'Info.plist' -type f -exec xmllint --output '{}' --format '{}' \;
}
macFormatEntitlements() {
# *.entitlements
# - Format
find "$stash_dir" -name '*.entitlements' -type f -exec xmllint --output '{}' --format '{}' \;
}
#
# DMG:
#
macDmgFilterScpt() {
# *.scpt
# - Trim random absolute temp path
# - Replace "/dmg-workdir/" (new) with "/images/" (old)
find "$stash_dir" -name '*.scpt' -type f | xargs -I {} sed $sed_inplace_option \
-e 's|/jdk\.jpackage[0-9]\{1,\}/|/jdk.jpackage/|' \
-e 's|/dmg-workdir/|/images/|' \
'{}'
}
#
# PKG:
#
macPkgFormatCplPlist() {
# cpl.plist:
# - Format and strip <!DOCTYPE ...> (old)
find "$stash_dir" -name 'cpl.plist' -type f -exec xmllint --output '{}' --dropdtd --format '{}' \;
}
#
# WIN:
#
#
# MSI:
#
winMsiRmDotPackage() {
# .package
# - Strip it. Old jpackage created this file in the app image.
# New jpackage creates it in the "config" directory.
# Value is verified in tests, can ignore it here.
find "$stash_dir" -name '.package' -type f -exec rm -f {} \;
}
winMsiFilterAppImageListing() {
# app-image-listing.txt:
# - Remove "app\.jpackage.xml" and "app\.package" entries. The new jpackage doesn't create them in the app image
find "$stash_dir" -path '*msi/*/app-image-listing.txt' -type f | xargs -I {} sed $sed_inplace_option \
-e '/^app\\\.package[\r]\{0,\}$/d' \
-e '/^app\\\.jpackage\.xml[\r]\{0,\}$/d' \
'{}'
}
winMsiFilterUiWxf() {
# ui.wxf:
# - Order of namespaces is undefined, strip them for simplicity
find "$stash_dir" -name 'ui.wxf' -type f | xargs -I {} sed $sed_inplace_option \
-e 's|^<Wix[^>]*>|<Wix>|' \
'{}'
}
winMsiFilterBundleWxf() {
# bundle.wxf:
# - Order of namespaces is undefined, strip them for simplicity (same as with ui.wxf)
# - Trim paths down to file names in "Source" attributes.
# They all are different because the new jpackage doesn't copy app images.
# - Order of files and directories is undefined, sort xml.
# It turns the file into garbage, but all that matters is that the
# old and the new jpackage variants should produce the same "garbage"
find "$stash_dir" -name 'bundle.wxf' -type f | xargs -I {} sed $sed_inplace_option \
-e 's|^<Wix[^>]*>|<Wix>|' \
-e 's|Source=".*\\\([^\\]\{1,\}\)"|Source="\1"|' \
-e 's|Source="\\jdk.jpackage\\images\\win-msi.image\\.*\\app\\\.package"|Source="\\jdk.jpackage\\config\\\.package"|' \
'{}'
find "$stash_dir" -name 'bundle.wxf' -type f -exec sort -o {} {} \;
}
for stash_dir in "${stash_dirs[@]}"; do
printf "In %s:\n" "$stash_dir"
for a in ${allActions}; do
echo " $a..."
$a
done
done