#!/bin/bash

if [[ $# < 1 ]]; then
	FULL_KERNEL_VERSION="common13-5.15"
else
	FULL_KERNEL_VERSION=$1
fi
KERNEL_DIR=${KERNEL_DIR:-common}
COMMON_DRIVERS_DIR=${COMMON_DRIVERS_DIR:-common_drivers}
T=$(pwd)
ROOT_DIR=${ROOT_DIR:-${T}}
PATCHES_PATH=${ROOT_DIR}/$(dirname $0)/${FULL_KERNEL_VERSION}

if [[ ! -d ${PATCHES_PATH} ]]; then
	echo "None patch to am, ${PATCHES_PATH}/${FULL_KERNEL_VERSION}/patches does not exist!!!"
	exit
fi

# echo KERNEL_DIR=$KERNEL_DIR COMMON_DRIVERS_DIR=$COMMON_DRIVERS_DIR ROOT_DIR=$ROOT_DIR PATCHES_PATH=$PATCHES_PATH

function am_patch()
{
	local patch=$1
	local dir=$2
	local change_id=`grep 'Change-Id' $patch | head -n1 | awk '{print $2}'`

	# echo $patch $dir
	if [ -d "$dir" ]; then
		cd $dir;
		git log -n 400 | grep $change_id 1>/dev/null 2>&1;
		if [ $? -ne 0 ]; then
			# echo "###patch ${patch##*/}###      "
			git am -q $patch 1>/dev/null 2>&1;
			if [ $? != 0 ]; then
				git am --abort
				cd $ROOT_DIR
				echo "Patch Error : Failed to patch [$patch], Need check it. exit!!!"
				exit -1
			fi
			echo -n .
		fi
		cd $ROOT_DIR
	fi
}

function auto_patch()
{
	local patch_dir=$1
	#echo patch_dir=$patch_dir

	for file in `find ${patch_dir} -name "*.patch" | sort`; do
		local file_name=${file%.*};           #echo file_name $file_name
		local resFile=`basename $file_name`;  #echo resFile $resFile
		local dir_name1=${resFile//#/\/};     #echo dir_name $dir_name
		local dir_name=${dir_name1%/*};       #echo dir_name $dir_name
		local dir=$T/$dir_name;               #echo $dir

		am_patch $file $dir
	done
}

function traverse_patch_dir()
{
	# git am common and common_driver patches
	echo "Auto Patch Start"
	for file in `ls ${PATCHES_PATH}/common`; do
		# echo file=$file
		if [ -d ${PATCHES_PATH}/common/${file} ]; then
			for patch in `find ${PATCHES_PATH}/common/${file} -name "*.patch" | sort`; do
				am_patch ${patch} ${KERNEL_DIR}
			done
		fi
	done

	if [[ -d ${PATCHES_PATH}/common_drivers ]]; then
		for patch in `find ${PATCHES_PATH}/common_drivers -name "*.patch" | sort`; do
			am_patch ${patch} ${KERNEL_DIR}/${COMMON_DRIVERS_DIR}
		done
	fi

	for file in `ls ${PATCHES_PATH}`; do
		[[ "${file}" == "common" || "${file}" == "common_drivers" ]] && continue

		if [ -d ${PATCHES_PATH}/${file} ]; then
			local dest_dir=${PATCHES_PATH}/${file}
			auto_patch ${dest_dir}
		fi
	done

	echo
	echo "Patch Finish: ${ROOT_DIR}"
}

traverse_patch_dir
