grub2/do-rebase
Javier Martinez Canillas 655e9ec04f Allow do-rebase to pull the patches from different repositories
Currently the script always pull the patches from rhboot Github repo, but
for testing and developing purposes may be useful to use a different one.

Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
2018-05-14 15:23:31 -04:00

150 lines
2.9 KiB
Bash
Executable File

#!/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 \$gitrepo
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=""
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"
;;
*)
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
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