68 lines
1.7 KiB
Bash
Executable File
68 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# https://stackoverflow.com/a/30520299
|
|
# Checks if stdout is not being redirected, and if not, colorizes the output.
|
|
if [[ -t 1 || -p /dev/stdout ]]; then
|
|
# ANSI colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
TC='\033[0m' # Terminal color
|
|
fi
|
|
|
|
function calc_perc {
|
|
# Calculate the percentage up to 2 decimal places and leading 0 when the
|
|
# percentage only has the decimal part. Only print percentages >= 0.01%.
|
|
bc <<EOF
|
|
scale=2;
|
|
define abs2(x) { if (x < 0) return -x; return x }
|
|
ratio=$1/$2;
|
|
if (ratio >= 0.01) {
|
|
if (ratio < 0) {
|
|
print "-"
|
|
} else {
|
|
print "+"
|
|
}
|
|
if (abs2(ratio) < 1) {
|
|
print "0"
|
|
}
|
|
print abs2(ratio)
|
|
print "% "
|
|
}
|
|
EOF
|
|
}
|
|
|
|
if [ -z "$BASE_PKG_VERSION" ]; then
|
|
BASE_PKG_VERSION="$(npm version --json | python3 -c 'import json; import sys; print(json.loads(sys.stdin.read()).get("jschardet"))')"
|
|
fi
|
|
BASE_PKG_VERSION_HASH="$(git rev-list -n 1 v$BASE_PKG_VERSION)"
|
|
|
|
echo "Bundle size changes since v$BASE_PKG_VERSION:"
|
|
eval "git diff-index "$BASE_PKG_VERSION_HASH" $@" | {
|
|
# vars: B=before / A=after
|
|
# mode: A=added / D=deleted
|
|
while read maskB maskA hashB zero mode path; do
|
|
if [ $mode = "A" ]; then
|
|
sizeB=0;
|
|
else
|
|
sizeB=$(git cat-file -s $hashB)
|
|
fi
|
|
if [ $mode = "D" ]; then
|
|
sizeA=0
|
|
else
|
|
# warning: -s is bsd only
|
|
eval $(stat -s "$path")
|
|
sizeA=$st_size
|
|
fi
|
|
size_diff=$(( $sizeA - $sizeB ))
|
|
if [ $size_diff -gt 0 ]; then
|
|
size_diff_signal="+"
|
|
size_diff_color=$RED
|
|
else
|
|
size_diff_color=$GREEN
|
|
fi
|
|
|
|
perc=$(calc_perc $size_diff $sizeB)
|
|
echo -e "* $path $size_diff_color$size_diff_signal$size_diff $perc$TC($sizeB -> $sizeA)"
|
|
done
|
|
}
|