summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Finney <seanius@debian.org>2008-06-02 02:14:21 +0200
committerSean Finney <seanius@debian.org>2008-06-02 02:14:21 +0200
commit8ae6627249e5d6a7fc02d3280dc3818fd64f21aa (patch)
treeb173894c196823cc58500a3841f41a1850c06917
parentd84c4c56500e5de9109507cf46476505d4b1d0a9 (diff)
downloadpatch-tracker-8ae6627249e5d6a7fc02d3280dc3818fd64f21aa.tar.gz
first shot at patch handling/mangling/markup
-rw-r--r--README4
-rwxr-xr-xgen-patch-info.py74
-rw-r--r--static/css/patches.css4
-rwxr-xr-xtemplates/package-vers.tmpl30
4 files changed, 95 insertions, 17 deletions
diff --git a/README b/README
index cffbb16..23f3c70 100644
--- a/README
+++ b/README
@@ -6,9 +6,11 @@ setup instructions
required software:
+(for now) source-highlight
+(for now) patchutils
python
python-cheetah
-python-pygments
+(eventually) python-pygments
python-debian
(optional) reprepro
something providing an httpd
diff --git a/gen-patch-info.py b/gen-patch-info.py
index 74d819f..f156126 100755
--- a/gen-patch-info.py
+++ b/gen-patch-info.py
@@ -11,6 +11,7 @@ from Cheetah.Template import Template
class Conf:
archive_root = '/scratch/debian-archive/debian'
+ archive_root_url = '/debian'
output_dir = '/scratch/patches'
template_dir = './templates'
static_dir = './static'
@@ -60,7 +61,7 @@ class SourcePackage:
loc = None
type = "Native"
version = None
- seriespatches = []
+ seriespatches = {}
directpatches = []
# todo
vcs = {}
@@ -76,6 +77,10 @@ class SourcePackage:
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":
@@ -83,6 +88,52 @@ class SourcePackage:
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
@@ -102,13 +153,18 @@ class PackageVersTemplate(OurTemplate):
class PackageVersWriter(PageWriter):
def __init__(self, template):
- dst = os.sep.join([Conf.output_dir, "packages", template.src.name, template.src.version, "index.html"])
+ 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)
- (tfd, tfn) = tempfile.mkstemp()
- os.close(tfd)
- #os.system("filterdiff -z -p 1 -x 'debian/*' blah > farsar")
-
class SourcePackageIndex:
pkgs = {}
@@ -166,6 +222,11 @@ class LetterTocWriter(PageWriter):
if __name__ == '__main__':
a = Archive(Conf.archive_root)
+
+ # just for now until development stablizes
+ os.system("rm -rf "+Conf.output_dir)
+ os.mkdir(Conf.output_dir)
+
print a
master_index = SourcePackageIndex()
for s in a.suites():
@@ -174,7 +235,6 @@ if __name__ == '__main__':
print "\tcomponent:",c
for p in a.sourcepackages(s, c):
print "\t\tpackage:",p
- print "\t\tdiff:",p.diffgz
PackageVersWriter(PackageVersTemplate(p, s))
master_index.ins(p,s)
diff --git a/static/css/patches.css b/static/css/patches.css
index a055320..6c7509e 100644
--- a/static/css/patches.css
+++ b/static/css/patches.css
@@ -1,3 +1,7 @@
+th {
+ background-color: #ddd;
+}
+
table.summary {
border: 1px solid;
}
diff --git a/templates/package-vers.tmpl b/templates/package-vers.tmpl
index ac08db2..17689c7 100755
--- a/templates/package-vers.tmpl
+++ b/templates/package-vers.tmpl
@@ -31,21 +31,31 @@
</table>
#if $src.diffgz
- <h2> Entire "Debian diff" Information </h2>
+ <h2> "Debian diff" Information </h2>
<table class="patchlisting">
<tr>
<th>Diff file</th>
- <td>
- <a href="$conf.root_url/$src.loc/$src.diffgz['name']">
+ <td colspan="2">
+ <a href="$conf.archive_root_url/$src.loc/$src.diffgz['name']">
$src.diffgz['name']
</a>
</td>
</tr>
<tr>
- <th>Size</th><td>$src.diffgz['size']</td>
+ <th>Size</th><td colspan="2">$src.diffgz['size']</td>
</tr>
<tr>
- <th>MD5sum</th><td>$src.diffgz['md5sum']</td>
+ <th>MD5sum</th><td colspan="2">$src.diffgz['md5sum']</td>
+ </tr>
+ <tr>
+ <th>./debian only changes</th>
+ <td><a href="$conf.root_url/packages/$src.name/$src.version/${src.debianonlydiff}.html">view</a></td>
+ <td><a href="$conf.root_url/packages/$src.name/$src.version/$src.debianonlydiff">download</a></td>
+ </tr>
+ <tr>
+ <th>non packaging (i.e. not ./debian) changes</th>
+ <td><a href="$conf.root_url/packages/$src.name/$src.version/${src.nondebiandiff}.html">view</a></td>
+ <td><a href="$conf.root_url/packages/$src.name/$src.version/$src.nondebiandiff">download</a></td>
</tr>
</table>
#end if
@@ -63,6 +73,7 @@
</table>
#end if
+#if $src.seriespatches
<h2> "series" style patches </h2>
<table class="patchlisting">
<tr>
@@ -71,14 +82,15 @@
<th>view</th>
<th>raw</th>
</tr>
-#for $p in $src.seriespatches
+#for $p,$d in $src.seriespatches.iteritems()
<tr>
<td>$p</td>
- <td>info</td>
- <td><a href="link">view</a></td>
- <td><a href="link">download</a></td>
+ <td class="diffstat"><pre><code>$d</code></pre></td>
+ <td><a href="$conf.root_url/packages/$src.name/$src.version/series/${p}.html">view</a></td>
+ <td><a href="$conf.root_url/packages/$src.name/$src.version/series/${p}">download</a></td>
</tr>
#end for
</table>
+#end if
</body>
</html>