#!/bin/bash set -e set -u shopt -qu globstar shopt -qs expand_aliases export LC_COLLATE=C export LC_ALL=C format_patch_ops="--stat=80 --summary -O.git.diff.order --patience -l0" alias othergit="GIT_DIR=$PWD/.rhboot.git GIT_WORK_TREE=$PWD git" alias formatpatch="othergit format-patch $format_patch_ops" usage() { retcode=0 if [ -n "${1:-}" ]; then exec 1>&2 retcode=$1 fi echo usage: do-rebase \$releasever exit $retcode } if ! git status | grep -q 'nothing to commit, working .* clean' ; then echo "Working directory is not clean, cannot rebase." 1>&2 exit 1 fi releasever="" amend="" declare -a savedargs savedargs=() while [ $# -gt 0 ]; do case $1 in --help|-h|--usage|-?|-u) usage ;; --dist=*) releasever=${1##--dist=} ;; --dist) shift releasever=$1 ;; --amend) amend="--amend" ;; *) savedargs[${#savedargs[@]}]="$1" ;; esac shift done set -- "${savedargs[@]}" if [ -z "${releasever}" -a $# -gt 0 ]; then releasever=$1 shift else dist=$(git status | grep "On branch" | cut -d\ -f3-) if [ -z "$dist" ]; then echo "Could not figure out distro release version" 1>&2 usage 1 fi case "$(eval echo \${dist})" in .fc*) releasever=$(echo ${dist} | \ sed 's/^\.fc\([[:digit:]]\+\)$/fedora-\1/') ;; .*) releasever=$(echo $dist | \ sed 's/^\.\([[:alpha:]]\+\)\([[:digit:]]\+\)$/\1-\2/') ;; rhel*) releasever=${dist} dist=.el${releasever##rhel-} ;; esac if [ -z "${releasever}" -o "${releasever}" = "${dist}" ]; then echo "Could not figure out distro release version" 1>&2 usage 1 fi fi if [ -z "$releasever" ]; then echo "Could not figure out distro release version" 1>&2 usage 1 fi if [ $# -ge 1 ]; then echo "Unknown argument \"$1\"" 1>&2 usage 1 fi if [ ! -d $PWD/.rhboot.git ]; then othergit init if ! othergit remote add \ rhboot git@github.com:rhboot/grub2.git \ >/dev/null 2>&1 ; then echo "Could not add remote: rhboot" 1>&2 exit 1 fi elif othergit remote show -n rhboot | grep -q "URL: github$" ; then if ! othergit remote add \ rhboot git@github.com:rhboot/grub2.git \ >/dev/null 2>&1 ; then echo "Could not add remote: rhboot" 1>&2 exit 1 fi fi othergit fetch rhboot remote=$(othergit branch --list -r "rhboot/${releasever}" 2>/dev/null) if [ "${remote}" != " rhboot/${releasever}" ]; then echo branch \"${releasever}\" does not appear to exist 1>&2 exit 1 fi unset LC_ALL git rm -q 0*.patch > grub.patches patches=$(formatpatch grub-2.02..refs/remotes/rhboot/${releasever}) for x in $patches ; do echo Patch$(echo ${x} | cut -d- -f1): ${x} >> grub.patches done if [ -z "$amend" ]; then rpmdev-bumpspec -c "- Rebased to newer upstream for ${releasever}" grub2.spec fi git add 0*.patch grub2.spec grub.patches if [ -z "$amend" ]; then fedpkg commit -s -c $amend else git commit --amend fi