176 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			3.5 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
 | |
| 
 | |
| 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 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
 | |
| 	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
 | |
| 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
 | |
| 
 | |
| fedpkg sources
 | |
| 
 | |
| > 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
 |