| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | #!/usr/bin/env bash## Patch sources using git-am, aligning things to use git-format-patch for# update-patches.## (c) 2016 Phil Sutter <phil@nwl.cc>## Based on the classic patch.sh, written by:## (c) 2006, 2007 Thorsten Glaser <tg@freewrt.org># (c) 2002 Erik Andersen <andersen@codepoet.org>[[ -n $BASH_VERSION ]] && shopt -s extglob# Set directories from arguments, or use defaults.targetdir=${1-.}patchdir=${2-../patches}patchpattern=${3-*}if [ ! -d "${targetdir}" ] ; then    echo "Aborting.  '${targetdir}' is not a directory."    exit 1fiif [ ! -d "${patchdir}" ] ; then    echo "Aborting.  '${patchdir}' is not a directory."    exit 0fiwd=$(pwd)cd "${targetdir}"if [ ! -d .git ]; then    # drop leftover .gitignores in non-git sources, they    # might prevent us from patching 'temporary' files    # which are still present in the tarball.    find . -name .gitignore -delete    git init    git add .    git commit -a --allow-empty \	    --author="OpenADK <wbx@openadk.org>" \	    -m "OpenADK patch marker: 0000"fi[ -e .git/rebase-apply ] && \	git am --aborti=1patch_tmp=$(printf ".git/patch_tmp/%04d" $i)while [ -d $patch_tmp ]; do	let "i++"	patch_tmp=$(printf ".git/patch_tmp/%04d" $i)donemkdir -p $patch_tmppatch_series=$(printf "%04d" $i)cd $wdcd $patchdirfor i in $(eval echo ${patchpattern}); do    test -e "$i" || continue    i=$patchdir/$i    cd $wd    case $i in	*.gz)	type="gzip"; uncomp="gunzip -dc"; ;;	*.bz)	type="bzip"; uncomp="bunzip -dc"; ;;	*.bz2)	type="bzip2"; uncomp="bunzip2 -dc"; ;;	*.zip)	type="zip"; uncomp="unzip -d"; ;;	*.Z)	type="compress"; uncomp="uncompress -c"; ;;	*)	type="plaintext"; uncomp="cat"; ;;    esac    [ -d "${i}" ] && echo "Ignoring subdirectory ${i}" && continue    echo "$(basename $i)" >>${targetdir}/${patch_tmp}/__patchfiles__    fake_hdr=""    patchname="$(basename -s .gz -s .bz -s .bz2 -s .zip -s .Z -s .patch $i)"    if ! grep -q '^Subject: ' ${i}; then	fake_hdr="From: OpenADK <wbx@openadk.org>\nSubject: [PATCH] ${patchname#[0-9]*-}\n\n"    fi    { echo -en $fake_hdr; ${uncomp} ${i}; } >${targetdir}/${patch_tmp}/${patchname}.patch    cd $patchdirdone# no patches to apply? bail out[ -e ${targetdir}/${patch_tmp}/__patchfiles__ ] || {	rmdir ${targetdir}/${patch_tmp}	exit 0}# provide backwards compatibility to old style using 'patch' program# XXX: this is unsafe and should be dropped at some pointam_opts="-C1"realpath $patchdir >${targetdir}/${patch_tmp}/__patchdir__cd ${targetdir}git am $am_opts ${patch_tmp}/*.patchif [ $? != 0 ] ; then    echo "git-am failed! Please fix patches!"    exit 1figit commit -a --allow-empty \	--author="OpenADK <wbx@openadk.org>" \	-m "OpenADK patch marker: $patch_series"
 |