apatch/apatch

63 lines
1.4 KiB
Bash
Executable file

#!/bin/sh
startdir="$PWD"
[ -f APKBUILD ] || ( echo "please run this in a package directory"; exit 1 )
[ "$1" != "" ] || ( echo "usage: apatch <patch name>"; exit 1 )
set -e
abuild clean fetch unpack default_prepare
# obtain builddir
startdir="$PWD"
srcdir="$startdir/src"
. APKBUILD
test -n "$builddir" || builddir="$srcdir/$pkgname-$pkgver"
patchpath="$startdir/$1"
for patch in $source; do
if [ "$patch" = "$1" ]; then
# if the patch was in source, it was already applied in prepare() above,
# but we want the original src to not have it, so we can get a full diff of
# its original changes + our new ones
(
cd "$builddir"
patch -R -p1 < "$patchpath"
)
break
fi
done
(
cd "$builddir"
git init
git add .
git commit -m "$pkgver" >/dev/null
# if file exists, try to apply
if [ -e "$patchpath" ]; then
git apply --reject --whitespace=fix "$patchpath" || {
git status --porcelain | grep '\?\? .*\.rej$' | cut -c4- | while read -r reject; do
target="${reject%.rej}"
echo "[*] trying to wiggle $target"
wiggle --merge --replace "$target" "$reject" || {
echo "[!] could not merge $target, fix manually"
}
rm "$reject"
rm "$target.porig" # left by wiggle
done
}
fi
$SHELL
git add .
git diff --cached > "$patchpath"
if [ ! -s "$patchpath" ]; then
echo "[*] patch is empty, removing"
rm "$patchpath"
fi
)