#!/usr/bin/perl
#
# print date of last use of all installed RPMs 
# 
$| = 1;
$verbose=0;

open(PKGLIST, "rpm -qa --queryformat '%{NAME} %{VERSION} %{RELEASE} %{INSTALLTIME}\n'|") || die "cannot invoke rpm -qa: $errno";
while (<PKGLIST>) {
    chomp;
    ($name, $version, $release, $insttime) = split;
    $pkg = "$name-$version-$release";
    $verbose && print "package: $pkg\n";
    $pkgtime = 0;
    $pkgsize = 0;
    open(FILELIST, "rpm -ql $pkg|") || die "cannot invoke rpm -ql $pkg: $errno";
    while(<FILELIST>) {
	chomp;
	$file = $_;
	$verbose && print "  file: $file\n";
	($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
	 $atime,$mtime,$ctime,$blksize,$blocks)
	    = stat($file);
	if (! -f _) {
	    $verbose && print "    ignored\n";
	} else {
	    $verbose && print "    mtime: $mtime\n";
	    $verbose && print "    atime: $atime\n";
	    $verbose && print "    size : $size\n";
	    if ($pkgtime < $mtime) {
		$pkgtime = $mtime;
	    }
	    if ($pkgtime < $atime) {
		$pkgtime = $atime;
	    }
	    $pkgsize += int(($size + 1023) / 1024);
	}
    }
    $verbose && print "  pkgtime: $pkgtime\n";
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)
	= localtime($pkgtime);
    printf "%04d-%02d-%02d:%02d:%02d:%02d ",
    	   $year + 1900, $mon + 1, $mday, $hour, $min, $sec;
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)
	= localtime($insttime);
    printf "%04d-%02d-%02d:%02d:%02d:%02d ",
    	   $year + 1900, $mon + 1, $mday, $hour, $min, $sec;
    printf "%5d %s %s %s\n", $pkgsize, $name, $version, $release;
}
