diff options
Diffstat (limited to 'scripts/apatch.sh')
-rwxr-xr-x | scripts/apatch.sh | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/scripts/apatch.sh b/scripts/apatch.sh new file mode 100755 index 0000000000..f56771d9ef --- /dev/null +++ b/scripts/apatch.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env bash + +gitcmd="git -c commit.gpgsign=false" + +noapply=1 +isreject=0 +if [[ $1 == "--noapplied" ]]; then + noapply=1 + shift +fi + +if [ ! -z "$1" ]; then + file="$1" +elif [ -z "$1" ] && [ -f .git/rebase-apply/patch ]; then + file=".git/rebase-apply/patch" + noapply=1 + isreject=1 +else + echo "Please specify a file" + exit 1 +fi +applied=$(echo $file | sed 's/.patch$/-applied\.patch/g') +if [ "$1" == "--reset" ]; then + $gitcmd am --abort + $gitcmd reset --hard + $gitcmd clean -f + exit 0 +fi + + +(test "$isreject" != "1" && $gitcmd am -3 $file) || ( + echo "Failures - Wiggling" + $gitcmd reset --hard + $gitcmd clean -f + errors=$($gitcmd apply --rej $file 2>&1) + echo "$errors" >> ~/patch.log + export missingfiles="" + export summaryfail="" + export summarygood="" + for i in $(find . -name \*.rej); do + base=$(echo "$i" | sed 's/.rej//g') + if [ -f "$i" ]; then + sed -e 's/^diff a\/\(.*\) b\/\(.*\)[[:space:]].*rejected.*$/--- \1\n+++ \2/' -i $i && wiggle -v -l --replace "$base" "$i" + rm "$base.porig" "$i" + else + echo "No such file: $base" + missingfiles="$missingfiles\n$base" + fi + done + for i in $($gitcmd status --porcelain | awk '{print $2}'); do + filedata=$(cat "$i") + if [ -f "$file" ] && [[ "$filedata" == *"<<<<<"* ]]; then + export summaryfail="$summaryfail\nFAILED TO APPLY: $i" + else + $gitcmd add --force "$i" + export summarygood="$summarygood\nAPPLIED CLEAN: $i" + fi + done + echo -e "$summarygood" + echo -e "$summaryfail" + if [[ "$errors" == *"No such file"* ]]; then + echo "==========================="; + echo " " + echo " MISSING FILES" + echo $(echo "$errors" | grep "No such file") + echo -e "$missingfiles" + echo " " + echo "==========================="; + fi + $gitcmd status + $gitcmd diff +) +if [[ "$noapply" != "1" ]] && [[ "$file" != *-applied.patch ]]; then + mv "$file" "$applied" +fi |