#!/usr/bin/python
#
# Prints a simple list of stuff that is outdated on the system
#
# This file is a portion of the Red Hat Network Panel Applet
#
# Copyright (C) 1999-2002 Red Hat, Inc. All Rights Reserved.
# Distributed under GPL version 2.
#
# $Id: needed-packages.py,v 1.12 2002/11/05 13:42:34 veillard Exp $

import sys
import getopt
import string

sys.path.append("/usr/share/rhn/up2date_client")
original_arg_list = sys.argv[1:]
sys.argv = [ sys.argv[0] ]

import rhn_utils
from rhn_applet_model import rhnAppletModelTUI

def print_usage(program = sys.argv[0]):
    print """
    Usage: %s [options]
    valid options:
        --help          This help screen
        --verbose       Increase verbosity
        --url=URL       Use URL as the server URL
        --uuid          UUID to use for query
    """ % (program,)
    
def parse_opts(arglist):
    ret = {}
    if not arglist:
        return ret
    opts, args = getopt.getopt(arglist, "vhu:",
                               ["help", "verbose", "url=", "uuid="])
    for opt, val in opts:
        if opt in ["--help", "-h"]:
            print_usage()
            sys.exit(0)
        elif opt in ["--verbose", "-v"]:
            rhn_utils.set_log_level(1)
        elif opt in ["--url", "-u"]:
            ret["server_url"] = val
        elif opt in ["--uuid"]:
            ret["uuid"] = val
    ret["args"] = args
    return ret

def main(arglist = []):
    url = rhn_utils.get_config("server_url")
    uuid = rhn_utils.get_config("uuid")

    # parse options
    ret = parse_opts(arglist)
    if ret.has_key("server_url"):
        url = ret["server_url"]
    if ret.has_key("uuid"):
        uuid = ret["uuid"]
        
    model = rhnAppletModelTUI(None, url, uuid)

    ignored_package_str = rhn_utils.get_user_config("IgnoredPackages")

    for i in string.split(ignored_package_str, "|"):
        print "Ignoring %s" % (i)
	if i:
	    model.add_ignored_package(i)

    needed_packages, ignored_packages = model.needed_packages()
    needed_errata = {}
    
    for i in ignored_packages:
        for pkg in needed_packages:
	    if pkg["name"] == i:
	        needed_packages.remove(pkg)

    if len(needed_packages):
        print
        print "The following is a list of outdated packages on your system:"
        print
        print "%-*s %-*s %-*s" % (40, "Name", 15, "Version", 20, "Release")
        print "-" * (40 + 15 + 20 + 2)
        
        for pkg in needed_packages:
            if pkg["errata_advisory"]:
                needed_errata[pkg["errata_advisory"]] = [
                    pkg["errata_advisory"], pkg["errata_synopsis"] ]
            print "%(name)-40s %(version)-15s %(release)-20s" % pkg
        print
        # and now the errata list
        if needed_errata:
            print "%-*s %s\n%s" % (18, "Advisory", "Synopsis", "-" * 76)
            for errata in needed_errata.values():
                print "%-18s %s" % (errata[0], errata[1])
            print       
    else:
        print "No package updates are needed."

if __name__ == "__main__":
    main(original_arg_list)
