tool/keep-latest.sh: only remove exist versions

This commit is contained in:
linsui 2025-05-25 16:59:03 +08:00
parent fb2555051e
commit d6ae748e35

View file

@ -24,13 +24,14 @@ for file in $changed_files; do
keep_num=$(sed -z -E -n 's/.*VercodeOperation:\n(( -[^\n]*\n)+).*/\1/p' "$file" | wc -l)
[[ $keep_num == 0 ]] && keep_num=1
removed_versions=$(grep "\- versionCode: " <<< "$diff" | sed -E -n "s/.*versionCode: ([0-9]+)/\1/p" | jq --slurp '.')
new_versions=$(grep "+ versionCode: " <<< "$diff" | sed -E -n "s/.*versionCode: ([0-9]+)/\1/p" | jq --slurp '.')
missing_versions=$(jq -r ".\"$appid\" // []" <<< "$missing_builds")
failed_versions=$(jq -r "map(select(.[0] == \"$appid\") | .[1])" <<< "$failed_builds")
success_versions=$(jq -r "map(select(.[0] == \"$appid\") | .[1])" <<< "$success_builds")
all_versions=$(sed -E -n "s/.*versionCode: ([0-9]+)/\1/p" $file | jq --slurp '.')
remove_versions=$(jq --slurp -r ".[0] + .[2] + .[3] - .[1] - .[4] | sort | unique | .[:-$keep_num][]" <(printf "$new_versions") <(printf "$removed_versions") <(printf "$missing_versions") <(printf "$failed_versions") <(printf "$success_versions"))
remove_versions=$(jq --slurp -r ".[4] - (.[4] - (.[0] + .[1] + .[2] - .[3])) | sort | unique | .[:-$keep_num][]" \
<(printf "$new_versions") <(printf "$missing_versions") <(printf "$failed_versions") <(printf "$success_versions") <(printf "$all_versions"))
if [[ -n $remove_versions ]]; then
echo "Cleaning $appid: ${remove_versions//$'\n'/ }"