321d4e2
#! /bin/sh
321d4e2
# This script was created in a effort to make patch management a bit easier.
321d4e2
# It list all the patches in the current tree and identifies if they are
321d4e2
# present in the kernel.spec, PatchList.txt, both files or neither.
321d4e2
#
321d4e2
# eg. ./check-patchlist.sh [optional flag]
321d4e2
321d4e2
function usage(){
321d4e2
    echo "List all the patches currently in the tree. It also helps identify"
321d4e2
    echo "if the patch is present in kernel.spec or PatchList.txt.          "
321d4e2
    echo "-h, --help                                                        "
321d4e2
    echo "-t, --tracked       patches in both kernel.spec and PatchList.txt "
321d4e2
    echo "-p, --patchlist     patches added to PatchList.txt.               "
321d4e2
    echo "-s, --specfile      patches added to kernel.spec.                 "
321d4e2
    echo "-n, --not-tracked   patches in the tree but not  in PatchList.txt "
321d4e2
    echo "                     or kernel.spec                               "
321d4e2
}
321d4e2
321d4e2
BASEDIR=$(dirname "$( cd $(dirname $BASH_SOURCE[0]) && pwd)")
321d4e2
pushd $BASEDIR > /dev/null
321d4e2
321d4e2
function list_all(){
321d4e2
    echo "===========Legend==========================="
321d4e2
    echo ".   In kernel.spec                          "
321d4e2
    echo "*   In PatchList.txt                        "
321d4e2
    echo "+   In PatchList.txt & Kernel.spec          "
321d4e2
    echo "-   Neither in PatchList.txt nor kernel.spec"
321d4e2
    echo "============================================"
321d4e2
    for patch in $(ls *.patch); do
321d4e2
	if [ ! -z "$(grep $patch PatchList.txt)" ] && [ ! -z "$(grep $patch kernel.spec)" ]
321d4e2
	then
321d4e2
	    echo "+ ${patch}" # Patches in kernel.spec and PatchList.txt
321d4e2
321d4e2
	elif [ ! -z "$(grep $patch PatchList.txt)" ] && [ -z "$(grep $patch kernel.spec)" ]
321d4e2
	then
321d4e2
	     echo "* ${patch}" # Patches in PatchList.txt but not in kernel.spec
321d4e2
321d4e2
	elif [ -z "$(grep $patch PatchList.txt)" ] && [ ! -z "$(grep $patch kernel.spec)" ]
321d4e2
	then
321d4e2
	    echo ". ${patch}" # Patches in kernel.spec but not in PatchList.txt
321d4e2
321d4e2
	else
321d4e2
	    echo "- ${patch}" # Neither in PatchList.txt nor kernel.spec
321d4e2
321d4e2
	fi
321d4e2
    done
321d4e2
}
321d4e2
321d4e2
function list_present_not_added(){
321d4e2
    for patch in $(ls *.patch); do
321d4e2
	if [ -z "$(grep $patch PatchList.txt)" ] && [ -z "$(grep $patch kernel.spec)" ]
321d4e2
	then
321d4e2
	    echo $patch
321d4e2
	fi
321d4e2
    done
321d4e2
}
321d4e2
321d4e2
function list_present_added(){
321d4e2
    for patch in $(ls *.patch); do
321d4e2
	if [ ! -z "$(grep $patch PatchList.txt)" ] && [ ! -z "$(grep $patch kernel.spec)" ]
321d4e2
	then
321d4e2
	    echo $patch
321d4e2
	fi
321d4e2
    done
321d4e2
}
321d4e2
321d4e2
function list_patchList(){
321d4e2
    for patch in $(ls *.patch); do
321d4e2
	if [ ! -z "$(grep $patch PatchList.txt)" ] && [ -z "$(grep $patch kernel.spec)" ]
321d4e2
	then
321d4e2
	    echo $patch
321d4e2
	fi
321d4e2
    done
321d4e2
321d4e2
}
321d4e2
function list_specfile(){
321d4e2
    for patch in $(ls *.patch); do
321d4e2
	if [ -z "$(grep $patch PatchList.txt)" ] && [ ! -z "$(grep $patch kernel.spec)" ]
321d4e2
	then
321d4e2
	    echo $patch
321d4e2
	fi
321d4e2
    done
321d4e2
}
321d4e2
321d4e2
if [ -z "$@" ]; then
321d4e2
    list_all
321d4e2
else
321d4e2
321d4e2
    for opt in "$@"; do
321d4e2
	case $opt in
321d4e2
	    -t|--tracked)
321d4e2
		list_present_added
321d4e2
		;;
321d4e2
	    -s|--specfile)
321d4e2
		list_specfile
321d4e2
		;;
321d4e2
	    -h|--help)
321d4e2
		usage
321d4e2
		;;
321d4e2
	    -n|--not-added)
321d4e2
		list_present_not_added
321d4e2
		;;
321d4e2
	    -p|--patchlist)
321d4e2
		list_patchList
321d4e2
		;;
321d4e2
	    *)
321d4e2
		usage
321d4e2
		;;
321d4e2
	esac
321d4e2
    done
321d4e2
fi
321d4e2
321d4e2
popd > /dev/null