#!/bin/ksh
#
# ident	"@(#)list_patches.sh	1.8	05/04/29 SMI"
#
# Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#

export PKG
export CONVERTED_DATE
export HRS MINS SECS

PATCH_HISTORY_DIR=/var/sadm/patch
PACKAGE_HISTORY_DIR=/var/sadm/pkg
PKGINFO_PATCH_FILE=/tmp/pkginfo_patch.$$

function convertDate {
    YEAR=$6

    MONTH_ENG=$2
    case "$MONTH_ENG" in
    Jan ) MONTH=01;;
    Feb ) MONTH=02;;
    Mar ) MONTH=03;;
    Apr ) MONTH=04;;
    May ) MONTH=05;;
    Jun ) MONTH=06;;
    Jul ) MONTH=07;;
    Aug ) MONTH=08;;
    Sep ) MONTH=09;;
    Oct ) MONTH=10;;
    Nov ) MONTH=11;;
    Dec ) MONTH=12;;
    * ) MONTH=00;;
    esac

    DAY=$3
    if [ "$DAY" -lt 10 ] 
    then
	DAY="0"$DAY
    fi

    TIME=$4
    HRS=`echo $4 | cut -d ':' -f 1`
    MINS=`echo $4 | cut -d ':' -f 2`
    SECS=`echo $4 | cut -d ':' -f 3`
    TIMEZONE=$5

    CONVERTED_DATE=$YEAR$MONTH$DAY
    CONVERTED_TIME=$HRS$MINS$SECS
    CONVERTED_TIMEZONE=$TIMEZONE
}

rm -f $PKGINFO_PATCH_FILE

# set up for a premature exit
trap 'rm -f $PKGINFO_PATCH_FILE; exit 0' 1 2 3 15

if [[ $1 = "-p" ]]; then

    for PATCHID in `showrev -p | grep '^Patch:' | cut -f2 -d' '`
    do
	echo $PATCHID.id=$PATCHID

	# Get synopsis and release date from README

	if [ -f $PATCH_HISTORY_DIR/$PATCHID/README.$PATCHID ]
	then
	    SYNOPSIS=`grep "^Synopsis: " $PATCH_HISTORY_DIR/$PATCHID/README.$PATCHID | cut -f2- -d':'`
	    echo $PATCHID.syn=$SYNOPSIS
	    RELEASE_DATE=`grep "^Date: " $PATCH_HISTORY_DIR/$PATCHID/README.$PATCHID | cut -f2 -d':'`
	    convertDate $RELEASE_DATE
	    echo $PATCHID.rel=$CONVERTED_DATE
	else
	    echo $PATCHID.syn=
	    echo $PATCHID.rel=
	fi

	# Get package list and backout info from pkginfos

	BKO=false
	grep "^PATCH" $PACKAGE_HISTORY_DIR/*/pkginfo > $PKGINFO_PATCH_FILE 2> /dev/null
	PKGS=`grep ":PATCH_INFO_$PATCHID" $PKGINFO_PATCH_FILE | cut -f5 -d'/'`
	for PKG in $PKGS
	do
		if [ -f	$PACKAGE_HISTORY_DIR/$PKG/save/$PATCHID/undo.Z ]
		then
			BKO=true
		fi
	done
	echo $PATCHID.pkg=$PKGS
	echo $PATCHID.bko=$BKO

	# Now get the required, obsoletes and incompats info
	if [ -n "$PKG" ]
	then
		PATCH_INFO=`grep "$PACKAGE_HISTORY_DIR/$PKG/pkginfo:PATCH_INFO_$PATCHID" $PKGINFO_PATCH_FILE | cut -f2 -d'='`
		INS=`echo $PATCH_INFO | sed 's/Installed: \(.*\)From:.*$/\1/'`
		convertDate $INS
		echo $PATCHID.ins=$CONVERTED_DATE $CONVERTED_TIME $CONVERTED_TIMEZONE
		OBS=`echo $PATCH_INFO | sed 's/.*Obsoletes: \(.*\)Requires:.*$/\1/'`
		echo $PATCHID.obs=$OBS
		REQ=`echo $PATCH_INFO | sed 's/.*Requires: \(.*\)Incompatibles:.*$/\1/'`
		echo $PATCHID.req=$REQ
		INC=`echo $PATCH_INFO | sed 's/.*Incompatibles:\(.*\)$/\1/'`
		echo $PATCHID.inc=$INC
	fi
    done

    rm -f $PKGINFO_PATCH_FILE

else 
    if [ "$1" = "-z" ] 
    then
	EXITNUM=`/usr/sbin/zoneadm list -c | wc -l`
        exit $EXITNUM
    else 
        showrev -p | grep '^Patch:'
    fi
fi
