def parse_manifest(manifest):
    """
    return a list of dicts containing an rpm name, version and release
    eg: [{'name': 'httpd', 'version': 1.3.39, 'release': 1}]
    """
    regex = re.compile('(.*)-(.*)')
    manifest = os.path.expanduser(manifest)

    if not os.path.exists(manifest):
        raise JuicerManifestError('File not found: %s' % manifest)

    rpm_list = []
    fd = open(manifest)
    data = yaml.load(fd)

    if data is None:
        raise JuicerManifestError('%s contains no items' % manifest)

    for pkg_name, version in data.iteritems():
        if version == 'absent' or version == 'purged':
            juicer.utils.Log.log_debug('%s is absent/purged. Skipping...' % pkg_name)
        elif version == 'latest':
            juicer.utils.Log.log_debug('%s is set to latest. Finding...' % pkg_name)
            lversion, release = juicer.utils.find_latest(pkg_name)
            if not lversion and not release:
                # package wasn't found in repo so don't add it to the list
                continue
            juicer.utils.Log.log_debug('Adding %s version %s release %s' % (pkg_name, lversion, release))
            rpm_list.append({'name': pkg_name, 'version': lversion, 'release': release})
        else:
            try:
                _m = regex.match(version)
                version = _m.group(1)
                release = _m.group(2)
                rpm_list.append({'name': pkg_name, 'version': _m.group(1), 'release': _m.group(2)})
                juicer.utils.Log.log_debug('Adding %s version %s release %s' % (pkg_name, version, release))
            except:
                raise JuicerManifestError('The manifest %s is improperly formatted' % manifest)
                return False

    return rpm_list
return a list of dicts containing an rpm name, version and release
    eg: [{'name': 'httpd', 'version': 1.3.39, 'release': 1}]