Revision: 17675 http://gar.svn.sourceforge.net/gar/?rev=17675&view=rev Author: wbonnet Date: 2012-04-14 16:35:28 +0000 (Sat, 14 Apr 2012) Log Message: ----------- Initial commit
Added Paths: ----------- csw/mgar/gar/v2/lib/python/build_tier_list.py Added: csw/mgar/gar/v2/lib/python/build_tier_list.py =================================================================== --- csw/mgar/gar/v2/lib/python/build_tier_list.py (rev 0) +++ csw/mgar/gar/v2/lib/python/build_tier_list.py 2012-04-14 16:35:28 UTC (rev 17675) @@ -0,0 +1,158 @@ +#!/opt/csw/bin/python + +import sys +import os +from optparse import OptionParser + +catalog = {}; + + +# --------------------------------------------------------------------------------------------------------------------- +# +# +class CommandLineParser(object): + """Command line parser. This class is a helper used to retrive options from command line + """ + + def __init__(self): + # Create the option parser + self.parser = OptionParser() + + # Add the different command line options to the parser + self.parser.add_option("-c", "--catalog", help="Defines the catalog to parse. Default is ./catalog", + action="store", dest="catalog", type="string") + self.parser.add_option("-1", "--tier1-list", help="List of tier 1 packages", + action="store", dest="tier1", type="string") + self.parser.add_option("-2", "--tier2-list", help="List of tier 2 packages", + action="store", dest="tier2", type="string") + self.parser.add_option("-3", "--tier3-list", help="List of tier 3 packages", + action="store", dest="tier3", type="string") + self.parser.add_option("-V", "--verbose", help="Activate verbose mode", action="store_true", dest="verbose") + + def parse(self): + (self.options, self.args) = self.parser.parse_args() + return self.options, self.args + +# --------------------------------------------------------------------------------------------------------------------- +# +# +class ConfigurationParser(object): + """This class is a helper providing getter and setter on the option from command line + """ + + def __init__(self, args): + + if args.verbose != None: + self.verbose = args.verbose + else: + self.verbose = False + + if args.catalog != None: + self.catalog = args.catalog + else: + self.catalog = "./catalog" + + if args.tier1 != None: + self.tier1 = args.tier1 + else: + self.tier1 = "./tier1" + + if args.tier2 != None: + self.tier2 = args.tier2 + else: + self.tier2 = "./tier2" + + if args.tier3 != None: + self.tier3 = args.tier3 + else: + self.tier3 = "./tier3" + + # ----------------------------------------------------------------------------------------------------------------- + + def getCatalog(self): + return self.catalog + + def getTierInputFile(self, tier): + if (tier == 1): + return self.tier1 + + if (tier == 2): + return self.tier2 + + if (tier == 3): + return self.tier3 + + return None + + def getTierOutputFile(self, tier): + return "%(filename)s.out" % { 'filename' : self.getTierInputFile(tier) } + + def getVerbose(self): + return self.verbose + +# --------------------------------------------------------------------------------------------------------------------- +# +# +class Package: + """ Defines a package. A package has a name (CSWfoo), a list of dependencies (same syntax as + catalog (CSWfoo|CSWbar) and a tier (1, 2, 3 or None if undefined) + """ + def __init__(self, name=None, depends=None, tier=None): + self.name = name + if (depends != "none"): + self.depends = depends + else: + self.depends = None + self.tier = 3 + + def setTier(self, tier): + # Access to the global variable storing the catalog + global catalog + + # Check if tier is lower or undefined, then we need to do something + if self.tier > tier : + # Set the new tier value + self.tier = tier + # And iterate the list of dependencies to recursivly call the setTier method + if (self.depends != None): + for pkg in self.depends.split('|'): + catalog[pkg].setTier(tier) + +def main(): + + global catalog + outputFile = {} + + # Parse command line + cliParser = CommandLineParser() + (opts, args) = cliParser.parse() + configParser = ConfigurationParser(opts) + + # Read catalog content + for line in open(configParser.getCatalog(), 'r'): + pkgInfo = line.split(' ') + name = pkgInfo[2] + depends = pkgInfo[6] + catalog[name] = Package(name,depends) + + for tier in (1 ,2 ,3): + # Create the three files for outputing tier content + outputFile[tier] = open(configParser.getTierOutputFile(tier), 'w') + + # Check if the specific tier file exist + if os.path.isfile(configParser.getTierInputFile(tier)): + for line in open(configParser.getTierInputFile(tier) , 'r'): + name = line.split('\n') + catalog[name[0]].setTier(tier) + else: + print "File %(filename)s does not exit. Skipping this file" % { 'filename' : configParser.getTierInputFile(tier) } + + for pkg in catalog: + outputFile[catalog[pkg].tier].write("%(name)s\n" % { 'name' : catalog[pkg].name }) + + for tier in (1 ,2 ,3): + outputFile[tier].close() + +# On sort en rendant le code de retour de main +if __name__ == '__main__': + sys.exit(main()) Property changes on: csw/mgar/gar/v2/lib/python/build_tier_list.py ___________________________________________________________________ Added: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ devel mailing list devel@lists.opencsw.org https://lists.opencsw.org/mailman/listinfo/devel