1#!/bin/bash
2#
3# NAME:
4#         make-patches.sh - extract a set of linuxized patches from the
5#                           ACPICA git repository
6#
7# SYNOPSIS:
8#         make-patches.sh [-r release] [-u] <old_commit> [new_commit]
9#
10# DESCRIPTION:
11#         Creates the linuxized patch set from old_commit to new_commit in
12#         ACPICA git repository.
13#         Parameters:
14#          old_commit The old commit ID.
15#          new_commit The new commit ID.  If this parameter is not specified,
16#                     the new commit ID is default to HEAD.
17#         Options:
18#          -r release Specify a release ID, it will turn out to be the name of
19#                     the patch files.  If this option is not specified, the
20#                     default name of the patch files will be the current month
21#                     in YYYYmm date format.
22#          -u         Generate upstream commit IDs in the linuxized patches.
23#
24
25RELEASE=`date +%Y%m`
26
27usage()
28{
29	echo "Usage: `basename $0` [-r release] [-u] <old_commit> [new_commit]"
30	echo "Where:"
31	echo "  -r: set release ID, default is $RELEASE in YYYYmm- date format"
32	echo "  -u: generate upstream commit IDs"
33	echo "  old_commit: the old commit id\n";
34	echo "  new_commit: optional, the new commit id, default to HEAD";
35	exit 0
36}
37
38SCRIPT=`(cd \`dirname $0\`; pwd)`
39. $SCRIPT/libacpica.sh
40
41ACPICA_DIR=$CURDIR/patches.acpica.$RELEASE
42LINUX_DIR=$CURDIR/patches.linux.$RELEASE
43NEW_RELEASE="HEAD"
44OLD_RELEASE="HEAD"
45ACPICA_CNT=0
46LINUX_CNT=0
47MAINTAINER="Bob Moore <robert.moore@intel.com>"
48GIT_EXTRACT="$SCRIPT/gen-patch.sh"
49RELEASE="${RELEASE}-"
50
51while getopts "dr:u" opt
52do
53	case $opt in
54	d) DRYRUN="yes";;
55	r) RELEASE=$OPTARG;;
56	u) GIT_EXTRACT="${GIT_EXTRACT} -u -m '${MAINTAINER}'";;
57	?) echo "Invalid argument $opt"
58	   usage;;
59	esac
60done
61shift $(($OPTIND - 1))
62
63if [ -z $1 ]; then
64	echo "old_commit is not specified"
65	usage
66fi
67OLD_RELEASE=$1
68if [ ! -z $2 ]; then
69	NEW_RELEASE=$2
70fi
71
72COMMITS=`git rev-list --reverse $OLD_RELEASE..$NEW_RELEASE`
73
74for c in $COMMITS; do
75	ACPICA_CNT=`expr $ACPICA_CNT + 1`
76done
77
78generate_patch()
79{
80	local cid aid lid
81	local COMMIT SUBJECT
82
83	cid=$1
84	aid=$2
85	lid=$3
86
87	COMMIT=`git log -1 -c $cid --format=%H | cut -c 1-8`
88	SUBJECT=`git log -1 -c $cid --format=%s`
89
90	echo "[make-patches.sh] Generating patch ($aid:$lid:$COMMIT: $SUBJECT)..."
91	(
92		cd $SCRIPT
93
94		if [ "x$DRYRUN" = "xyes" ]; then
95			echo $GIT_EXTRACT -i $lid $COMMIT
96		else
97			eval $GIT_EXTRACT -i $lid $COMMIT
98			echo "[make-patches.sh]  Copying ACPICA patch ($RELEASE$aid.patch)..."
99			mv acpica-$COMMIT.patch $ACPICA_DIR/$RELEASE$aid.patch
100			echo $RELEASE$aid.patch >> $ACPICA_DIR/series
101		fi
102
103
104		if [ -f linux-$COMMIT.patch ]; then
105			if [ "x$DRYRUN" != "xyes" ]; then
106				echo "[make-patches.sh] Copying Linux patch ($RELEASE$lid.patch)..."
107				mv linux-$COMMIT.patch $LINUX_DIR/$RELEASE$lid.patch
108				echo $RELEASE$lid.patch >> $LINUX_DIR/series
109			fi
110		fi
111	)
112}
113
114rm -rf $ACPICA_DIR
115rm -rf $LINUX_DIR
116mkdir -p $ACPICA_DIR
117mkdir -p $LINUX_DIR
118
119ACPICA_IDX=1
120LINUX_IDX=1
121make_acpisrc $SRCDIR force > /dev/null
122
123for c in $COMMITS; do
124	generate_patch $c $ACPICA_IDX $LINUX_IDX
125
126	LINUX_TO=$LINUX_DIR/$RELEASE$LINUX_IDX.patch
127	if [ -f $LINUX_TO ]; then
128		echo "[make-patches.sh] Generated $LINUX_TO."
129		LINUX_IDX=`expr $LINUX_IDX + 1`
130	fi
131
132	ACPICA_IDX=`expr $ACPICA_IDX + 1`
133done
134
135LINUX_CNT=`expr $LINUX_IDX - 1`
136
137echo "[make-patches.sh] Generated $ACPICA_CNT raw patches and $LINUX_CNT linuxized patches."
138