#!/usr/bin/python """ userdefined script which builds a site """ # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # Copyright 2004 Dries Verachtert import sys, string, os, urllib,re ,shutil from datetime import datetime sys.path.append("pydar") sys.path.append("/usr/share/pydar2/pydar") sys.path.append(".") from log4py import Logger from config import Config import storagefactory, time # currently this builds the site at dries.ulyssis.org # certain parts are added for building the general rpmforge site: these functions start with RF defaultQueryDistroArch = "el4-i386" def RpmforgeSite(specRepo,useLocalFilesOnly,buildSiteDries,buildSiteRpmforge): so = SiteObject(specRepo,useLocalFilesOnly,buildSiteDries,buildSiteRpmforge) so.generate() stripDistRepoTagRegExpressions = ["0\.el[234]\.dag\..*\.rpm", "0\.el[234]\.1\.dag\..*\.rpm", "rhel[234]\.1\.dag\..*\.rpm", "0\.el[234]\.rf\..*\.rpm", "1\.el3\.dag\..*\.rpm", "dag\.rhel3\..*\.rpm", "rhel3\.dag\..*\.rpm", "1\.el3\.rf\..*\.rpm", "2\.el4\.rf\..*\.rpm", "1\.fc[12]\.dag\..*\.rpm", "rhfc1\.dag\..*\.rpm", "rh80\.dag\..*\.rpm", "dag\.rh80\..*\.rpm", "rh90\.dag\..*\.rpm", "dag\.rh90\..*\.rpm", "0\.au1\.9[12]\..*\.rpm", "1\.fc[123]\.rf\..*\.rpm", "dag\.rhfc1\..*\.rpm", "1\.fc[12]\.dries\..*\.rpm", "2\.fc4\.rf\..*\.rpm", "2\.fc5\.rf\..*\.rpm", "0\.fc5\.rf\..*\.rpm", "dag\.rh62\..*\.rpm", "1\.el3\.dries\..*\.rpm", "rh6.\.dag\..*\.rpm", "0\.rh[6789]\.dag\..*\.rpm", "0\.dag\.noarch\.rpm", "rh73\.dag\..*\.rpm", "0\.rh[789]\.rf\..*\.rpm", "dag\.rh73\..*\.rpm", "0\.rf\.noarch\.rpm"] stripDistRepoTagREs = [] for exp in stripDistRepoTagRegExpressions: stripDistRepoTagREs.append(re.compile(exp)) # First some lists of rpms are constructed. These lists are represented by DistArchPackagerList objects. Such an object # represents a list of rpms made by 1 packager for a certain dist/arch combination. For example: el4-i386-dries. # The list of rpms of such a list is made automatically from the index page with all the rpms, for example # http://apt.sw.be/dries/redhat/el4/i386/en/RPMS.dries # Each rpm is represented with a RpmPackage object. # It contains a link to the distArchPackagerList object where the rpm is found class RpmPackage: def setSpecRepoSpecFile(self,specRepoSpecFileObj): self.__specRepoSpecFile = specRepoSpecFileObj def getSpecRepoSpecFile(self): return self.__specRepoSpecFile # only returns the filename without the url def getName(self): return self.__name # returns the full url which can be used in a webpage def getFullUrl(self): return self.__distArchPackagerList.getRpmsUrl() + self.__name def getDistArchPackagerList(self): return self.__distArchPackagerList def getVersion(self): return self.__version def getRelease(self): return self.__release #return version-release def getVerRel(self): return self.__version + "-" + self.__release def __stripDistRepoTag(self,name): for reObj in stripDistRepoTagREs: name = re.sub(reObj,"",name) if name.find(".rpm") > 0: raise Exception("suffix not known: " + name + ", " + name) return name def __init__(self,distArchPackagerList,name): self.__distArchPackagerList = distArchPackagerList self.__name = name # let's extract the version-release self.__verrel = "" tempname = self.__stripDistRepoTag(name) regexp = "^(.*)-(.*?)-(.*?)\.$" regex = re.compile(regexp) result = regex.match(tempname) if result: self.__version = result.group(2) self.__release = result.group(3) self.__verrel = self.__version + "-" + self.__release else: raise Exception("could not get version and release, name:" + name + ", tempname:"+ tempname) # an object for each distro/arch/packager combination # it contains all the rpms on a certain url class DistArchPackagerList: def __init__(self, packager, displayShortName, rpmsUrl, displayFullName, additionalPaths, localFile, distroArch): self.__distroArch = distroArch #self.shortName = shortName self.__displayShortName = displayShortName self.__rpmsUrl = rpmsUrl #self.rpms = [] self.__binaryRpms = [] #self.srpms = [] self.__binarySrpms = [] #self.__suffixes = suffixes self.__displayFullName = displayFullName self.__additionalPaths = additionalPaths self.__packager = packager self.__localFile = localFile def getAdditionalPaths(self): return self.__additionalPaths def getNumberOfBinaryRpms(self): return len(self.__binaryRpms) def getNumberOfSourceRpms(self): return len(self.__binarySrpms) # get the local file. the local file contains the page at the url rpmsUrl. this can be used for testing/debugging # this local file is not automatically updated def getLocalFile(self): return self.__localFile # rpmsUrl is an url where a page can be found containing all those rpms def getRpmsUrl(self): return self.__rpmsUrl # short name of the packager like 'dries' def getPackager(self): return self.__packager # distroarch, for example: 'el4-i386' def getDistArch(self): return self.__distroArch # displayShortName, for example 'el4 i386 rpms' (was: displayName) def getDisplayShortName(self): return self.__displayShortName # displayFullName, for example 'Red Hat Enterprise Linux 4 for i386' (was: fullName) def getDisplayFullName(self): return self.__displayFullName # distroarchpackager, for example 'el4-i386-dries' (was: shortName) def getDistArchPackager(self): return self.__distroArch + "-" + self.__packager def addBinaryRpm(self, bo): self.__binaryRpms.append(bo) def getBinaryRpms(self): return self.__binaryRpms class SiteObject: def __init__(self,specRepo,useLocalFilesOnly,buildDriesSite,buildRpmforgeSite): self.__cat = Logger().get_instance(self) self.__cat.debug("start") self.__timer("SiteObject init") self.__useLocalFilesOnly = useLocalFilesOnly self.__buildDriesSite = buildDriesSite self.__buildRpmforgeSite = buildRpmforgeSite # this is a hash which contains values which can be used in templates # for example FC3-I386-DRIES-RPMS -> 533 (the number of rpms) # LASTUPDATE -> 4 jan 2010 5:07 self.__siteValues = {} self.__specRepo = specRepo self.__Driesfullcontentstemplate = None self.__RFfullcontentstemplate = None self.__Driessiterootdir = "/home/rsync/sitedries/rpm/" self.__RFsiterootdir = "/tmp/rpmforgesite/" self.__storage = storagefactory.StorageFactory.getStorage() self.__timer("distArchPackagerLists init") self.__distArchPackagerLists = [] addPaths = ['redhat/el4/en/i386'] self.__distArchPackagerLists.append(DistArchPackagerList("dries", "el4 i386 rpms","http://ftp.belnet.be/packages/dries.ulyssis.org/redhat/el4/en/i386/RPMS.dries/", "Red Hat Enterprise Linux 4 for i386", addPaths, "scripts/cache/el4-i386-dries.html", "el4-i386")) addPaths = ['redhat/el3/en/i386'] self.__distArchPackagerLists.append(DistArchPackagerList("dries", "el3 i386 rpms","http://ftp.belnet.be/packages/dries.ulyssis.org/redhat/el3/en/i386/RPMS.dries/", "Red Hat Enterprise Linux 3 for i386", addPaths, "scripts/cache/el3-i386-dries.html", "el3-i386")) addPaths = ['fedora/fc3/i386'] self.__distArchPackagerLists.append(DistArchPackagerList("dries", "fc3 i386 rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/fc3/i386/RPMS.dries/", "Fedora Core 3 for i386", addPaths, "scripts/cache/fc3-i386-dries.html", "fc3-i386")) addPaths = ['fedora/fc2/i386'] self.__distArchPackagerLists.append(DistArchPackagerList("dries", "fc2 i386 rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/fc2/i386/RPMS.dries/", "Fedora Core 2 for i386", addPaths, "scripts/cache/fc2-i386-dries.html", "fc2-i386")) addPaths = ['fedora/fc1/i386'] self.__distArchPackagerLists.append(DistArchPackagerList("dries", "fc1 i386 rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/fc1/i386/RPMS.dries/", "Fedora Core 1 for i386", addPaths, "scripts/cache/fc1-i386-dries.html", "fc1-i386")) addPaths = ['fedora/fc4/i386'] self.__distArchPackagerLists.append(DistArchPackagerList("dries", "fc4 i386 rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/fc4/i386/RPMS.dries/", "Fedora Core 4 for i386", addPaths, "scripts/cache/fc4-i386-dries.html", "fc4-i386")) addPaths = ['fedora/fc4/x86_64'] self.__distArchPackagerLists.append(DistArchPackagerList("dries", "fc4 x86_64 rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/fc4/x86_64/RPMS.dries/", "Fedora Core 4 for x86_64", addPaths, "scripts/cache/fc4-x86_64-dries.html", "fc4-x86_64")) addPaths = ['fedora/fc5/i386'] self.__distArchPackagerLists.append(DistArchPackagerList("dries", "fc5 i386 rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/fc5/i386/RPMS.dries/", "Fedora Core 5 for i386", addPaths, "scripts/cache/fc5-i386-dries.html", "fc5-i386")) addPaths = ['fedora/fc5/x86_64'] self.__distArchPackagerLists.append(DistArchPackagerList("dries", "fc5 x86_64 rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/fc5/x86_64/RPMS.dries/", "Fedora Core 5 for x86_64", addPaths, "scripts/cache/fc5-x86_64-dries.html", "fc5-x86_64")) addPaths = ['aurora/1.92/sparc'] self.__distArchPackagerLists.append(DistArchPackagerList("dries", "au1.92 sparc rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/aurora/1.92/sparc/RPMS.dries/", "Aurora 1.92 for sparc", addPaths, "scripts/cache/au1.92-sparc-dries.html", "au1.92-sparc")) addPaths = ['aurora/1.91/sparc'] self.__distArchPackagerLists.append(DistArchPackagerList("dries", "au1.91 sparc rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/aurora/1.91/sparc/RPMS.dries/", "Aurora 1.91 for sparc", addPaths, "scripts/cache/au1.91-sparc-dries.html", "au1.91-sparc")) if self.__buildRpmforgeSite: #dag: #http://apt.sw.be/fedora/3/en/i386/RPMS.dag/ #http://apt.sw.be/fedora/3/en/x86_64/RPMS.dag/ addPaths = [] self.__distArchPackagerLists.append(DistArchPackagerList("dag", "rh6 i386 rpms", "http://apt.sw.be/redhat/6.2/en/i386/RPMS.dag/", "Red Hat 6.2 for i386", addPaths, "scripts/cache/rh6-i386-dag.html", "rh6-i386")) self.__distArchPackagerLists.append(DistArchPackagerList("dag", "rh7 i386 rpms", "http://apt.sw.be/redhat/7.3/en/i386/RPMS.dag/", "Red Hat 7.3 for i386", addPaths, "scripts/cache/rh7-i386-dag.html", "rh7-i386")) self.__distArchPackagerLists.append(DistArchPackagerList("dag", "rh8 i386 rpms", "http://apt.sw.be/redhat/8.0/en/i386/RPMS.dag/", "Red Hat 8.0 for i386", addPaths, "scripts/cache/rh8-i386-dag.html", "rh8-i386")) self.__distArchPackagerLists.append(DistArchPackagerList("dag", "rh9 i386 rpms", "http://apt.sw.be/redhat/9/en/i386/RPMS.dag/","Red Hat 9 for i386", addPaths, "scripts/cache/rh9-i386-dag.html", "rh9-i386")) self.__distArchPackagerLists.append(DistArchPackagerList("dag", "el2 i386 rpms", "http://apt.sw.be/redhat/el2.1/en/i386/RPMS.dag/", "Red Hat Enterprise Linux 2.1 for i386", addPaths, "scripts/cache/el2-i386-dag.html", "el2-i386")) self.__distArchPackagerLists.append(DistArchPackagerList("dag", "el3 i386 rpms", "http://apt.sw.be/redhat/el3/en/i386/RPMS.dag/", "Red Hat Enterprise Linux 3 for i386", addPaths, "scripts/cache/el3-i386-dag.html", "el3-i386")) self.__distArchPackagerLists.append(DistArchPackagerList("dag", "el3 x86_64 rpms", "http://apt.sw.be/redhat/el3/en/x86_64/RPMS.dag/","Red Hat Enterprise Linux 3 for x86_64", addPaths, "scripts/cache/el3-x86_64-dag.html", "el3-x86_64")) self.__distArchPackagerLists.append(DistArchPackagerList("dag", "el4 i386 rpms", "http://apt.sw.be/redhat/el4/en/i386/RPMS.dag/", "Red Hat Enterprise Linux 4 for i386", addPaths, "scripts/cache/el4-i386-dag.html", "el4-i386")) self.__distArchPackagerLists.append(DistArchPackagerList("dag", "el4 x86_64 rpms", "http://apt.sw.be/redhat/el4/en/x86_64/RPMS.dag/", "Red Hat Enterprise Linux 4 for x86_64", addPaths, "scripts/cache/el4-x86_64-dag.html", "el4-x86_64")) self.__distArchPackagerLists.append(DistArchPackagerList("dag", "fc1 i386 rpms", "http://apt.sw.be/fedora/1/en/i386/RPMS.dag/", "Fedora Core 1 for i386", addPaths, "scripts/cache/fc1-i386-dag.html", "fc1-i386")) self.__distArchPackagerLists.append(DistArchPackagerList("dag", "fc2 i386 rpms", "http://apt.sw.be/fedora/2/en/i386/RPMS.dag/", "Fedora Core 2 for i386", addPaths, "scripts/cache/fc2-i386-dag.html", "fc2-i386")) self.__distArchPackagerLists.append(DistArchPackagerList("dag", "fc2 x86_64 rpms", "http://apt.sw.be/fedora/2/en/x86_64/RPMS.dag/", "Fedora Core 2 for x86_64", addPaths, "scripts/cache/fc2-x86_64-dag.html", "fc2-x86_64")) self.__distArchPackagerLists.append(DistArchPackagerList("dag", "fc3 i386 rpms", "http://apt.sw.be/fedora/3/en/i386/RPMS.dag/", "Fedora Core 3 for i386", addPaths, "scripts/cache/fc3-i386-dag.html", "fc3-i386")) self.__distArchPackagerLists.append(DistArchPackagerList("dag", "fc3 x86_64 rpms", "http://apt.sw.be/fedora/3/en/x86_64/RPMS.dag/", "Fedora Core 3 for x86_64", addPaths, "scripts/cache/fc3-x86_64-dag.html", "fc3-x86_64")) # sources self.__distArchPackagerListsSource = [] addPaths = [] self.__distArchPackagerListsSource.append(DistArchPackagerList("dries", "el4 i386 rpms","http://ftp.belnet.be/packages/dries.ulyssis.org/redhat/el4/en/i386/SRPMS.dries/", "Red Hat Enterprise Linux 4 for i386", addPaths, "scripts/cache/srpms/el4-i386-dries.html", "el4-i386")) self.__distArchPackagerListsSource.append(DistArchPackagerList("dries", "el3 i386 rpms","http://ftp.belnet.be/packages/dries.ulyssis.org/redhat/el3/en/i386/SRPMS.dries/", "Red Hat Enterprise Linux 3 for i386", addPaths, "scripts/cache/srpms/el3-i386-dries.html", "el3-i386")) self.__distArchPackagerListsSource.append(DistArchPackagerList("dries", "fc3 i386 rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/fc3/i386/SRPMS.dries/", "Fedora Core 3 for i386", addPaths, "scripts/cache/srpms/fc3-i386-dries.html", "fc3-i386")) self.__distArchPackagerListsSource.append(DistArchPackagerList("dries", "fc2 i386 rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/fc2/i386/SRPMS.dries/", "Fedora Core 2 for i386", addPaths, "scripts/cache/srpms/fc2-i386-dries.html", "fc2-i386")) self.__distArchPackagerListsSource.append(DistArchPackagerList("dries", "fc1 i386 rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/fc1/i386/SRPMS.dries/", "Fedora Core 1 for i386", addPaths, "scripts/cache/srpms/fc1-i386-dries.html", "fc1-i386")) self.__distArchPackagerListsSource.append(DistArchPackagerList("dries", "fc4 i386 rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/fc4/i386/SRPMS.dries/", "Fedora Core 4 for i386", addPaths, "scripts/cache/srpms/fc4-i386-dries.html", "fc4-i386")) self.__distArchPackagerListsSource.append(DistArchPackagerList("dries", "fc4 x86_64 rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/fc4/x86_64/SRPMS.dries/", "Fedora Core 4 for x86_64", addPaths, "scripts/cache/srpms/fc4-x86_64-dries.html", "fc4-x86_64")) self.__distArchPackagerListsSource.append(DistArchPackagerList("dries", "fc5 i386 rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/fc5/i386/SRPMS.dries/", "Fedora Core 5 for i386", addPaths, "scripts/cache/srpms/fc5-i386-dries.html", "fc5-i386")) self.__distArchPackagerListsSource.append(DistArchPackagerList("dries", "fc5 x86_64 rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/fedora/fc5/x86_64/SRPMS.dries/", "Fedora Core 5 for x86_64", addPaths, "scripts/cache/srpms/fc5-x86_64-dries.html", "fc5-x86_64")) self.__distArchPackagerListsSource.append(DistArchPackagerList("dries", "au1.92 sparc rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/aurora/1.92/sparc/SRPMS.dries/", "Aurora 1.92 for sparc", addPaths, "scripts/cache/srpms/au1.92-sparc-dries.html", "au1.92-sparc")) self.__distArchPackagerListsSource.append(DistArchPackagerList("dries", "au1.91 sparc rpms", "http://ftp.belnet.be/packages/dries.ulyssis.org/aurora/1.91/sparc/SRPMS.dries/", "Aurora 1.91 for sparc", addPaths, "scripts/cache/srpms/au1.91-sparc-dries.html", "au1.91-sparc")) self.__timer("distArchPackagerLists init") self.__rpmNameToSpecSubDirName = {} self.__timer("completeRpmsLists") self.__completeRpmsLists() self.__timer("completeRpmsLists") self.__timer("completeSiteValues") self.__completeSiteValues() self.__timer("completeSiteValues") self.__timer("SiteObject init") # counters is a hash which contains interesting values which can be used on pages def __completeSiteValues(self): # it should already contain # EL4-I386-DRIES-RPMS, EL4-I386-DRIES-SRPMS, ... self.__siteValues["NUMBERSPECFILES"] = len(self.__specRepo.getSpecRepositorySpecFiles()) self.__siteValues["LASTUPDATE"] = str(datetime.today()) totrpms = 0 totsrpms = 0 totrpmsdries = 0 totrpmsdag = 0 totsrpmsdries = 0 totsrpmsdag = 0 for d in self.__distArchPackagerLists: totrpms = totrpms + d.getNumberOfBinaryRpms() #totsrpms = totsrpms + d.getNumberOfSourceRpms() if d.getPackager() == "dries": totrpmsdries = totrpmsdries + d.getNumberOfBinaryRpms() if d.getPackager() == "dag": totrpmsdag = totrpmsdag + d.getNumberOfBinaryRpms() for d in self.__distArchPackagerListsSource: totsrpms = totsrpms + d.getNumberOfBinaryRpms() if d.getPackager() == "dries": totsrpmsdries = totsrpmsdries + d.getNumberOfBinaryRpms() if d.getPackager() == "dag": totsrpmsdag = totsrpmsdag + d.getNumberOfBinaryRpms() self.__siteValues["TOTALRPMS"] = totrpms self.__siteValues["TOTALSRPMS"] = totsrpms self.__siteValues["TOTAL-RPMS-DRIES"] = totrpmsdries self.__siteValues["TOTAL-SRPMS-DAG"] = totsrpmsdag self.__siteValues["TOTAL-SRPMS-DRIES"] = totsrpmsdries self.__siteValues["TOTAL-RPMS-DAG"] = totrpmsdag for k in self.__siteValues.keys(): print "siteval,k:" + k + ",v:" + str(self.__siteValues[k]) def __completeRpmsLists(self): self.__completeBinaryRpmsLists() self.__completeSourceRpmsLists() lastTimerTimestamp = {} totalTimerTimestamp = {} isRunningTimerTimestamp = {} def __timer(self,msg): if msg in SiteObject.lastTimerTimestamp.keys(): if SiteObject.isRunningTimerTimestamp[msg] == 1: SiteObject.totalTimerTimestamp[msg] = SiteObject.totalTimerTimestamp[msg] + time.time() - SiteObject.lastTimerTimestamp[msg] SiteObject.isRunningTimerTimestamp[msg] = 0 #print "[TIMER] " + msg + ": " + str(SiteObject.totalTimerTimestamp[msg]) else: SiteObject.isRunningTimerTimestamp[msg] = 1 SiteObject.lastTimerTimestamp[msg] = time.time() else: SiteObject.lastTimerTimestamp[msg] = time.time() SiteObject.totalTimerTimestamp[msg] = 0 SiteObject.isRunningTimerTimestamp[msg] = 1 def printTimers(self): for msg in SiteObject.totalTimerTimestamp.keys(): print "TIMER: " + msg + ": " + str(SiteObject.totalTimerTimestamp[msg]) def __completeBinaryRpmsLists(self): self.__timer("__completeBinaryRpmsLists") # list of packagenames extendedPackagenames = self.__getPackageNameListSortedByLength() # make a hash packagename -> specrepospecfile nametospecrepospecfile = {} for srsf in self.__specRepo.getSpecRepositorySpecFiles(): nametospecrepospecfile[srsf.getSubDir()] = srsf #firstre = re.compile('.*\.rpm *([0-9]*)-([A-Za-z]*)-([0-9]*) ') for listje in self.__distArchPackagerLists: # ok get the list of rpms and srpms of this list f = None nbrOfLines = 0 if not self.__useLocalFilesOnly: f = urllib.urlopen(listje.getRpmsUrl()) else: print "localFile: " + listje.getLocalFile() f = open(listje.getLocalFile()) #print f.info() print "start, " + listje.getRpmsUrl() lijn = f.readline() while lijn != "": nbrOfLines = nbrOfLines + 1 #print l # some stuff which should not get into the lists... lijn = lijn.replace("gcc-c++-3.2.2-5.i386.rpm","") mo = secondre.search(lijn) if mo != None: rpm = mo.group(1) #listje.rpms.append(rpm) bo = RpmPackage(listje,rpm) listje.addBinaryRpm(bo) i = 0 #self.__timer("search in packagenames") #print "rpm: " + rpm searchrpm = rpm # certain packages don't have normal subpackage names, for example clamd is a subpackage of clamav specials = {} specials['clamd'] = 'clamav' specials['gpsmap'] = 'gpsmap' for k in specials.keys(): searchrpm = searchrpm.replace(k,specials[k]) start = searchrpm[0:2] if start in extendedPackagenames.keys(): packagenames = extendedPackagenames[start] while ((i < len(packagenames)) and (not searchrpm.startswith(packagenames[i]))): i = i + 1 #print i, len(packagenames), packagenames[i] #self.__timer("search in packagenames") if i specrepospecfile nametospecrepospecfile = {} for srsf in self.__specRepo.getSpecRepositorySpecFiles(): nametospecrepospecfile[srsf.getSubDir()] = srsf #firstre = re.compile('.*\.rpm *([0-9]*)-([A-Za-z]*)-([0-9]*) ') for listje in self.__distArchPackagerListsSource: # ok get the list of rpms and srpms of this list f = None nbrOfLines = 0 if not self.__useLocalFilesOnly: f = urllib.urlopen(listje.getRpmsUrl()) else: print "localFile: " + listje.getLocalFile() f = open(listje.getLocalFile()) #print f.info() print "start, " + listje.getRpmsUrl() lijn = f.readline() while lijn != "": nbrOfLines = nbrOfLines + 1 #print l # some stuff which should not get into the lists... lijn = lijn.replace("gcc-c++-3.2.2-5.i386.rpm","") mo = secondre.search(lijn) if mo != None: rpm = mo.group(1) #listje.rpms.append(rpm) bo = RpmPackage(listje,rpm) listje.addBinaryRpm(bo) i = 0 #self.__timer("search in packagenames") #print "rpm: " + rpm searchrpm = rpm # certain packages don't have normal subpackage names, for example clamd is a subpackage of clamav specials = {} specials['clamd'] = 'clamav' specials['gpsmap'] = 'gpsmap' for k in specials.keys(): searchrpm = searchrpm.replace(k,specials[k]) start = searchrpm[0:2] if start in extendedPackagenames.keys(): packagenames = extendedPackagenames[start] while ((i < len(packagenames)) and (not searchrpm.startswith(packagenames[i]))): i = i + 1 #print i, len(packagenames), packagenames[i] #self.__timer("search in packagenames") if iPlease note that an file might not be available immediately on all the mirrors.

