#!/usr/bin/python

import os
import sys
import glob
from xml.dom import minidom
from collections import OrderedDict

def get_boot_description_packages_for_arch(boot_description_dir, arch):
    package_list = []
    file_name = boot_description_dir + '/config.xml'
    xml_doc = minidom.parse(file_name)
    for packages in xml_doc.getElementsByTagName('packages'):
        package_type = packages.attributes['type'].value
        if not package_type == 'delete':
            for package in packages.getElementsByTagName('package'):
                try:
                    for_arch = package.attributes['arch'].value
                except KeyError:
                    for_arch = None
                if for_arch:
                    if for_arch == arch:
                        package_list.append(
                            package.attributes['name'].value
                        )
                else:
                    package_list.append(
                        package.attributes['name'].value
                    )
    return sorted(package_list)

def get_boot_distribution_names():
    distro_names = []
    for distro in glob.iglob('arch/*/*/*'):
        if os.path.isdir(distro):
            distro_names.append(os.path.basename(distro))
    return sorted(
        list(OrderedDict.fromkeys(distro_names))
    )

for distribution in get_boot_distribution_names():
    for arch in sorted(glob.iglob('arch/*')):
        package_list = []
        for arch_distro in glob.iglob(arch + '/*/' + distribution):
            package_list += get_boot_description_packages_for_arch(
                arch_distro, os.path.basename(arch)
            )

        package_list = sorted(
            list(OrderedDict.fromkeys(package_list))
        )
        topic = os.path.basename(arch) + ':' + distribution + ':'
        if package_list:
            print(topic + ' '.join(package_list))
        else:
            print(topic + 'no_boot_descriptions_for_%s_on_%s_available' % (
                distribution, os.path.basename(arch)
            ))
