59 lines
1.7 KiB
Text
59 lines
1.7 KiB
Text
|
#!/usr/bin/env sh
|
||
|
|
||
|
COMMIT_MSG_FILE="$1"
|
||
|
COMMIT_SOURCE="$2"
|
||
|
|
||
|
pkgfileloc="$(git rev-parse --show-toplevel)/_bootstrap/packages.txt"
|
||
|
pkgignoreloc="$(git rev-parse --show-toplevel)/_bootstrap/packages_ignore.txt"
|
||
|
listgen="yay"
|
||
|
|
||
|
err() {
|
||
|
printf "\x1b[33mCAUTION:\x1b[0m %s\n" "$*"
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
if [ ! -f "$pkgfileloc" ]; then
|
||
|
err "File not found - $pkgfileloc, can not determine package differences!"
|
||
|
fi
|
||
|
|
||
|
if ! type "$listgen" >/dev/null 2>&1; then
|
||
|
err "Yay not installed on machine, can not reliably determine package differences!"
|
||
|
fi
|
||
|
|
||
|
# get commited packages, remove empty lines
|
||
|
# and lines beginning with # to allow comments
|
||
|
pkgcommited=$(mktemp)
|
||
|
sed -e '/^[#$]/d' <"$pkgfileloc" | sort >"$pkgcommited"
|
||
|
|
||
|
# get packages on this machine
|
||
|
# q removes extraneous info
|
||
|
# e only lists explicitly installed
|
||
|
# tt removes those that are depended on, but NOT those optionally depended on
|
||
|
pkgcurrent=$(yay -Qqett | sort)
|
||
|
# remove those listed in package_ignore.txt
|
||
|
if [ -f "$pkgignoreloc" ]; then
|
||
|
pkgcurrent=$(echo "$pkgcurrent" | comm -23 - "$pkgignoreloc")
|
||
|
fi
|
||
|
|
||
|
# compare the lists, list differences
|
||
|
result=$(echo "$pkgcurrent" | comm -3 - "$pkgcommited")
|
||
|
|
||
|
# get files only in repo (field1), and only on machine (field2)
|
||
|
added=$(echo "$result" | cut -f1 | sed -e '/^$/d')
|
||
|
removed=$(echo "$result" | cut -s -f2)
|
||
|
|
||
|
# if we have no changes, do nothing
|
||
|
if [ -n "$added" ] || [ -n "$removed" ]; then
|
||
|
text=$(printf "\-- PACKAGE DIFFERENCES TO COMMITED LIST FOUND --\nPackages NOT YET in repo:\n%s\n\nPackages ONLY in repo:%s\n" "$added" "$removed" | sed 's/^/# /gm')
|
||
|
else
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
# prepend package changes to message
|
||
|
case $COMMIT_SOURCE in
|
||
|
"" | message, | template,)
|
||
|
msg=$(echo "$text" | cat - "$COMMIT_MSG_FILE")
|
||
|
printf "%s" "$msg" >"$COMMIT_MSG_FILE"
|
||
|
;;
|
||
|
esac
|