" contents = contents + "

New spec files of last month:

" arr = self.__storage.getMostRecentSpecFiles('rpmforge') subcontents = "" lastday = "" for hash in arr: day = hash['timestamp'] if lastday == "": lastday = day if day != lastday: subcontents = "

" + day + "

\n" + subcontents lastday = day filename = hash['filename'] name = hash['name'] subcontents = "
" + name + "
" + subcontents if lastday != "": subcontents = "

" + day + "

\n" + subcontents contents = contents + subcontents contents = contents + "

New or updated rpm files of last month:

" arr = self.__storage.getMostRecentBuilds('dries') lastday = "" alreadyseen = [] subcontents = "" for hash in arr: day = hash['timestamp'] if lastday == "": lastday = day if day != lastday: subcontents = "

" + day + "

\n" + subcontents lastday = day filename = hash['filename'] name = hash['name'] distroarchtag = hash['distroarchtag'] #suffix = ", update" #if name + "-" + distroarchtag not in alreadyseen: # suffix = ", new rpm" # alreadyseen.append(name + "-" + distroarchtag) subcontents = "" + filename + " (" + name + " for " + distroarchtag + ")
" + subcontents if lastday != "": subcontents = "

" + day + "

\n" + subcontents contents = contents + subcontents self.DriesgenerateFullPage(contents,[],"recentchanges.html", "Updated and new rpms: Dries RPM Repository") def DriesgenerateDistroArchPageRpmRedirect(self,distroArch): contents = "\n" contents = contents + "\n" contents = contents + "" self.createFile(distroArch.getDistArchPackager() + "-rpms.html",contents) # also generate a page in redhat/el4/i386/ for example for path in distroArch.getAdditionalPaths(): # 1 create a .htaccess file which links release.* files in this DIR # 2 create a dir DIR/dries , DIR/dries/headers , DIR/base, DIR/RPMS.dries, DIR/SRPMS.dries DIR/RPMS.dries/repodata DIR/SRPMS.dries/repodata # 3 create a symbolic link: DIR/dries/RPMS -> ../RPMS.dries # 4 create a symbolic link: DIR/dries/SRPMS -> ../SRPMS.dries # 5 create a DIR/dries/headers/.htaccess which redirects all .hdr files and the header.info file # 6 create a DIR/base/.htaccess which redirects all pkglist.* release.* and srclist.* files # 7 create a DIR/RPMS.dries/.htaccess which redirects all .*\.rpm files # 8 create a DIR/RPMS.dries/repodata/.htaccess which redirects all filelist* other* primary* repomd* files # 9 create a DIR/SRPMS.dries/.htaccess which redirects all .*\.rpm files # 10 create a DIR/SRPMS.dries/repodata/.htaccess which redirects all filelist* other* primary* repomd* files # 11 create dirindexes in DIR, DIR/dries, DIR/dries/headers, DIR/base # 1 htcontents = "RewriteEngine on\n" + 'RewriteRule ^(release.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/$1' + "\n" self.createFile(os.path.join(path,".htaccess"), htcontents) # 2 self.createDirHierarchy(os.path.join(path,"dries/headers")) self.createDirHierarchy(os.path.join(path,"base")) self.createDirHierarchy(os.path.join(path,"RPMS.dries/repodata")) self.createDirHierarchy(os.path.join(path,"SRPMS.dries/repodata")) # 3 self.createSymbolicLink(os.path.join(path,"dries/RPMS"), "../RPMS.dries") # 4 self.createSymbolicLink(os.path.join(path,"dries/SRPMS"), "../SRPMS.dries") # 5 htcontents = "RewriteEngine on\n" + 'RewriteRule ^(.*hdr)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/dries/headers/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(header.info)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/dries/headers/$1' + "\n" self.createFile(os.path.join(path,"dries/headers/.htaccess"), htcontents) # 6 htcontents = "RewriteEngine on\n" + 'RewriteRule ^(pkglist.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/base/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(release.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/base/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(srclist.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/base/$1' + "\n" self.createFile(os.path.join(path,"base/.htaccess"), htcontents) # 7 htcontents = "RewriteEngine on\n" + 'RewriteRule ^(.*.rpm)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/RPMS.dries/$1' + "\n" self.createFile(os.path.join(path,"RPMS.dries/.htaccess"), htcontents) # 8 htcontents = "RewriteEngine on\n" + 'RewriteRule ^(filelist.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/RPMS.dries/repodata/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(other.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/RPMS.dries/repodata/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(primary.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/RPMS.dries/repodata/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(repomd.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/RPMS.dries/repodata/$1' + "\n" self.createFile(os.path.join(path,"RPMS.dries/repodata/.htaccess"), htcontents) # 9 htcontents = "RewriteEngine on\n" + 'RewriteRule ^(.*.rpm)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/SRPMS.dries/$1' + "\n" self.createFile(os.path.join(path,"SRPMS.dries/.htaccess"), htcontents) # 10 htcontents = "RewriteEngine on\n" + 'RewriteRule ^(filelist.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/SRPMS.dries/repodata/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(other.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/SRPMS.dries/repodata/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(primary.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/SRPMS.dries/repodata/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(repomd.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/SRPMS.dries/repodata/$1' + "\n" self.createFile(os.path.join(path,"SRPMS.dries/repodata/.htaccess"), htcontents) # 11 self.generateDirectoryView(path) self.generateDirectoryView(path + "/dries") self.generateDirectoryView(path + "/dries/headers") self.generateDirectoryView(path + "/base") contents = "This page now contains links to the rpms on one of the mirrors because the page is generating way too much traffic for this server.

