#!/bin/bash set -e set -u shopt -qu globstar shopt -qs expand_aliases export LC_COLLATE=C export LC_ALL=C format_patch_ops="--zero-commit --no-signature --no-numbered --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 [OPTIONS] [--dist RELEASEVER | RELEASEVER ] [GITREPO]" echo OPTIONS: --dist=RELEASEVER --repo=REPO --amend --nocommit --nobumpspec 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 gitrepo="git@github.com:rhboot/grub2.git" releasever="" amend="" commit=1 bumpspec=1 declare -a savedargs savedargs=() while [ $# -gt 0 ]; do case $1 in --help|-h|--usage|-?|-u) usage ;; --dist=*) releasever=${1##--dist=} ;; --dist) shift releasever=$1 ;; --repo=*) gitrepo=${1##--repo=} ;; --repo) shift gitrepo=$1 ;; --amend) amend="--amend" ;; --commit) commit=1 ;; --nocommit|--no-commit|--nc) # --nocommit implies nobumpspec, but --bumpspec after it will # force bumpspec to get run. commit=0 bumpspec=0 ;; --bumpspec) bumpspec=2 ;; --nobumpspec|--no-bumpspec|--nb) bumpspec=0 ;; *) 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 [ -n "${1:-}" ]; then gitrepo=$1 shift 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 $gitrepo \ >/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 $gitrepo \ >/dev/null 2>&1 ; then echo "Could not add remote: rhboot" 1>&2 exit 1 fi else othergit remote set-url rhboot ${gitrepo} 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 > release-to-master.patch othergit diff --full-index --binary grub-2.02..refs/remotes/rhboot/master > release-to-master.patch git add release-to-master.patch > grub.patches patches=$(formatpatch refs/remotes/rhboot/master..refs/remotes/rhboot/${releasever}) for x in $patches ; do echo Patch$(echo ${x} | cut -d- -f1): ${x} >> grub.patches done if [[ -z "$amend" && ${bumpspec} -gt 0 ]] || [[ ${bumpspec} -ge 2 ]] ; then rpmdev-bumpspec -c "- Rebased to newer upstream for ${releasever}" grub2.spec fi git add 0*.patch grub2.spec grub.patches if [[ ${commit} -eq 1 ]] ; then if [ -z "$amend" ]; then fedpkg commit -s -c else git commit --amend fi fi