diff --git a/scripts/patch-tool b/scripts/patch-tool
index 4757f8e923edf0a9fd8ca575b0e5c3379215231a..3ef49e301dafa187eefe1441a69f4b20dbc15a83 100755
--- a/scripts/patch-tool
+++ b/scripts/patch-tool
@@ -39,12 +39,24 @@ add_pkg_dirs() {
patch_pkg() {
local pkg=$(basename $1 .patch)
+ local pkg_dir=packages/$pkg
local patch=$patches_dir/$pkg.patch
- if [ ! -e "$patch" ]; then
- echo "No patches for $pkg; skipping patching." return
- else
- local pkg_dir=packages/$pkg
+ local cabal=$patches_dir/$pkg.cabal
+
+ local patched=
+ if [ -f "$patch" ]; then
+ echo "Applied patch $patch to $pkg"
git -C $pkg_dir apply $patch
+ patched=1
+ fi
+
+ if [ -f "$cabal" ]; then
+ echo "Updated cabal file of $pkg with $cabal"
+ cp "$cabal" $pkg_dir/*.cabal
+ patched=1
+ fi
+
+ if [ -n "$patched" ]; then
git -C $pkg_dir commit -q -a -m "head.hackage.org patch"
fi
}