" + contents self.DriesgenerateFullPage(contents, [distroArch.getDisplayShortName()], path + "/RPMS.dries/index.html",distroArch.getDisplayFullName() + " (" + distroArch.getDisplayShortName() + "): Dries RPM Repository") def generateDistroArchPageRpm(self,distroArch): contents = "" contents = "

Rpms for " + distroArch.getDisplayFullName() + " (" + distroArch.getDisplayShortName() + ")

" for r in distroArch.getBinaryRpms(): #linkToPackage = r.getFullUrl() #if r in self.__rpmNameToSpecSubDirName: shortName = r.getSpecRepoSpecFile().getSubDir() #linkToPackage = " - " + self.__rpmNameToSpecSubDirName[r] + "" linkToPackage = " - " + shortName + "" contents = contents + "" + r.getName() + "" + linkToPackage + "
" self.DriesgenerateFullPage(contents, [distroArch.getDisplayShortName()], distroArch.getDistArchPackager() + "-rpms.html",distroArch.getDisplayFullName() + " (" + distroArch.getDisplayShortName() + "): Dries RPM Repository") # also generate a page in redhat/el4/i386/ for example for path in distroArch.getAdditionalPaths(): # 1 create a .htaccess file which links release.* files in this DIR # 2 create a dir DIR/dries , DIR/dries/headers , DIR/base, DIR/RPMS.dries, DIR/SRPMS.dries DIR/RPMS.dries/repodata DIR/SRPMS.dries/repodata # 3 create a symbolic link: DIR/dries/RPMS -> ../RPMS.dries # 4 create a symbolic link: DIR/dries/SRPMS -> ../SRPMS.dries # 5 create a DIR/dries/headers/.htaccess which redirects all .hdr files and the header.info file # 6 create a DIR/base/.htaccess which redirects all pkglist.* release.* and srclist.* files # 7 create a DIR/RPMS.dries/.htaccess which redirects all .*\.rpm files # 8 create a DIR/RPMS.dries/repodata/.htaccess which redirects all filelist* other* primary* repomd* files # 9 create a DIR/SRPMS.dries/.htaccess which redirects all .*\.rpm files # 10 create a DIR/SRPMS.dries/repodata/.htaccess which redirects all filelist* other* primary* repomd* files # 11 create dirindexes in DIR, DIR/dries, DIR/dries/headers, DIR/base # 1 htcontents = "RewriteEngine on\n" + 'RewriteRule ^(release.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/$1' + "\n" self.createFile(os.path.join(path,".htaccess"), htcontents) # 2 self.createDirHierarchy(os.path.join(path,"dries/headers")) self.createDirHierarchy(os.path.join(path,"base")) self.createDirHierarchy(os.path.join(path,"RPMS.dries/repodata")) self.createDirHierarchy(os.path.join(path,"SRPMS.dries/repodata")) # 3 self.createSymbolicLink(os.path.join(path,"dries/RPMS"), "../RPMS.dries") # 4 self.createSymbolicLink(os.path.join(path,"dries/SRPMS"), "../SRPMS.dries") # 5 htcontents = "RewriteEngine on\n" + 'RewriteRule ^(.*hdr)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/dries/headers/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(header.info)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/dries/headers/$1' + "\n" self.createFile(os.path.join(path,"dries/headers/.htaccess"), htcontents) # 6 htcontents = "RewriteEngine on\n" + 'RewriteRule ^(pkglist.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/base/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(release.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/base/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(srclist.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/base/$1' + "\n" self.createFile(os.path.join(path,"base/.htaccess"), htcontents) # 7 htcontents = "RewriteEngine on\n" + 'RewriteRule ^(.*.rpm)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/RPMS.dries/$1' + "\n" self.createFile(os.path.join(path,"RPMS.dries/.htaccess"), htcontents) # 8 htcontents = "RewriteEngine on\n" + 'RewriteRule ^(filelist.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/RPMS.dries/repodata/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(other.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/RPMS.dries/repodata/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(primary.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/RPMS.dries/repodata/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(repomd.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/RPMS.dries/repodata/$1' + "\n" self.createFile(os.path.join(path,"RPMS.dries/repodata/.htaccess"), htcontents) # 9 htcontents = "RewriteEngine on\n" + 'RewriteRule ^(.*.rpm)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/SRPMS.dries/$1' + "\n" self.createFile(os.path.join(path,"SRPMS.dries/.htaccess"), htcontents) # 10 htcontents = "RewriteEngine on\n" + 'RewriteRule ^(filelist.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/SRPMS.dries/repodata/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(other.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/SRPMS.dries/repodata/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(primary.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/SRPMS.dries/repodata/$1' + "\n" htcontents = htcontents + 'RewriteRule ^(repomd.*)$ http://ftp.belnet.be/packages/dries.ulyssis.org/' + path + '/SRPMS.dries/repodata/$1' + "\n" self.createFile(os.path.join(path,"SRPMS.dries/repodata/.htaccess"), htcontents) # 11 self.generateDirectoryView(path) self.generateDirectoryView(path + "/dries") self.generateDirectoryView(path + "/dries/headers") self.generateDirectoryView(path + "/base") contents = "This page now contains links to the rpms on one of the mirrors because the page is generating way too much traffic for this server.

