1#!/bin/bash -u 2set -x 3 4usage() 5{ 6 echo -e "Usage: $0 <mysql version tag (e.g. mysql-5.1.42)> <local branch dir>" 7} 8 9if [ $# -lt 2 ] 10then 11 usage 12 exit -1 13fi 14 15#set -x 16set -e 17 18OS=$(uname -s) 19function MD5SUM() 20{ 21 if [ "$OS" == "Darwin" -o "$OS" == "FreeBSD" ]; then 22 md5 -q $1 23 else 24 md5sum $1 | awk '{ print $1 }' 25 fi 26} 27 28# Source paths are either absolute or relative to script, get absolute 29THIS_DIR=$(pwd -P) 30 31cd $2 32WSREP_REV=$(git log --pretty=oneline | wc -l) || \ 33WSREP_REV=$(bzr revno --tree -q) || \ 34WSREP_REV="XXXX" 35WSREP_REV=${WSREP_REV//[[:space:]]/} 36WSREP_PATCH_SPEC=$1-$WSREP_REV 37 38# Check existing file 39# This is done to not to depend on LP operation, however it looks like 40# any changes uncommitted locally might go unnoticed as revno stays the same 41WSREP_PATCH_FILE=$(ls $THIS_DIR/${WSREP_PATCH_SPEC}_*_.diff 2>/dev/null || : ) 42if [ -r "$WSREP_PATCH_FILE" ] 43then 44 WSREP_PATCH_MD5SAVE=$(basename $WSREP_PATCH_FILE | awk -F _ '{ print $2 }' ) 45 WSREP_PATCH_MD5TEST=$(MD5SUM $WSREP_PATCH_FILE | awk '{ print $1 }') 46 if [ $WSREP_PATCH_MD5SAVE = $WSREP_PATCH_MD5TEST ] 47 then 48# to be safe we better regenerate the patch every time 49 echo $WSREP_PATCH_FILE > /dev/null 50# exit 0 51 fi 52fi 53 54# Existing file either not found or corrupted, try to create a new one 55 56rm -f $WSREP_PATCH_FILE 57 58#MYSQL_BRANCH="lp:mysql-server/5.1" 59#MYSQL_LP_REV=$( bzr tags -d $MYSQL_BRANCH | grep -m1 "$1" | awk '{ print $2 }' ) 60#if [ -z "$MYSQL_LP_REV" ] 61#then 62# echo "No such tag/revision: $1" 63# exit -1 64#fi 65 66WSREP_PATCH_TMP="$THIS_DIR/$WSREP_PATCH_SPEC.diff" 67git diff $1..HEAD > $WSREP_PATCH_TMP || \ 68bzr diff -p1 -v --diff-options " --exclude=.bzrignore " \ 69 -r tag:$1..branch:$2 \ 70 > "$WSREP_PATCH_TMP" || if [ $? -gt 1 ]; then exit -1; fi 71# normally we expect bzr diff return 1 (changes available) 72WSREP_PATCH_MD5SUM=$(MD5SUM $WSREP_PATCH_TMP | awk '{ print $1 }') 73WSREP_PATCH_FILE=$THIS_DIR/${WSREP_PATCH_SPEC}_${WSREP_PATCH_MD5SUM}_.diff 74mv $WSREP_PATCH_TMP $WSREP_PATCH_FILE 75 76echo $WSREP_PATCH_FILE 77 78