#!/bin/bash check_fixes() { local TAG=$(echo $1 | sed -e 's/^[ ]*//' | sed 's/^[F,f]ixes://') local HASH=$(echo $TAG | awk '{print $1}') git log -1 --format='%s' $HASH &> /dev/null if [ $? -ne 0 ]; then echo "Patch $HASH" echo "$TAG" echo "...does not exist" exit 1 fi local BROKEN_SUB=$(git log -1 --format='%s' $HASH) local SUB=$(echo $TAG | awk 'gsub($1, "")'| \ sed -e 's/^[ ]*//' | \ sed -e 's/^(//' | \ sed -e 's/)$//' |\ sed -e 's/^"//' | \ sed -e 's/"$//') if [ "$SUB" != "$BROKEN_SUB" ]; then echo "Broken patch does not match Fixes tag:" echo "PATCH: $HASH" else echo "Strings match" fi } check_patch() { local PATCH=$1 local COMMIT_MSG=$(git log -1 $PATCH) local HAS_FIXES=`echo "$COMMIT_MSG" |grep -i fixes:` if [ -n "$HAS_FIXES" ]; then check_fixes "$HAS_FIXES" fi } LAST=$1 PATCHES=$(for i in `git log --oneline --no-merges $LAST.. | awk '{print $1}'`; do echo $i; done) for i in $PATCHES; do check_patch $i done