" + contents self.DriesgenerateFullPage(contents, [distroArch.getDisplayShortName()], path + "/RPMS.dries/index.html",distroArch.getDisplayFullName() + " (" + distroArch.getDisplayShortName() + "): Dries RPM Repository") def createSymbolicLink(self, filename, target): (tempdir, fname) = os.path.split(filename) dir = os.path.join(self.__Driessiterootdir, tempdir) #print dir errors = 0 try: os.makedirs(dir) except: errors = errors + 1 try: os.symlink(target, os.path.join(dir,fname)) except: errors = errors + 1 def createFile(self, filename, contents): # first make sure the directory exists (tempdir, fname) = os.path.split(filename) dir = os.path.join(self.__Driessiterootdir, tempdir) #print dir errors = 0 try: os.makedirs(dir) except: errors = errors + 1 f = open(os.path.join(dir,fname), "w") f.write(contents) f.close() def createDirHierarchy(self, path): dir = os.path.join(self.__Driessiterootdir, path) errors = 0 try: os.makedirs(dir) except: errors = errors + 1 def DriesgenerateDistroArchPageSrpmRedirect(self,distroArch): contents = "\n" contents = contents + "\n" contents = contents + "" self.createFile(distroArch.getDistArchPackager() + "-srpms.html",contents) for path in distroArch.getAdditionalPaths(): contents = "This page now contains links to the source rpms on one of the mirrors because the page is generating way too much traffic for this server.

