47 lines
1.0 KiB
Bash
Executable File
47 lines
1.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
PATCHDIR="${ROOT}/patches"
|
|
|
|
usage() {
|
|
cat <<USAGE
|
|
Usage: $0
|
|
Applies patches/*.patch to the working tree (idempotent).
|
|
USAGE
|
|
}
|
|
|
|
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
|
|
usage
|
|
exit 0
|
|
fi
|
|
|
|
cd "$ROOT"
|
|
|
|
if [[ ! -d "$PATCHDIR" ]]; then
|
|
echo "ERROR: patches/ directory not found at: $PATCHDIR" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Apply patches only if they are not already applied.
|
|
# We use --dry-run to test applicability; if it fails, we assume it's already applied.
|
|
shopt -s nullglob
|
|
patches=( "$PATCHDIR"/000[1-4]-*.patch )
|
|
#patches=( "$PATCHDIR"/*.patch )
|
|
if (( ${#patches[@]} == 0 )); then
|
|
echo "ERROR: no patches found in $PATCHDIR" >&2
|
|
exit 1
|
|
fi
|
|
|
|
for p in "${patches[@]}"; do
|
|
echo "==> Checking $p"
|
|
if patch --dry-run -p1 < "$p" >/dev/null 2>&1; then
|
|
echo "==> Applying $(basename "$p")"
|
|
patch -p1 < "$p"
|
|
else
|
|
echo "==> Skipping $(basename "$p") (already applied or does not apply cleanly)"
|
|
fi
|
|
done
|
|
|
|
echo "Done."
|