summaryrefslogtreecommitdiff
path: root/gen-patch-info.py
diff options
context:
space:
mode:
authorSean Finney <seanius@debian.org>2008-06-04 00:21:45 +0200
committerSean Finney <seanius@debian.org>2008-06-04 00:21:45 +0200
commitadb7a8dcacbbb9e147f5306b6632c9c8b4bd0088 (patch)
tree3385daa7a161a326ce24dfee7b27c54f49f95c2d /gen-patch-info.py
parent1b16f0f567c163cef3da20b97f876003cd9ade61 (diff)
downloadpatch-tracker-adb7a8dcacbbb9e147f5306b6632c9c8b4bd0088.tar.gz
split up / modularize python code just a bit
Diffstat (limited to 'gen-patch-info.py')
-rwxr-xr-xgen-patch-info.py217
1 files changed, 5 insertions, 212 deletions
diff --git a/gen-patch-info.py b/gen-patch-info.py
index 59c56eb..1a84372 100755
--- a/gen-patch-info.py
+++ b/gen-patch-info.py
@@ -10,224 +10,17 @@ from debian_bundle import deb822
from Cheetah.Template import Template
from Cheetah.Compiler import Compiler
-class Conf:
- archive_root = '/scratch/debian-archive/debian'
- archive_root_url = 'ftp://ftp.se.debian.org/debian'
- output_dir = '/scratch/patches'
- template_dir = './templates'
- static_dir = './static'
- root_url = 'http://people.debian.org/~seanius/pts/patches'
-
-class Archive:
- root = None
- distsdir = None
-
- def __init__(self, dir):
- self.root = dir
- self.distsdir = os.sep.join([dir, "dists"])
-
- def suites(self):
- for s in os.listdir(self.distsdir):
- yield s
-
- def components(self, suite):
- f = file(self.distsdir + os.sep + os.sep.join([suite, "Release"]))
- rel = deb822.Release(f)
- for comp in rel['Components'].split(' '):
- yield comp
-
- def sourcepackages(self, suite, component):
- sfile=os.sep.join([self.distsdir,suite,component,"/source/Sources.gz"])
- for ent in deb822.Sources.iter_paragraphs(GzipFile(sfile)):
- yield SourcePackage(ent)
-
- def __str__(self):
- return "Archive rooted at "+self.root
-
-class PageWriter:
- def __init__(self, filename, template):
- try:
- os.makedirs(os.path.dirname(filename))
- except OSError, e:
- if e.errno != errno.EEXIST:
- raise e
- o = file(filename, "w")
- o.write(str(template))
- o.close()
-
-class SourcePackage:
- name = None
- format = None
- diffgz = None
- loc = None
- type = "Native"
- version = None
- seriespatches = {}
- directpatches = []
- # todo
- vcs = {}
-
- def __init__(self, info):
- self.name = info['Package']
- self.format = info['Format']
- self.loc = info['Directory']
- self.version = info['Version']
-
- for f in info['Files']:
- if fnmatch(f['name'], '*.diff.gz'):
- self.diffgz=f
- self.type = "Debian-diff"
-
- if self.diffgz != None:
- self.debianonlydiff = "_".join([self.name, self.version, "debianonly.diff"])
- self.nondebiandiff = "_".join([self.name, self.version, "nondebian.diff"])
-
- def idx(self):
- name = str(self)
- if len(name) < 4 or name[0:3] != "lib":
- return name[0]
- else:
- return name[0:4]
-
- ## XXX okay, all of this could be made quite a bit cleaner
- def diff_series(self, outdir):
- if self.diffgz:
- debdiff = os.sep.join([outdir, self.debianonlydiff])
- seriesdir = os.sep.join([outdir, "series"])
- try:
- os.mkdir(os.sep.join([outdir,"series"]))
- except OSError, e:
- if e.errno != errno.EEXIST:
- raise e
- os.system("filterdiff -p 1 -i 'debian/patches/*' "+debdiff+"| ( cd "+
- seriesdir+"; patch -s )")
- for (blah,blahblah,files) in os.walk(seriesdir):
- try:
- files.remove('series')
- files.remove('00list')
- except:
- pass
- for f in files:
- p = os.sep.join([seriesdir, f])
- # get the info for summary generation
- fd = os.popen("diffstat "+p)
- self.seriespatches[f] = fd.read()
- fd.close()
- os.system("source-highlight -s diff -f xhtml -i "+p+" -o "+p+".html")
-
- def diff_debiandir(self, outdir):
- try:
- src = os.sep.join([Conf.archive_root, self.loc, self.diffgz['name']])
- dst = os.sep.join([outdir, self.debianonlydiff])
- os.system("filterdiff -z -p 1 -i 'debian/*' "+src+" > "+dst)
- os.system("source-highlight -s diff -f xhtml -i "+dst+" -o "+dst+".html")
- # in the case of native packages there is no diffgz
- except TypeError:
- pass
-
- def diff_nondebiandir(self, outdir):
- try:
- src = os.sep.join([Conf.archive_root, self.loc, self.diffgz['name']])
- dst = os.sep.join([outdir, self.nondebiandiff])
- os.system("filterdiff -z -p 1 -x 'debian/*' "+src+" > "+dst)
- os.system("source-highlight -s diff -f xhtml -i "+dst+" -o "+dst+".html")
- # in the case of native packages there is no diffgz
- except TypeError:
- pass
-
- def __str__(self):
- return self.name
-
-class OurTemplate(Template):
- def __init__(self, file):
- Template.__init__(self, file=file, searchList={"conf":Conf})
-
-class PackageVersTemplate(OurTemplate):
- src = None
- suite = None
-
- def __init__(self, srcpkg, suite):
- self.src = srcpkg
- self.suite = suite
- tpl=os.sep.join([Conf.template_dir, "package_vers.tmpl"])
- OurTemplate.__init__(self, file=tpl)
-
-class PackageVersWriter(PageWriter):
- def __init__(self, template):
- dstdir = os.sep.join([Conf.output_dir, "packages", template.src.name, template.src.version])
- try:
- os.makedirs(dstdir)
- except OSError, e:
- if e.errno != errno.EEXIST:
- raise e
- template.src.diff_debiandir(dstdir)
- template.src.diff_nondebiandir(dstdir)
- template.src.diff_series(dstdir)
- dst = os.sep.join([dstdir, "index.html"])
- PageWriter.__init__(self, dst, template)
-
-class SourcePackageIndex:
- pkgs = {}
-
- def ins(self, srcpkg, rel):
- idx = srcpkg.idx()
- if not self.pkgs.has_key(idx):
- self.pkgs[idx] = {}
- if not self.pkgs[idx].has_key(srcpkg.name):
- self.pkgs[idx][srcpkg.name] = {}
- if not self.pkgs[idx][srcpkg.name].has_key(rel):
- self.pkgs[idx][srcpkg.name][rel] = srcpkg
-
- def indices(self):
- for k,v in self.pkgs.iteritems():
- yield (k,v)
-
-class FrontPageTemplate(OurTemplate):
- allindex = None
- relindices = []
-
- def __init__(self, allindex, release_indices=[]):
- tpl = os.sep.join([Conf.template_dir, "frontpage.tmpl"])
- OurTemplate.__init__(self, file=tpl)
- self.allindex = allindex
- self.relindices = release_indices
-
-class FrontPageWriter(PageWriter):
- def __init__(self, template):
- dest = os.sep.join([Conf.output_dir, "index.html"])
- PageWriter.__init__(self, dest, template)
-
-class LetterTocTemplate(OurTemplate):
- idx = None
- pkgs = None
- dists = None
-
- def releases(self):
- return dists
-
- def __init__(self, letter, collection):
- self.pkgs = collection
- self.idx = letter
- self.dists = {}
- for name,packagelist in collection.iteritems():
- for d in packagelist.iterkeys():
- self.dists[d] = True
- tpl = os.sep.join([Conf.template_dir, "letter_toc.tmpl"])
- OurTemplate.__init__(self, file=tpl)
-
-class LetterTocWriter(PageWriter):
-
- def __init__(self, template):
- dest = os.sep.join([Conf.output_dir, "index", template.idx, "index.html"])
- PageWriter.__init__(self, dest, template)
+import patchtracker.Conf as Conf
+from patchtracker.Writers import LetterTocWriter, LetterTocTemplate, FrontPageWriter, FrontPageTemplate, PackageVersWriter, PackageVersTemplate
+from patchtracker.SourceArchive import Archive, SourcePackage, SourcePackageIndex
if __name__ == '__main__':
os.system("cheetah compile templates/skeleton")
a = Archive(Conf.archive_root)
# just for now until development stablizes
- os.system("rm -rf "+Conf.output_dir)
- os.mkdir(Conf.output_dir)
+ #os.system("rm -rf "+Conf.output_dir)
+ #os.mkdir(Conf.output_dir)
print a
master_index = SourcePackageIndex()