Below is the file 'client/plugins/softwareupdate.py' from this revision. You can also download the file.


from phonehome import urgency
import os, sys, re

def run():
    results = []
    software_update_prog = "/usr/sbin/softwareupdate"
    if not os.access(software_update_prog, os.X_OK):
	return [(urgency['info'], 'softwareupdate not available (not a Mac, or not >= 10.5)')]
    update_re = re.compile(r'^\s*\* (.*)$')
    descr_re = re.compile(r'^\t(.*)$')
    fd = os.popen("%s --list" % software_update_prog)
    descr_for = None
    updates = {}
    for line in fd:
        m = update_re.match(line)
        if m:
            descr_for = m.groups()[0]
            updates[descr_for] = None
            continue
        m = descr_re.match(line)
        if m:
            if descr_for is None:
                result.append((urgency['alert'], 'something wrong with parser, description with no package.'))
            else:
                updates[descr_for] = m.groups()[0]
    update_names = updates.keys()
    update_names.sort()
    for name in update_names:
        descr = updates[name]
        if descr is None:
            results.append((urgency['alert'], '%s (no description found [parser problem?])' % name))
        else:
            if descr.find('[recommended]') != -1:
                urgency_str = 'alert'
            else:
                urgency_str = 'warning'
            results.append((urgency[urgency_str], descr))
    return results