Revision: 17676 http://gar.svn.sourceforge.net/gar/?rev=17676&view=rev Author: wbonnet Date: 2012-04-14 17:41:15 +0000 (Sat, 14 Apr 2012) Log Message: ----------- Tier 2 is computed from the revision date
Modified Paths: -------------- csw/mgar/gar/v2/lib/python/build_tier_list.py Modified: csw/mgar/gar/v2/lib/python/build_tier_list.py =================================================================== --- csw/mgar/gar/v2/lib/python/build_tier_list.py 2012-04-14 16:35:28 UTC (rev 17675) +++ csw/mgar/gar/v2/lib/python/build_tier_list.py 2012-04-14 17:41:15 UTC (rev 17676) @@ -2,7 +2,10 @@ import sys import os +import re from optparse import OptionParser +from datetime import date +from datetime import timedelta catalog = {}; @@ -97,22 +100,58 @@ """ 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): + def __init__(self, name=None, version=None, depends=None): + # Copy the name, depend lsit and tier self.name = name if (depends != "none"): self.depends = depends else: self.depends = None + + # By default tier is set to 3. If the package is less than one year old, then it + # will be promoted to tier 2 later. This is pretty crappy, but at this time there is + # no way to be sure the catalog is fully parsed self.tier = 3 + + # Compute the date. This information can be missing in some packages + # Thus date is initialized to None. If it is possible to extract one from + # revision string, then it will be set + self.date = None + # Retrieve the date from the revision string, if it exists + re_revisionString = re.compile(',REV=(?P<date>20\d\d\.\d\d\.\d\d)') + d1 = re_revisionString.search(version) + + # Check if d1 is defined, if not, the regexp matched no revision string + if d1: + # Split the date to retrieve the year month day components + d2 = d1.group('date').split('.') + self.date = date(year=int(d2[0]) , month=int(d2[1]), day=int(d2[2])) + + # Compute the time elapsed between today and the update date + delta = date.today() - self.date + + # If the delta between date is more than 365 days, then it has not been updated for a year + # it goes to tier 3 + if delta.days > 365: + self.tier = 3 + # Otherwise there is a quite recent update, it moves to tier 2 + else: + self.tier = 2 + + 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 : + if self.tier >= tier : + if self.tier > tier : + print "%(pkg)s : %(t1)d => %(t2)d" % { 'pkg' : self.name , 't1' : self.tier , 't2' : 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('|'): @@ -130,11 +169,16 @@ # Read catalog content for line in open(configParser.getCatalog(), 'r'): - pkgInfo = line.split(' ') - name = pkgInfo[2] - depends = pkgInfo[6] - catalog[name] = Package(name,depends) + pkgInfo = line.split(' ') + version = pkgInfo[1] + name = pkgInfo[2] + depends = pkgInfo[6] + catalog[name] = Package(name, version, depends) + # Iterates the catalog once parsed to propagated tier values to depends + for pkg in catalog: + catalog[pkg].setTier(catalog[pkg].tier) + for tier in (1 ,2 ,3): # Create the three files for outputing tier content outputFile[tier] = open(configParser.getTierOutputFile(tier), 'w') 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