poky/scripts/create-pull-request
Darren Hart 5ad2ebadfb create-pull-request: rewrite known private URLs to public URLs
Rather than requiring users to have public remotes and private remotes when
their development remotes are ssh based (and therefor unsuitable for a pull
request URL), rewrite the ones we know about from ssh://git@ to git://.

As the remote url vary from remote to remote, do the REMOTE_REPO regex per
remote.

With this infrastructure in place, future patches can augment the list of
known remotes for things like Git Hub, Gitorious, kernel.org, etc.

(From OE-Core rev: 3c34975414f1184a35ad8b6ca8a5303786f3475f)

Signed-off-by: Darren Hart <dvhart@linux.intel.com>
Acked-by: Joshua Lock <josh@linux.intel.com>
Acked-by: Otavio Salvador <otavio@ossystems.com.br>
Acked-by: Tom Rini <tom_rini@mentor.com>
Cc: Tom Rini <tom_rini@mentor.com>
Cc: Martin Jansa <martin.jansa@gmail.com>
Cc: Otavio Salvador <otavio@ossystems.com.br>
Cc: Richard Purdie <richard.purdie@linuxfoundation.org>
Cc: Joshua Lock <josh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-05-19 23:40:37 +01:00

4.3 KiB
Executable File

#!/bin/bash ODIR=pull-$$ RELATIVE_TO="master" COMMIT_ID="HEAD" PREFIX="PATCH"

usage() { CMD=$(basename $0) cat <<EOM Usage: $CMD [-h] [-o output_dir] [-m msg_body_file] [-s subject] [-r relative_to] [-i commit_id] -u remote -b branch -b branch Branch name in the specified remote -h Display this help message -i commit_id Ending commit (default: HEAD) -m msg_body_file The file containing a blurb to be inserted into the summary email -o output_dir Specify the output directory for the messages (default: pull-PID) -p prefix Use [prefix N/M] instead of [PATCH N/M] as the subject prefix -r relative_to Starting commit (default: master) -s subject The subject to be inserted into the summary email -u remote The git remote where the branch is located

Examples: $CMD -u contrib -b nitin/basic $CMD -u contrib -r distro/master -i nitin/distro -b nitin/distro $CMD -u contrib -r master -i misc -b nitin/misc -o pull-misc $CMD -u contrib -p "RFC PATCH" -b nitin/experimental EOM }

Parse and validate arguments

while getopts "b:hi:mp:r:s:u:" OPT; do case $OPT in b) BRANCH="$OPTARG" ;; h) usage exit 0 ;; i) COMMIT_ID="$OPTARG" ;; m) BODY="$OPTARG" if [ ! -e "$BODY" ]; then echo "ERROR: Body file does not exist" exit 1 fi ;; o) ODIR="$OPTARG" ;; p) PREFIX="$OPTARG" ;; r) RELATIVE_TO="$OPTARG" ;; s) SUBJECT="$OPTARG" ;; u) REMOTE="$OPTARG" REMOTE_URL=$(git config remote.$REMOTE.url) if [ $? -ne 0 ]; then echo "ERROR: git config failed to find a url for '$REMOTE'" exit 1 fi

	# Rewrite known private URLs to public URLs
	# Determine the repository name for use in the WEB_URL later
	case "$REMOTE_URL" in
	ssh://git@git.pokylinux.org*)
		REMOTE_REPO=$(echo $REMOTE_URL | sed "s#.*/\(.*\)#\1#")
		REMOTE_URL=${REMOTE_URL/'ssh://git@'/'git://'}
		;;
	ssh://git@git.yoctoproject.org*)
		REMOTE_REPO=$(echo $REMOTE_URL | sed "s#.*/\(.*\)#\1#")
		REMOTE_URL=${REMOTE_URL/"ssh://git@"/"git://"}
		;;
	esac
	# The .git suffix is optional in the URL, drop in for the REPO
	REMOTE_REPO=${REMOTE_REPO%.git}
	;;
esac

done

if [ -z "$BRANCH" ] || [ -z "$REMOTE_URL" ]; then usage exit 1 fi

Set WEB_URL from known remotes

case "$REMOTE_URL" in git.yoctoproject.org) WEB_URL="http://git.yoctoproject.org/cgit.cgi/$REMOTE_REPO/log/?h=$BRANCH" ;; git.pokylinux.org) WEB_URL="http://git.pokylinux.org/cgit.cgi/$REMOTE_REPO/log/?h=$BRANCH" ;; esac

Perform a sanity test on the web URL. Issue a warning if it is not

accessible, but do not abort as users may want to run offline.

if [ -n "$WEB_URL" ]; then wget -q $WEB_URL -O /dev/null if [ $? -ne 0 ]; then echo "WARNING: Branch '$BRANCH' was not found on the contrib git tree." echo " Please check your remote and branch parameter before sending." echo "" fi fi

if [ -e $ODIR ]; then echo "ERROR: output directory $ODIR exists." exit 1 fi mkdir $ODIR

Generate the patches and cover letter

git format-patch -M --subject-prefix="$PREFIX" -n -o $ODIR --thread=shallow --cover-letter $RELATIVE_TO..$COMMIT_ID > /dev/null

Customize the cover letter

CL="$ODIR/0000-cover-letter.patch" PM="$ODIR/pull-msg" git request-pull $RELATIVE_TO $REMOTE_URL $COMMIT_ID > "$PM" if [ $? -ne 0 ]; then echo "ERROR: git request-pull reported an error" exit 1 fi

The cover letter already has a diffstat, remove it from the pull-msg

before inserting it.

sed -n "0,#$REMOTE_URL# p" "$PM" | sed -i "/BLURB HERE/ r /dev/stdin" "$CL" rm "$PM"

Insert the WEB_URL if there is one

if [ -n "$WEB_URL" ]; then echo " $WEB_URL" | sed -i "#$REMOTE_URL# r /dev/stdin" "$CL" fi

If the user specified a message body, insert it into the cover letter and

remove the BLURB token.

if [ -n "$BODY" ]; then sed -i "/BLURB HERE/ r $BODY" "$CL" sed -i "/BLURB HERE/ d" "$CL" fi

If the user specified a subject, replace the SUBJECT token with it.

if [ -n "$SUBJECT" ]; then sed -i -e "s/*** SUBJECT HERE ***/$SUBJECT/" "$CL" fi

Generate report for user

cat <<EOM The following patches have been prepared: $(for PATCH in $(ls $ODIR/*); do echo " $PATCH"; done)

Review their content, especially the summary mail: $CL

When you are satisfied, you can send them with: send-pull-request -a -p $ODIR EOM