69 lines
1.4 KiB
Bash
Executable file
69 lines
1.4 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
startdir="$PWD"
|
|
|
|
if [ ! -f APKBUILD ]; then
|
|
error "please run this in a package directory"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$1" == "" ]; then
|
|
echo "usage: apatch <patch name>"
|
|
exit 1
|
|
fi
|
|
|
|
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
|
|
)
|