Files
alire-index-community/scripts/diff-release.sh
T
Alejandro R Mosteo 6c8626208a New workflow to display incremental changes in manifests (#473)
* New diffing script between consecutive releases

* New workflow to get diffs

* Testing fixes
2022-03-09 16:29:19 +01:00

77 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
trap 'echo "ERROR at line ${LINENO} (code: $?)" >&2' ERR
trap 'echo "Interrupted" >&2 ; exit 1' INT
set -o errexit
set -o nounset
# Ensure all alr runs are non-interactive
alias alr="alr -n"
# Detect changes
CHANGES=$(git diff --name-only HEAD~1)
# Bulk changes for the record
echo Changed files: $CHANGES
# Disable assistant. This is necessary despite the setup-alire action doing it
# too, because we sometimes run inside a Docker with fresh configuration
alr toolchain --disable-assistant
# Configure index
alr index --del local >/dev/null || true # Simplifies local testing
alr index --name local --add ./index
# Remove community index in case it has been added before
alr index --del community >/dev/null || true
diff_opts=(--minimal -U0 --line-prefix "--| " --ignore-all-space --ignore-blank-lines --ignore-cr-at-eol)
function diff_one() {
local file="$1"
local folder=$(dirname $file)
local crate=$(basename $file .toml | cut -f1 -d-)
local version=$(basename $file .toml | cut -f2- -d-)
local milestone="$crate=$version"
echo " "
echo "------8<------"
if echo $milestone | grep -q external; then
echo DIFFING external: $milestone
git diff "${diff_opts[@]}" HEAD~1 -- $file
else
echo DIFFING release: $milestone
# Locate the immediately precedent release
# For a first release, there's nothing to compare
if [ $(ls $folder | grep -v external | wc -l) -eq 1 ]; then
echo NOTHING to diff against, first crate release
return 0
fi
# Othewise, get from alr what's the immediately preceding version
local prev_milestone=$(alr show "$crate<$version" | head -1 | cut -f1 -d:)
echo DIFFING milestones $prev_milestone '-->' $milestone
if [ "$prev_milestone" == "ERROR" ]; then
echo ERROR extracting milestone:
alr show "$crate<$version"
return 1
fi
# Convert into filename
local prev_file=$folder/${prev_milestone//=/-}.toml
git diff --no-index "${diff_opts[@]}" -- $prev_file $file
fi
return 0
}
for file in $CHANGES; do
diff_one "$file" || true # keep on trying for different files
done