#!/bin/bash set -e set -u shopt -qu globstar shopt -qs expand_aliases export LC_COLLATE=C export LC_ALL=C diff_ops="-O.git.diff.order --patience -l0" format_patch_ops="--zero-commit --no-signature --no-numbered --stat=80 --summary $diff_ops" 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= --repo= --branch=" echo OPTIONS: "--amend --commit --nocommit --bumpspec --nobumpspec" exit "$retcode" } on_error() { exec 1>&2 echo "An error occurred. Exiting..." git reset --hard exit 1 } trap 'on_error' ERR # Check if the working directory is clean (no changes) if ! git diff-index --quiet HEAD --; then echo "Working directory is not clean, cannot rebase." 1>&2 exit 1 fi gitrepo="" branch="" releasever="" amend="" commit=1 bumpspec=1 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 ;; --branch=*) branch=${1##--branch=} ;; --branch) shift branch=$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 ;; *) echo "Unknown parameter $1" ;; esac shift done # check must params if [ -z "$releasever" ] || [ -z "$gitrepo" ] || [ -z "$branch" ]; then usage fi if [ ! -d "$PWD/.rhboot.git" ]; then othergit init othergit config core.abbrev 11 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 unset LC_ALL git rm -q 0*.patch fedpkg --release "$releasever" sources > grub.patches patches=$(formatpatch refs/remotes/rhboot/master..refs/remotes/rhboot/"${branch}") 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 --release "$releasever" commit -s -c else git commit --amend fi fi