52f24b7
#!/bin/bash
52f24b7
set -e
52f24b7
shopt -qu globstar
52f24b7
export LC_COLLATE=C
52f24b7
export LC_ALL=C
52f24b7
52f24b7
usage()
52f24b7
{
52f24b7
	retcode=0
52f24b7
	if [ -n "$1" ]; then
52f24b7
		exec 1>&2
52f24b7
		retcode=$1
52f24b7
	fi
52f24b7
	echo usage: do-rebase \$releasever
52f24b7
	exit $retcode
52f24b7
}
52f24b7
fd72ae9
if ! git status | grep -q 'nothing to commit, working .* clean' ; then
52f24b7
	echo "Working directory is not clean, cannot rebase." 1>&2
52f24b7
	exit 1
52f24b7
fi
52f24b7
52f24b7
releasever=""
1713515
amend=""
52f24b7
52f24b7
declare -a savedargs
52f24b7
while [ $# -gt 0 ]; do
52f24b7
	case $1 in
52f24b7
	--help|-h|--usage|-?|-u)
52f24b7
		usage
52f24b7
		;;
52f24b7
	--dist=*)
52f24b7
		releasever=${1##--dist=}
52f24b7
		;;
52f24b7
	--dist)
52f24b7
		shift
52f24b7
		releasever=$1
52f24b7
		;;
1713515
	--amend)
1713515
		amend="--amend"
1713515
		;;
52f24b7
	*)
52f24b7
		savedargs[${#savedargs[@]}]="$1"
52f24b7
		;;
52f24b7
	esac
52f24b7
	shift
52f24b7
done
52f24b7
set -- "${savedargs[@]}"
52f24b7
52f24b7
if [ -z "${releasever}" -a $# -gt 0 ]; then
52f24b7
	releasever=$1
52f24b7
	shift
52f24b7
else
52f24b7
	dist=$(git status | grep "On branch" | cut -d\  -f3-)
52f24b7
	if [ -z "$dist" ]; then
52f24b7
		echo "Could not figure out distro release version" 1>&2
52f24b7
		usage 1
52f24b7
	fi
52f24b7
	case "$(eval echo \${dist})" in
52f24b7
	.fc*)
52f24b7
		releasever=$(echo ${dist} | \
52f24b7
			sed 's/^\.fc\([[:digit:]]\+\)$/fedora-\1/')
52f24b7
		;;
52f24b7
	.*)
52f24b7
		releasever=$(echo $dist | \
52f24b7
			sed 's/^\.\([[:alpha:]]\+\)\([[:digit:]]\+\)$/\1-\2/')
52f24b7
		;;
52f24b7
	esac
52f24b7
	if [ -z "${releasever}" -o "${releasever}" = "${dist}" ]; then
52f24b7
		echo "Could not figure out distro release version" 1>&2
52f24b7
		usage 1
52f24b7
	fi
52f24b7
fi
52f24b7
52f24b7
if [ -z "$releasever" ]; then
52f24b7
	echo "Could not figure out distro release version" 1>&2
52f24b7
	usage 1
52f24b7
fi
52f24b7
52f24b7
if [ $# -ge 1 ]; then
52f24b7
	echo "Unknown argument \"$1\"" 1>&2
52f24b7
	usage 1
52f24b7
fi
52f24b7
52f24b7
if ! git remote show -n github >/dev/null 2>&1 ; then
52f24b7
	git remote add \
52f24b7
		github git@github.com:vathpela/grub2-fedora.git >/dev/null 2>&1
52f24b7
	echo "Could not add remote: github" 1>&2
52f24b7
	exit 1
52f24b7
fi
52f24b7
52f24b7
git fetch github
52f24b7
remote=$(git branch --list -r "github/${releasever}" 2>/dev/null)
52f24b7
if [ "${remote}" != "  github/${releasever}" ]; then
52f24b7
	echo branch \"${releasever}\" does not appear to exist 1>&2
52f24b7
	exit 1
52f24b7
fi
52f24b7
52f24b7
unset LC_ALL
52f24b7
git rm -q 0*.patch
52f24b7
(cat <
52f24b7
From: Peter Jones <pjones@redhat.com>
52f24b7
Date:  Wed Jul 22 10:18:00 2015 -0400
52f24b7
Subject: Stop trying to "git format-patch" across a merge that confuses it
52f24b7
52f24b7
EOF
b9efc54
git diff --full-index --binary refs/tags/grub-2.02-beta3..refs/remotes/github/master
b9efc54
) > grub-2.02-beta3-to-origin-master.patch
52f24b7
52f24b7
patches=$(git format-patch refs/remotes/github/master..refs/remotes/github/${releasever})
b9efc54
echo Patch0000: grub-2.02-beta3-to-origin-master.patch > grub.patches
52f24b7
for x in $patches ; do
52f24b7
	echo Patch$(echo ${x} | cut -d- -f1): ${x} >> grub.patches
52f24b7
done
1713515
if [ -z "$amend" ];  then
1713515
    rpmdev-bumpspec -c "- Rebased to newer upstream for ${releasever}" grub2.spec
1713515
fi
b9efc54
git add 0*.patch grub2.spec grub-2.02-beta3-to-origin-master.patch grub.patches
1713515
if [ -z "$amend" ]; then
1713515
	fedpkg commit -s -c $amend
1713515
else
1713515
	git commit -m "" --amend
1713515
fi