diff options
Diffstat (limited to 'update-kernel-config')
-rwxr-xr-x | update-kernel-config | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/update-kernel-config b/update-kernel-config new file mode 100755 index 0000000..37e414c --- /dev/null +++ b/update-kernel-config @@ -0,0 +1,72 @@ +#!/bin/bash + +if [ $# -ne 2 ]; then + >&2 echo 'usage: update-kernel-config [repository] [kernel-name]' + exit 2 +fi + +old_revision=$( + sed -n ' + s/^# upstream git\( revision\)\?: *// + T + p + ' "/usr/src/archlinux32/packages/$1/$2/PKGBUILD" +) + +if [ -z "${old_revision}" ]; then + >&2 echo 'Cannot detemine old upstream git revision.' + >&2 echo '"# upstream git revision: ..." line is missing.' + exit 1 +fi + +diff=$( + git -C "/usr/src/archlinux/packages/$2/repos/$1-x86_64" diff "${old_revision}" HEAD -- config | \ + grep '^[+-].' | \ + grep -v '^+++\|^---' +) + +if [ -z "${diff}" ]; then + >&2 echo 'nothing changed.' + exit 1 +fi + +{ + grep -vxF "$( + printf '%s\n' "${diff}" | \ + sed -n ' + s/^-// + T + p + ' + )" "/usr/src/archlinux32/packages/$1/$2/config" + printf '%s\n' "${diff}" | \ + sed -n ' + s/^+// + T + p + ' +} | \ + sponge "/usr/src/archlinux32/packages/$1/$2/config" + +sed -i ' + 1 s/^#.*$/# upstream git revision: '"$( + git -C "/usr/src/archlinux/packages" rev-parse HEAD + )"'/ + s/'"$( + git -C "/usr/src/archlinux/packages/$2/repos/$1-x86_64" archive "${old_revision}" -- config | \ + tar -Ox | \ + sha256sum | \ + awk '{print $1}' + )"'/'"$( + git -C "/usr/src/archlinux/packages/$2/repos/$1-x86_64" archive HEAD -- config | \ + tar -Ox | \ + sha256sum | \ + awk '{print $1}' + )"'/g + s/'"$( + git -C "/usr/src/archlinux32/packages/$1/$2" archive HEAD -- config | \ + tar -Ox | \ + sha256sum | \ + awk '{print $1}' + )"'/SKIP/g +' "/usr/src/archlinux32/packages/$1/$2/PKGBUILD" |