X-Git-Url: http://gitweb.hugovil.com/?a=blobdiff_plain;f=scripts%2Fkernel-send-patches.sh;h=6231ac8f224a86e2df60983f292c30243d3f7b3d;hb=95d0e56b5a71fa660bc56639572bdfe1ebf5bba8;hp=9b6f2c5083c5e1c019f78610f1da3b4fe4b46ec2;hpb=cac4021d533f4078f61ae085553633026f439c18;p=hvutilities.git diff --git a/scripts/kernel-send-patches.sh b/scripts/kernel-send-patches.sh index 9b6f2c5..6231ac8 100755 --- a/scripts/kernel-send-patches.sh +++ b/scripts/kernel-send-patches.sh @@ -44,6 +44,7 @@ TO_CMD="`pwd`/scripts/get_maintainer.pl --nogit --nogit-fallback --norolestats - CC_CMD="`pwd`/scripts/get_maintainer.pl --nogit --nogit-fallback --norolestats --non --nom" # Set default values +debug="0" commit_start="" commit_end="" DRY_RUN="--dry-run" @@ -53,6 +54,10 @@ compile_cmd="make" compile_script=/tmp/kernel-compile-script.sh cover="no" series="" +resend="no" +GIT_FORMAT_PATCH_SUBJECT="PATCH" +skip_compile=0 +CHECKPATCH_OPS="--strict" print_usage() { @@ -60,16 +65,22 @@ print_usage() echo "Usage: ${PROG_NAME} [OPTIONS...]" echo echo "Options:" + echo " -d debug mode" echo " -e end commit (string)" echo " -f folder containing patch infos" echo " -h display this help and exit" + echo " -n dot not compile patches" + echo " -p resend patch" echo " -r really send emails (default = dry-run)" echo " -s start commit (string)" echo } -while getopts "e:f:hrs:" flag ;do +while getopts "de:f:hnprs:" flag ;do case ${flag} in + d) + debug="1" + ;; e) commit_end="${OPTARG}" ;; @@ -80,6 +91,12 @@ while getopts "e:f:hrs:" flag ;do print_usage exit 0 ;; + n) + skip_compile=1 + ;; + p) + resend="yes" + ;; r) DRY_RUN="" ;; @@ -156,9 +173,11 @@ if [ x"${base_branch}" = x"" ]; then exit 1 fi -if [ x"${compile_branch}" = x"" ]; then - echo "Missing compile_branch shell variable" - exit 1 +if [ ${skip_compile} -eq 0 ]; then + if [ x"${compile_branch}" = x"" ]; then + echo "Missing compile_branch shell variable" + exit 1 + fi fi if [ x"${base_commit}" = x"" ]; then @@ -171,6 +190,16 @@ find_commit_by_log() echo $(git log --oneline HEAD~100..HEAD | grep "${1}" | awk {'print $1'}) } +# Find SHA1 of preceding commit: +# First arg: commit message +find_preceding_commit_by_log() +{ + local sha1_end + + sha1_end="$(find_commit_by_log "${1}")" + echo $(git log --oneline ${sha1_end}~2..${sha1_end}~1 | awk {'print $1'}) +} + # Remove "Name" if present in email address. Needed because of a bug in # get_maintainer.pl even if we specify the "--non" option. # Arg #1: "Name " or "email" @@ -232,6 +261,11 @@ if [ x"${COMMIT_END_SHA1}" = x"" ]; then exit 1 fi +if echo "${commit_end}" | grep -q "^end"; then + # Take commit just before end commit: + COMMIT_END_SHA1=$(find_preceding_commit_by_log "${commit_end}") +fi + rm -rf ${srcdir}/*.patch # If the cover letter is not between start and end commits, save a copy: @@ -254,6 +288,11 @@ if git branch | grep -q ${patches_branch}; then git branch -D ${patches_branch} fi +if [ "${debug}" = "1" ]; then + echo "start commit: ${COMMIT_START_SHA1}" + echo "end commit: ${COMMIT_END_SHA1}" +fi + # Create new branch from base_branch, and apply all our patches onto it: git checkout -b ${patches_branch} ${base_branch} git branch --set-upstream-to ${base_branch} @@ -271,7 +310,12 @@ if [ x"${series}" != x"" -a x"${series}" != x"1" ]; then GIT_FORMAT_PATCH_OPTS="${GIT_FORMAT_PATCH_OPTS} -v ${series}" fi -git format-patch ${GIT_FORMAT_PATCH_OPTS} --output-directory=${srcdir} ${base_branch} +if [ x"${resend}" = x"yes" ]; then + GIT_FORMAT_PATCH_SUBJECT="RESEND ${GIT_FORMAT_PATCH_SUBJECT}" +fi + +git format-patch --subject-prefix="${GIT_FORMAT_PATCH_SUBJECT}" \ + ${GIT_FORMAT_PATCH_OPTS} --output-directory=${srcdir} ${base_branch} if [ x"${cover}" = x"yes" ]; then # Replace subject line in cover letter: @@ -301,7 +345,8 @@ for p in ${srcdir}/*.patch; do fi done -cat > ${compile_script} << "EOF" +if [ ${skip_compile} -eq 0 ]; then + cat > ${compile_script} << "EOF" #!/bin/bash # Do not edit, auto-generated script echo @@ -310,34 +355,37 @@ echo "Testing commit: $(git log --oneline | head -n 1)" COMPILE_CMD EOF -if [ x"${init_cmd}" != x"" ]; then - sed -i -e "s@.*INIT_CMD@${init_cmd}@" ${compile_script} -fi -sed -i -e "s@COMPILE_CMD@${compile_cmd}@" ${compile_script} -chmod u+x ${compile_script} + if [ x"${init_cmd}" != x"" ]; then + sed -i -e "s@.*INIT_CMD@${init_cmd}@" ${compile_script} + fi + sed -i -e "s@COMPILE_CMD@${compile_cmd}@" ${compile_script} + chmod u+x ${compile_script} -# Create temporary branch for compilation, based on compile_branch: -temp_compile_branch="${patches_branch}_compile" + # Create temporary branch for compilation, based on compile_branch: + temp_compile_branch="${patches_branch}_compile" -if git branch | grep -q ${temp_compile_branch}; then - git branch -D ${temp_compile_branch} -fi + if git branch | grep -q ${temp_compile_branch}; then + git branch -D ${temp_compile_branch} + fi -git checkout -b ${temp_compile_branch} ${compile_branch} + git checkout -b ${temp_compile_branch} ${compile_branch} -# Make sure temp_compile_branch is rebased on base_branch: -git rebase ${base_branch} + # Make sure temp_compile_branch is rebased on base_branch: + git rebase ${base_branch} -# Apply all of our commits to temp_compile_branch: -git cherry-pick ${COMMIT_START_SHA1}..${COMMIT_END_SHA1} + # Apply all of our commits to temp_compile_branch: + git cherry-pick ${COMMIT_START_SHA1}..${COMMIT_END_SHA1} -# Compile and test each commit: -git rebase --exec=${compile_script} ${compile_branch} + # Compile and test each commit: + git rebase --exec=${compile_script} ${compile_branch} +fi git checkout ${orig_branch} -# Remove temporary branch: -git branch -D ${temp_compile_branch} +if [ ${skip_compile} -eq 0 ]; then + # Remove temporary branch: + git branch -D ${temp_compile_branch} +fi # Send email(s) git send-email ${DRY_RUN} --annotate --thread --no-chain-reply-to \