Blob Blame History Raw
#!/bin/bash
# Usage:
#    ./otp-get-patches.sh /path/to/otp OTP_R14B01 fedora-R14B01
#
# Note:
#    We do NOT update erlang.spec or the git index at all.
#    For now, take a look at the patch-list-*.txt files
#    generated in the tmpdir manually copy and adapt them
#    to erlang.spec. Then handle the otp-*.patch files:
#
#        git rm -f otp-00*.patch
#        mv tmp.foobar/otp-00*.patch .
#        git add otp-00*.patch
#
#    We could only automate this if we added the required patch
#    specific spec file conditionals to the commit message somehow,
#    and then had this script transfer the conditionals into erlang.spec.

otp_dir="${1:?'Fatal: otp git repo dir required'}"
otp_upstream="${2:?'Fatal: git ref to upstream release required'}"
otp_fedora="${3:?'Fatal: git ref to branch with fedora patches required'}"

set -e
# set -x

tmpdir="$(mktemp -d --tmpdir="$PWD")"

pushd "$otp_dir"
git format-patch -o "$tmpdir" "${otp_upstream}..${otp_fedora}" > "$tmpdir/patch-list.txt"
popd

test -s "$tmpdir/patch-list.txt"

echo "# start of autogenerated patch tag list" > "$tmpdir/patch-list-tags.txt"
echo "# start of autogenerated prep patch list" > "$tmpdir/patch-list-prep.txt"
n=1
while read patch
do
	otppatch="$(dirname "$patch")/otp-$(basename "$patch")"
	mv -f "$patch" "$otppatch"
	echo "Patch$n: $(basename "$otppatch")" >> "$tmpdir/patch-list-tags.txt"
	base="$(basename "$patch" ".patch" | sed 's/^00[0-9][0-9]-//')"
	backupext=".$(echo -n "$base" | tr -c -s '[:alnum:]' '_')"
	echo "%patch$n -p1 -b ${backupext}" >> "$tmpdir/patch-list-prep.txt"
	n=$(($n + 1))
done < "$tmpdir/patch-list.txt"
echo "# end of autogenerated patch tag list" >> "$tmpdir/patch-list-tags.txt"
echo "# end of autogenerated prep patch list" >> "$tmpdir/patch-list-prep.txt"

echo "Results in tmp dir \`$tmpdir':"
echo
cat "$tmpdir/patch-list-tags.txt"
echo
cat "$tmpdir/patch-list-prep.txt"

echo
echo "Run \`rm -rf \"$(basename "$tmpdir")\"' when you are finished with the files."
# End of file.