poky/scripts/send-pull-request
Richard Purdie ffae400179 meta/lib+scripts: Convert to SPDX license headers
This adds SPDX license headers in place of the wide assortment of things
currently in our script headers. We default to GPL-2.0-only except for the
oeqa code where it was clearly submitted and marked as MIT on the most part
or some scripts which had the "or later" GPL versioning.

The patch also drops other obsolete bits of file headers where they were
encoountered such as editor modelines, obsolete maintainer information or
the phrase "All rights reserved" which is now obsolete and not required in
copyright headers (in this case its actually confusing for licensing as all
rights were not reserved).

More work is needed for OE-Core but this takes care of the bulk of the scripts
and meta/lib directories.

The top level LICENSE files are tweaked to match the new structure and the
SPDX naming.

(From OE-Core rev: f8c9c511b5f1b7dbd45b77f345cb6c048ae6763e)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2019-05-09 16:31:55 +01:00

4.1 KiB
Executable File

#!/bin/bash

Copyright (c) 2010-2011, Intel Corporation.

SPDX-License-Identifier: GPL-2.0-or-later

This script is intended to be used to send a patch series prepared by the

create-pull-request script to Open Embedded and The Yocto Project, as well

as to related projects and layers.

AUTO=0 AUTO_CL=0 GITSOBCC="--suppress-cc=all"

Prevent environment leakage to these vars.

unset TO unset CC unset AUTO_CC unset EXTRA_CC

usage() { cat <<EOM Usage: $(basename $0) [-h] [-a] [-c] [[-t email]...] -p pull-dir -a Send the cover letter to every recipient listed in Cc and Signed-off-by lines found in the cover letter and the patches. This option implies -c. -c Expand the Cc list for the individual patches using the Cc and Signed-off-by lines from the same patch. -C Add extra CC to each email sent. -p pull-dir Directory containing summary and patch files -t email Explicitly add email to the recipients EOM }

Collect addresses from a patch into AUTO_CC

$1: a patch file

harvest_recipients() { PATCH=$1 export IFS=$',\n' for REGX in "^[Cc][Cc]: *" "^[Ss]igned-[Oo]ff-[Bb]y: *"; do for EMAIL in $(sed '/^---$/q' $PATCH | grep -e "$REGX" | sed "s/$REGX//"); do if [ "${AUTO_CC/$EMAIL/}" == "$AUTO_CC" ] && [ -n "$EMAIL" ]; then if [ -z "$AUTO_CC" ]; then AUTO_CC=$EMAIL; else AUTO_CC="$AUTO_CC,$EMAIL"; fi fi done done unset IFS }

Parse and verify arguments

while getopts "acC:hp:t:" OPT; do case $OPT in a) AUTO=1 GITSOBCC="--signed-off-by-cc" AUTO_CL=1 ;; c) AUTO=1 GITSOBCC="--signed-off-by-cc" ;; C) EXTRA_CC="$OPTARG" ;; h) usage exit 0 ;; p) PDIR=${OPTARG%/} if [ ! -d $PDIR ]; then echo "ERROR: pull-dir "$PDIR" does not exist." usage exit 1 fi ;; t) if [ -n "$TO" ]; then TO="$TO,$OPTARG" else TO="$OPTARG" fi ;; esac done

if [ -z "$PDIR" ]; then echo "ERROR: you must specify a pull-dir." usage exit 1 fi

Verify the cover letter is complete and free of tokens

if [ -e $PDIR/0000-cover-letter.patch ]; then CL="$PDIR/0000-cover-letter.patch" for TOKEN in SUBJECT BLURB; do grep -q "*** $TOKEN HERE " "$CL" if [ $? -eq 0 ]; then echo "ERROR: Please edit $CL and try again (Look for ' $TOKEN HERE ***')." exit 1 fi done else echo "WARNING: No cover letter will be sent." fi

Harvest emails from the generated patches and populate AUTO_CC.

if [ $AUTO_CL -eq 1 ]; then for PATCH in $PDIR/*.patch; do harvest_recipients $PATCH done fi

AUTO_TO="$(git config sendemail.to)" if [ -n "$AUTO_TO" ]; then if [ -n "$TO" ]; then TO="$TO,$AUTO_TO" else TO="$AUTO_TO" fi fi

if [ -z "$TO" ] && [ -z "$AUTO_CC" ]; then echo "ERROR: you have not specified any recipients." usage exit 1 fi

Convert the collected addresses into git-send-email argument strings

export IFS=$',' GIT_TO=$(for R in $TO; do echo -n "--to='$R' "; done) GIT_CC=$(for R in $AUTO_CC; do echo -n "--cc='$R' "; done) GIT_EXTRA_CC=$(for R in $EXTRA_CC; do echo -n "--cc='$R' "; done) unset IFS

Handoff to git-send-email. It will perform the send confirmation.

Mail threading was already handled by git-format-patch in

create-pull-request, so we must not allow git-send-email to

add In-Reply-To and References headers again.

PATCHES=$(echo $PDIR/*.patch) if [ $AUTO_CL -eq 1 ]; then # Send the cover letter to every recipient, both specified as well as # harvested. Then remove it from the patches list. # --no-thread is redundant here (only sending a single message) and # merely added for the sake of consistency. eval "git send-email $GIT_TO $GIT_CC $GIT_EXTRA_CC --confirm=always --no-thread --suppress-cc=all $CL" if [ $? -eq 1 ]; then echo "ERROR: failed to send cover-letter with automatic recipients." exit 1 fi PATCHES=${PATCHES/"$CL"/} fi

Send the patch to the specified recipients and, if -c was specified, those git

finds in this specific patch.

eval "git send-email $GIT_TO $GIT_EXTRA_CC --confirm=always --no-thread $GITSOBCC $PATCHES" if [ $? -eq 1 ]; then echo "ERROR: failed to send patches." exit 1 fi