" + contents self.DriesgenerateFullPage(contents, [distroArch.getDisplayShortName()], path + "/SRPMS.dries/index.html",distroArch.getDisplayFullName() + " (" + distroArch.getDisplayShortName() + "): Dries RPM Repository") def OLDOLDgenerateDistroArchPageSrpm(self,distroArch): contents = "" url = distroArch.rpmsUrl.replace("RPMS","SRPMS") contents = "

Srpms for " + distroArch.fullName + " (" + distroArch.displayName + ")

" for r in distroArch.rpms: linkToPackage = "" if r in self.__rpmNameToSpecSubDirName: linkToPackage = " - " + self.__rpmNameToSpecSubDirName[r] + "" contents = contents + "" + r + "" + linkToPackage + "
" self.DriesgenerateFullPage(contents, [distroArch.displayName], distroArch.getDistArchPackager() + "-srpms.html",distroArch.getDisplayFullName() + " (" + distroArch.getDisplayShortName() + "): Dries RPM Repository") for path in distroArch.getAdditionalPaths(): contents = "This page now contains links to the source rpms on one of the mirrors because the page is generating way too much traffic for this server.

" + contents self.DriesgenerateFullPage(contents, [distroArch.displayName], path + "/SRPMS.dries/index.html",distroArch.fullName + " (" + distroArch.displayName + "): Dries RPM Repository") def generatePackagesPage(self): contents = "" for i in self.__specRepo.getSpecRepositorySpecFiles(): contents = contents + "" + i.getSubDir() + "
" print contents self.DriesgenerateFullPage(contents, ["Packages"], "packages.html","List of rpm packages: Dries RPM Repository") def DriesfillFullContentsTemplate(self): self.__Driesfullcontentstemplate = self.__getFileContents("dries/fullcontentstemplate.txt") def RFfillFullContentsTemplate(self): self.__RFfullcontentstemplate = self.__getFileContents("dries/RFfullcontentstemplate.txt") def __getFileContents(self,fileName): tmp = "" f = open(fileName) l = f.readline() while l != "": tmp = tmp + l l = f.readline() f.close() return tmp def __getMenu(self,levels): self.__timer("__getMenu") menu = "" menu = menu + "General
" menu = menu + "" menu = menu + "Start
" menu = menu + "APT/YUM/Smart config
" menu = menu + "List of packages
" menu = menu + "GPG key
" menu = menu + "Mirrors
" menu = menu + "Recent changes
" menu = menu + "How you can help
" menu = menu + "Pydar2
" #menu = menu + "Rpms:
" #for k in self.__distArchPackagerLists: # if k.getPackager() == "dries": # menu = menu + "" + k.getDisplayShortName() + "
" #menu = menu + "Srpms:
" #for k in self.__distArchPackagerLists: # if k.getPackager() == "dries": # menu = menu + "" + k.getDisplayShortName().replace("rpms","srpms") + "
" menu = menu + "Thanks:
" menu = menu + "Buildsystem hosted at ithomi
" menu = menu + "Static site hosted at ULYSSIS
" menu = menu + "Primary mirrors hosted at BELNET, HEAnet, 3TI
" menu = menu + "Varia:
" menu = menu + "Random picture!
" self.__timer("__getMenu") return menu alreadyCreatedDirs = [] def RFgenerateFullPage(self,contents,levels,filename, title): self.__timer("RFGenerateFullPage") if self.__RFfullcontentstemplate == None: self.RFfillFullContentsTemplate() full = self.__RFfullcontentstemplate full = string.replace(full,"CONTENTS",contents) full = string.replace(full,"PAGETITLE", title) # first make sure the directory exists (tempdir, fname) = os.path.split(filename) dir = os.path.join(self.__RFsiterootdir, tempdir) #print dir if dir not in SiteObject.alreadyCreatedDirs: try: os.makedirs(dir) SiteObject.alreadyCreatedDirs.append(dir) except: errors = 1 f = open(os.path.join(dir,fname), "w") f.write(full) f.close() self.__timer("RFGenerateFullPage") def DriesgenerateFullPage(self, contents, levels, filename, title): self.__timer("DriesgenerateFullPage") if self.__Driesfullcontentstemplate == None: self.DriesfillFullContentsTemplate() full = self.__Driesfullcontentstemplate full = string.replace(full,"CONTENTS",contents) full = string.replace(full,"PAGETITLE", title) full = string.replace(full,"TITLEAREA", "

