From fc0294326db1a1f41eafb16735878fad521af044 Mon Sep 17 00:00:00 2001 From: linsui <2873532-linsui@users.noreply.gitlab.com> Date: Tue, 10 Sep 2024 19:56:29 +0800 Subject: [PATCH] tools: add keep-latest script --- tools/keep-latest.sh | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100755 tools/keep-latest.sh diff --git a/tools/keep-latest.sh b/tools/keep-latest.sh new file mode 100755 index 0000000000..bd6d1b7e8b --- /dev/null +++ b/tools/keep-latest.sh @@ -0,0 +1,31 @@ +#! /usr/bin/env bash + +set -e + +last_commit=$(git log --grep='Update known apks' | grep commit | head -n 1 | sed -E -n 's/commit (.*)/\1/p') +changed_files=$(git diff --name-only "$last_commit" HEAD) + +for file in $changed_files; do + if [[ $file == *.yml && $(dirname "$file") == "metadata" ]]; then + diff=$(git diff "$last_commit" HEAD -- "$file") + removed_versions=$(grep "\- versionCode: " <<< "$diff" | sed -E -n "s/.*versionCode: ([0-9]+)/\1/p") + new_versions=$(grep "+ versionCode: " <<< "$diff" | sed -E -n "s/.*versionCode: ([0-9]+)/\1/p") + # When an old version is removed the diff may have both deletion and addition for the same version + for version in $removed_versions; do + new_versions=$(sed "/$version/d" <<< "$new_versions") + done + new_version_num=$(wc -l <<< "$new_versions") + + keep_num=$(sed -z -E -n 's/.*VercodeOperation:\n(( -[^\n]*\n)+).*/\1/p' "$file" | wc -l) + [[ $keep_num == 0 ]] && keep_num=1 + + if [[ $new_version_num -gt $keep_num ]]; then + remove_versions=$(head -n -"$keep_num" <<< "$new_versions") + echo "Cleaning $file $remove_versions" + for version in $remove_versions; do + sed -i "/versionCode: $version/,/^$/d" "$file" + sed -i -E -z 's/\n - versionName:[^\n]+\n -/\n -/' "$file" + done + fi + fi +done