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