" + title + "

") full = string.replace(full,"BOTTOM", "Send reactions to: Dries Verachtert <dries@ulyssis.org>") #+ "
Last update on " + self.__siteValues["LASTUPDATE"]) full = string.replace(full,"MENU",self.__getMenu(levels)) for k in self.__siteValues.keys(): full = string.replace(full,k,str(self.__siteValues[k])) # first make sure the directory exists (tempdir, fname) = os.path.split(filename) dir = os.path.join(self.__Driessiterootdir, tempdir) #print dir if dir not in SiteObject.alreadyCreatedDirs: if os.path.exists(dir): SiteObject.alreadyCreatedDirs.append(dir) try: os.makedirs(dir) SiteObject.alreadyCreatedDirs.append(dir) except: errors = 1 f = open(os.path.join(dir,fname), "w") f.write(full) f.close() self.__timer("DriesgenerateFullPage") #### start of rpmforge track pages def RFgroupTagToPageName(self,groupTag): urlpart = groupTag.replace('/','-').replace(' ','').lower() return "group-" + urlpart + ".html" def DriesgroupTagToPageName(self,groupTag): urlpart = groupTag.replace('/','-').replace(' ','').lower() return "group-" + urlpart + ".php" def RFgeneratePackagesPages(self): # 1 pagina met daarop: # - de lijst van groepen # - de lijst van beginletters # 1 pagina per beginletter # 1 pagina per groep self.__timer("RFgeneratePackagesPages") groupcount = {} grouppages = {} letterpages = {} specArr = self.__storage.getNameSummaryAndGroupOfLastVersionsOfSpecFiles('rpmforge') for specHash in specArr: name = specHash['name'] summary = specHash['summary'] group = specHash['group'] #print "name: " + str(name) beginletter = name[0].capitalize() #print "name: "+ name + ",beginletter:"+ beginletter + ",group:"+ group currentgroupcontents = "" if group in grouppages.keys(): currentgroupcontents = grouppages[group] groupcount[group] = groupcount[group] + 1 else: currentgroupcontents = "

Group " + group + "

" groupcount[group] = 1 currentgroupcontents = currentgroupcontents + "" + name + ": " + summary + "
" grouppages[group] = currentgroupcontents currentlettercontents = "" if beginletter in letterpages.keys(): currentlettercontents = letterpages[beginletter] else: currentlettercontents = "

Letter " + beginletter + "

" currentlettercontents = currentlettercontents + "" + name + ": " + summary + "
" letterpages[beginletter] = currentlettercontents contents = "" contents = contents + "

Packages sorted by group

" groupcnt = 0 keys = grouppages.keys() keys.sort() for key in keys: contents = contents + "" + key + "
" self.RFgenerateFullPage(grouppages[key],["Packages","User track: list of packages"], "user/packages/" + self.RFgroupTagToPageName(key),key + " RPM packages for Red Hat / Fedora / Aurora") groupcnt = groupcnt + 1 contents = contents + "

Packages sorted by first letter

" lettercnt = 0 keys = letterpages.keys() keys.sort() for key in keys: contents = contents + "" + key + " " self.RFgenerateFullPage(letterpages[key],["Packages","User track: list of packages"], "user/packages/packages-" + key.lower() + ".php","Packages starting with " + key + ": RPM packages for Red Hat / Fedora / Aurora") lettercnt = lettercnt + 1 contents = contents + "
" self.RFgenerateFullPage(contents,["Packages","User track: list of packages"], "user/packages/index.php","RPM packages for Red Hat / Fedora / Aurora") self.__timer("RFgeneratePackagesPages") def DriesgeneratePackagesPages(self): # 1 pagina met daarop: # - de lijst van groepen # - de lijst van beginletters # 1 pagina per beginletter # 1 pagina per groep self.__timer("DriesgeneratePackagesPages") groupcount = {} grouppages = {} letterpages = {} specArr = self.__storage.getNameSummaryAndGroupOfLastVersionsOfSpecFiles('rpmforge') for specHash in specArr: name = specHash['name'] summary = specHash['summary'] group = specHash['group'] #print "name: " + str(name) beginletter = name[0].capitalize() #print "name: "+ name + ",beginletter:"+ beginletter + ",group:"+ group currentgroupcontents = "" if group in grouppages.keys(): currentgroupcontents = grouppages[group] groupcount[group] = groupcount[group] + 1 else: currentgroupcontents = "

