c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer#!/usr/bin/python
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer################################################################################
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# Creates MiniMods xml descriptions for HetsLiveCD.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# MiniMods are used to extend a MainMod. In this case they are used to map
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# complete directories to the root filesystem.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer#
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# Author: Thiemo Wiedemeyer
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# E-Mail: raider@informatik.uni-bremen.de
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer################################################################################
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyerimport sys, os
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyerfrom colorprint import printStart, printInfo, printExit
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer##
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# creates a MiniMod xml description with the givin name. All files and
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# directories from source are mapped through the base directory dest on the
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# LiveCD.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# @param name Name of the MiniMod.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# @param source Source directory that should be mapped.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# @param dest Base directory on the LiveCD where the source directory should
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# appear.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyerdef createXML(name, source, dest):
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer printStart("Creating mini mod xml file...")
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer printInfo("opening file '%sMini.xml'..." % (name))
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer xml = open("%sMini.xml" % (name), "w+")
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer printInfo("writing head to file...")
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer xml.write(createHead(name))
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer addFiles(xml, os.path.abspath(source), dest)
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer printInfo("writing tail to file...")
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer xml.write(createTail())
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer printInfo("closing file...")
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer xml.close()
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer printExit("...mini mod xml file created!",0)
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer return
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer##
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# Adds all content from source directory to the dest directory on the LiveCD.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# @param xml Opened fileobject of the xml file.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# @param source Source directory that should be mapped.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# @param dest Base directory on the LiveCD where the source directory should
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# appear.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyerdef addFiles(xml, source, dest):
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer printInfo("adding content from '%s'..." % (source))
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer for item in os.listdir(source):
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer file = os.path.join(source, item)
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer if os.path.isfile(file) or os.path.islink(file):
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer printInfo("adding file '%s'..." % (item))
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer xml.write(addFile(file, os.path.join(dest, item)))
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer elif os.path.isdir(file):
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer addFiles(xml, file, os.path.join(dest, item))
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer##
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# Return the xml string for a file mapping from source to dest.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# @param source Source path of a file that should be mapped.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# @param dest Destination path of the mapping.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# @return The xml string for the mapping.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyerdef addFile(source, dest):
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer return \
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " <local>\n" +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " <from>%s</from>\n" % (convertStr(source)) +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " <to>%s</to>\n" % (convertStr(dest)) +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " </local>\n"
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer##
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# Return the head of the MiniMod xml file.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# @param name Name of the MiniMod.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# @return A xml string containing the header.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyerdef createHead(name):
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer return \
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer "<comps>\n" +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " <group>\n" +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " <minimod>\n" +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " <version>0.0.1</version>\n" +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " <description>Created for HetsLiveCD</description>\n" +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " <minitag>%s</minitag>\n" % (name) +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " <maintag>ALL</maintag>\n" +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " <bootoption>ALL</bootoption>\n" +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " <root>\n" +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " <files>\n"
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer##
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# Return the tail of the MiniMod xml file.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# @return A xml string containing the footer.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyerdef createTail():
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer return \
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " </files>\n" +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " </root>\n" +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " </minimod>\n" +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer " </group>\n" +\
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer "</comps>\n"
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer##
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# Converts some character to the xml representation.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# @param str Sting to convert.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# @return Converted string.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyerdef convertStr(str):
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer str = str.replace("&",r"&amp;")
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer str = str.replace("'",r"&apos;")
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer str = str.replace("<",r"&lt;")
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer str = str.replace(">",r"&gt;")
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer str = str.replace("\"",r"&quot;")
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer return str
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer##
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer# Prints a usage message to the console.
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer#
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyerdef usage():
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer print "Usage:"
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer print " %s name source dest" % os.path.split(sys.argv[0])[1]
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer print "Options: Description:"
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer print " name name of the mini mod."
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer print " source directory containing the files that should be stored in the mini mod."
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer print " dest destination on the live cd filesystem, where the files should appear."
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer return
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyerif __name__ == "__main__":
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer # Check argument count
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer if len(sys.argv) != 4:
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer print "Wrong parameter count."
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer usage()
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer sys.exit(-1)
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer # Check if second argument is a valid directory
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer if not os.path.isdir(sys.argv[2]):
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer print "Parameter is no existing directory."
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer usage()
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer sys.exit(-2)
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer # Start xml creation
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer createXML(sys.argv[1], sys.argv[2], sys.argv[3])
c68f68e340b20c00117a171804c9ed93c6306ac9Thiemo Wiedemeyer sys.exit(0)