#!/bin/bash set -eu if [ $# -lt 1 ] ; then STR="$(cat)" else echo "No options yet!" exit 1 fi # 1. Collect URL of the incoming repo URL="$(echo "$STR" | sed -n -e '/^are available in the Git repository at:/,+2 { s/[[:space:]]\+// s/\(=[[:digit:]]\{2\}\)\+$// /^\(http\|git\)/p }')" # mapfile -t -c 1 -C 'cb() { [[ "$2" =~ (git|http|ssh):// ]] && printf "%s\n" "$2"; }; cb' URLS <<<"$STR" # echo "$URLS[@]" # 2. Check it is in our remotes mapfile REMOTES < <(git remote -v|awk '{print $1,$2;}') REMOTE='' for rem in "${REMOTES[@]}" ; do if [[ ${rem} =~ $URL ]] ; then REMOTE="$(echo "${rem}" | awk -F ' ' '{print $1;}' )" break fi done # 4. Create new branch BEG="$(echo "$STR" | awk '/^The following changes since commit / { print $NF }' | sed -e 's/[=:]*$//')" END="$(echo "$STR" | awk '/^for you to fetch changes up to / { print $NF }' | sed -e 's/[=:]*$//')" # 5. Fetch the remote if [[ -n "$REMOTE" ]] ; then git fetch $REMOTE $END else git fetch $URL $END fi git checkout -b _4review FETCH_HEAD