Group " + group + "

" groupcount[group] = 1 currentgroupcontents = currentgroupcontents + "" + name + ": " + summary + "
" grouppages[group] = currentgroupcontents currentlettercontents = "" if beginletter in letterpages.keys(): currentlettercontents = letterpages[beginletter] else: currentlettercontents = "

Letter " + beginletter + "

" currentlettercontents = currentlettercontents + "" + name + ": " + summary + "
" letterpages[beginletter] = currentlettercontents contents = "" contents = contents + "

Packages sorted by group

" groupcnt = 0 keys = grouppages.keys() keys.sort() for key in keys: contents = contents + "" + key + "
" self.DriesgenerateFullPage(grouppages[key],["Packages","list of packages"], "packages/" + self.DriesgroupTagToPageName(key),key + " RPM packages for Red Hat / Fedora / Aurora") groupcnt = groupcnt + 1 contents = contents + "

Packages sorted by first letter

" lettercnt = 0 keys = letterpages.keys() keys.sort() for key in keys: contents = contents + "" + key + " " self.DriesgenerateFullPage(letterpages[key],["Packages","User track: list of packages"], "packages/packages-" + key.lower() + ".html","Packages starting with " + key + ": RPM packages for Red Hat / Fedora / Aurora") lettercnt = lettercnt + 1 contents = contents + "
" self.DriesgenerateFullPage(contents,["Packages","User track: list of packages"], "packages/index.html","RPM packages for Red Hat / Fedora / Aurora") self.__timer("DriesgeneratePackagesPages") def RFgenerateUserPackagePage(self, specRepoSpecFile, distNameValueHash): shortName = specRepoSpecFile.getSubDir() contents = "" #contents = contents + "developer page of " + shortName + " | " #contents = contents + "packager page of " + shortName + "
" myTempHash = distNameValueHash[defaultQueryDistroArch] if 'NAME' not in myTempHash.keys(): print "NO name in for spec " + specRepoSpecFile.getSubDir() return name = myTempHash['NAME'] summary = myTempHash['SUMMARY'] group = myTempHash['GROUP'] url = myTempHash['URL'] description = myTempHash['DESCRIPTION'] version = myTempHash['VERSION'] release = myTempHash['RELEASE'] authority = myTempHash['# Authority'] license = myTempHash['LICENSE'] screenshot = myTempHash['# Screenshot'] #for h in distNameValueArr: # if h['name'] == "NAME": # name = h['value'] # if h['name'] == "SUMMARY": # summary = h['value'] # if h['name'] == "GROUP": # group = h['value'] # if h['name'] == "URL": # url = h['value'] # if h['name'] == "DESCRIPTION": # description = h['value'] # if h['name'] == "VERSION": # version = h['value'] # if h['name'] == "RELEASE": # release = h['value'] # if h['name'] == "# Authority": # authority = h['value'] # if h['name'] == "LICENSE": # license = h['value'] # if h['name'] == "# Screenshot": # screenshot = h['value'] contents = contents + "" + summary + "" contents = contents + "
" + description.strip() + "
" contents = contents + "" contents = contents + "Latest release: " + version + "-" + release + "

" contents = contents + "Website: " + url + "
" contents = contents + "License: " + license + "
" contents = contents + "Group: " + group + "
" contents = contents + "Maintainer: " + authority + "
" if screenshot != "": contents = contents + "Screenshot: " + screenshot + "
" contents = contents + "
" specRepoSpecFile.binaryrpms.sort(lambda x,y : cmp((y.getVersion(),y.getRelease(),y.getDistArchPackagerList().getDistArch()),(x.getVersion(),x.getRelease(),x.getDistArchPackagerList().getDistArch()))) #specRepoSpecFile.binaryrpms.sort(lambda y,x : cmp(y.verrely.distroArchObject.distroArch+"="+y.name+"="+y.distroArchObject.rpmsUrl, x.distroArchObject.distroArch+"=" + x.name+"="+x.distroArchObject.rpmsUrl)) lastda = "" lastdadesc = "" lastverrel = "" for b in specRepoSpecFile.binaryrpms: if b.getName().find('.src.rpm') < 0 and b.getName().find('-debuginfo-') < 0: if lastverrel != b.getVerRel(): lastverrel = b.getVerRel() contents = contents + "

Release " + lastverrel + "

\n" if lastda != b.getDistArchPackagerList().getDistArch(): lastda = b.getDistArchPackagerList().getDistArch() lastdadesc = b.getDistArchPackagerList().getDisplayFullName() contents = contents + "

" + lastdadesc + " (" + lastda + ")

\n" url = b.getDistArchPackagerList().getRpmsUrl() + b.getName() contents = contents + "" + b.getName() + " (" + b.getDistArchPackagerList().getPackager() + ")
\n" self.RFgenerateFullPage(contents,["Packages","User track: " + shortName], "user/packages/" + shortName + "/index.php", shortName + " RPM package for Red Hat / Fedora / Aurora") def RFgenerateDeveloperPackagePage(self, specRepoSpecFile,distNameValueHash): shortName = specRepoSpecFile.getSubDir() contents = "" contents = contents + "user page of " + shortName + " | " contents = contents + "packager page of " + shortName + "
" myTempHash = distNameValueHash[defaultQueryDistroArch] if 'NAME' not in myTempHash.keys(): print "NO name in for spec " + specRepoSpecFile.getSubDir() return name = myTempHash['NAME'] summary = myTempHash['SUMMARY'] group = myTempHash['GROUP'] url = myTempHash['URL'] description = myTempHash['DESCRIPTION'] version = myTempHash['VERSION'] release = myTempHash['RELEASE'] authority = myTempHash['# Authority'] license = myTempHash['LICENSE'] screenshot = myTempHash['# Screenshot'] epoch = myTempHash['EPOCH'] contents = contents + "Name: " + name + "
" contents = contents + "Summary: " + summary + "
" contents = contents + "Authority: " + authority + "
" contents = contents + "Version: " + version + "
" contents = contents + "Release: " + release + "
" contents = contents + "Epoch: " + epoch + "
" contents = contents + "License: " + license + "
" contents = contents + "Group: " + group + "
" contents = contents + "URL: " + url + "
" contents = contents + "Description:
" + description + "
" if screenshot != "": contents = contents + "Screenshot: " + screenshot + "
" self.RFgenerateFullPage(contents,["Packages","User track: " + shortName], "developer/packages/" + shortName + "/index.php", shortName + " RPM package for Red Hat / Fedora / Aurora") def RFgeneratePackagerPackagePage(self, specRepoSpecFile): shortName = specRepoSpecFile.getSubDir() contents = "" contents = contents + "user page of " + shortName + " | " contents = contents + "developer page of " + shortName + "
" self.RFgenerateFullPage(contents,["Packages","User track: " + shortName], "packager/packages/" + shortName + "/index.php", shortName + " RPM package for Red Hat / Fedora / Aurora") #### end of rpmforge track pages def generateOnePackagePageVersionPage(self,specRepoSpecFile, versionId): shortName = specRepoSpecFile.getSubDir() contents = "" contents = contents + "Back to the " + shortName + " rpms
" contents = contents + "versionId " + str(versionId) + ":
" contents = contents + "" # " arr = self.__storage.getTagsOfSpecFileVersion(versionId) latesttag = "" latestvalue = "" diststring = "" lastdiststringline = "" for h in arr: if (h["name"] == latesttag) and (h["value"] == latestvalue): diststring = diststring + h["distroarchtag"] + " " else: if latesttag != "": if lastdiststringline != diststring: contents = contents + "" lastdiststringline = diststring contents = contents + "" contents = contents + "\n" diststring = h["distroarchtag"] latesttag = h["name"] latestvalue = h["value"] if latesttag != "": if lastdiststringline != diststring: contents = contents + "" lastdiststringline = diststring contents = contents + "" contents = contents + "\n" contents = contents + "
Distro idsTagValue
Distroarch ids: " + diststring + "
" + latesttag + "" + latestvalue + "
Distroarch ids: " + diststring + "
" + latesttag + "" + latestvalue + "
" self.DriesgenerateFullPage(contents,["Packages", shortName, "Release " + str(versionId) + " of " + shortName], "packages/" + shortName + "/" + shortName + "-version-" + str(versionId) + ".html", shortName + " spec file, version " + str(versionId)) def generateOnePackagePageSpecPage(self,specRepoSpecFile): shortName = specRepoSpecFile.getSubDir() contents = "" contents = contents + "Back to the " + shortName + " rpms
" contents = contents + "

Current spec in pydar2:


" contents = contents + "
"
        contents = contents + self.__getFileContents(specRepoSpecFile.getFullPath())
        contents = contents + "
" self.DriesgenerateFullPage(contents, ["Packages",shortName, shortName + " spec file"], "packages/" + shortName + "/" + shortName + "-spec.html", shortName + " spec file : Dries RPM Repository") htcontents = "RewriteEngine on\n" + 'RewriteRule ^.*spec$ ' + shortName + "-spec.html" + "\n" self.createFile("packages/" + shortName + "/.htaccess", htcontents) def getDistroNameFromRpmName(self, rpm): for distro in self.__rpmlists: for suf in distro.suffixes: if rpm.rfind(suf) > 0: return distro.fullName return "unknown" def generateOnePackagePageFirstPage(self, specRepoSpecFile, versions, distNameValueHash): shortName = specRepoSpecFile.getSubDir() contents = "" contents = contents + "

General info:

" myTempHash = distNameValueHash[defaultQueryDistroArch] if 'NAME' not in myTempHash.keys(): print "NO name in for spec " + specRepoSpecFile.getSubDir() return name = myTempHash['NAME'] summary = myTempHash['SUMMARY'] group = myTempHash['GROUP'] url = myTempHash['URL'] description = myTempHash['DESCRIPTION'] version = myTempHash['VERSION'] release = myTempHash['RELEASE'] authority = myTempHash['# Authority'] license = myTempHash['LICENSE'] screenshot = myTempHash['# Screenshot'] epoch = myTempHash['EPOCH'] upstream = myTempHash['# Upstream'] vendor = myTempHash['VENDOR'] packager = myTempHash['PACKAGER'] contents = contents + "Name: " + name + "
" contents = contents + "Summary: " + summary + "
" contents = contents + "Authority: " + authority + "
" contents = contents + "Upstream: " + upstream + "
" contents = contents + "Version: " + version + "
" contents = contents + "Release: " + release + "
" contents = contents + "Epoch: " + epoch + "
" contents = contents + "License: " + license + "
" contents = contents + "Group: " + group + "
" contents = contents + "URL: " + url + "
" contents = contents + "Description:
" + description + "
" if screenshot != "": contents = contents + "Screenshot: " + screenshot + "
" contents = contents + "

Rpms:

" #specRepoSpecFile.binaryrpms.sort(lambda x,y : cmp((y.version,y.release,y.getDistArchPackagerList().getDistArch()),(x.version,x.release,x.getDistArchPackagerList().getDistArch()))) specRepoSpecFile.binaryrpms.sort(lambda x,y : cmp((y.getVersion(),y.getRelease(),y.getDistArchPackagerList().getDistArch()),(x.getVersion(),x.getRelease(),x.getDistArchPackagerList().getDistArch()))) #specRepoSpecFile.binaryrpms.sort(lambda y,x : cmp(y.verrely.getDistArchPackagerList().getDistArch()+"="+y.name+"="+y.getDistArchPackagerList().getRpmsUrl(), x.getDistArchPackagerList().getDistArch()+"=" + x.name+"="+x.getDistArchPackagerList().getRpmsUrl())) lastda = "" lastdadesc = "" lastverrel = "" for b in specRepoSpecFile.binaryrpms: if b.getName().find('.src.rpm') < 0 and b.getName().find('-debuginfo-') < 0 and b.getDistArchPackagerList().getPackager() == "dries": if lastverrel != b.getVerRel(): lastverrel = b.getVerRel() contents = contents + "

Release " + lastverrel + "

\n" if lastda != b.getDistArchPackagerList().getDistArch(): lastda = b.getDistArchPackagerList().getDistArch() lastdadesc = b.getDistArchPackagerList().getDisplayFullName() contents = contents + "

" + lastdadesc + " (" + lastda + ")

\n" url = b.getDistArchPackagerList().getRpmsUrl() + b.getName() contents = contents + "" + b.getName() + "
\n" # (" + b.getDistArchPackagerList().getPackager() + ")
\n" if len(specRepoSpecFile.sourcerpms) > 0: contents = contents + "

Source rpms:

" for b in specRepoSpecFile.sourcerpms: if b.getDistArchPackagerList().getPackager() == "dries": url = b.getDistArchPackagerList().getRpmsUrl() + b.getName() contents = contents + "" + b.getName() + " (" + b.getDistArchPackagerList().getDistArch() + ")
\n" # for f in specRepoSpecFile.rpmfilenames: # #print f.rfind("/") , len(f) # short = f[f.rfind("/") +1: len(f)] # distroName = self.getDistroNameFromRpmName(short) # contents = contents + "" + short + "   " + distroName + "
" # contents = contents + "

Srpms:

" # for f in specRepoSpecFile.srpmfilenames: # short = f[f.rfind("/")+1: len(f)] # distroName = self.getDistroNameFromRpmName(short) # contents = contents + "" + short + "   " + distroName + "
" contents = contents + "

Spec info:

" contents = contents + "Spec filename: " + specRepoSpecFile.getFileName() + "
" contents = contents + "View spec: " + specRepoSpecFile.getSubDir() + " spec file
" svnUrl = "http://svn.rpmforge.net/svn/trunk/rpms/" + specRepoSpecFile.getSubDir() + "/" + specRepoSpecFile.getFileName() contents = contents + "Rpmforge Subversion URL: " + svnUrl + "
" contents = contents + "

Pydar2 info:

" contents = contents + "Id in db: " + str(specRepoSpecFile.getId()) + "
" contents = contents + "Checksum: " + specRepoSpecFile.getCheckSum() + "
" contents = contents + "

Versions in pydar2:

" for versionId in versions: contents = contents + "version " + str(versionId) + " of " + shortName + "
" self.DriesgenerateFullPage(contents, ["Packages",shortName + " RPM"], "packages/" + shortName + "/info.html", shortName + " RPM : Dries RPM Repository") class TmpOptions: def __init__(self): self.masterconfig = None c = Config.getInstance() c.specifyGetOptOptions(TmpOptions()) c.getSpecRepositoryList().updateAllFileLists() r = c.getSpecRepositoryList().getSpecRepositoryByName("rpmforge") RpmforgeSite(r,False,True,True)