summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--patchtracker/Patch.py11
-rw-r--r--patchtracker/urls.py7
-rw-r--r--patchtracker/views.py33
-rw-r--r--templates/patch_view.html24
4 files changed, 71 insertions, 4 deletions
diff --git a/patchtracker/Patch.py b/patchtracker/Patch.py
index 6533910..09f4911 100644
--- a/patchtracker/Patch.py
+++ b/patchtracker/Patch.py
@@ -2,6 +2,9 @@ import sys
import os
import errno
from glob import glob
+import pygments
+import pygments.lexers
+import pygments.formatters
import tarfile
class Diffstat:
@@ -39,6 +42,14 @@ class Patch:
def diffstat(self):
return Diffstat(self)
+ def highlight(self):
+ for enc in ['utf-8', 'latin-1']:
+ try:
+ return pygments.highlight(str(self).decode(enc), pygments.lexers.DiffLexer(),
+ pygments.formatters.HtmlFormatter(style='colorful', noclasses=True, encoding=enc, nobackground=True))
+ except UnicodeDecodeError:
+ pass
+
class GenericPatchSeries (list):
def blank(self):
self.names = []
diff --git a/patchtracker/urls.py b/patchtracker/urls.py
index 422a2a1..23992f4 100644
--- a/patchtracker/urls.py
+++ b/patchtracker/urls.py
@@ -3,6 +3,9 @@ import views
urlpatterns = patterns('',
url(r'^package/(?P<package>\w+)/(?P<version>[^/]+)$',
- views.package_vers,
- name='user_profile')
+ views.package_vers),
+ url(r'^patch/series/dl/(?P<package>\w+)/(?P<version>[^/]+)/(?P<patch>[^/]*)$',
+ views.download_series_patch),
+ url(r'^patch/series/view/(?P<package>\w+)/(?P<version>[^/]+)/(?P<patch>[^/]*)$',
+ views.view_series_patch),
)
diff --git a/patchtracker/views.py b/patchtracker/views.py
index e24ba1b..eac4e89 100644
--- a/patchtracker/views.py
+++ b/patchtracker/views.py
@@ -1,11 +1,13 @@
import os
-import django.template
+import django.http
import django.shortcuts
+import django.template
-import models
+import DebTarHandler
import DiffGzHandler
import Conf
+import models
def package_vers(request, package, version):
pkg = models.SourcePackage.objects.get( name=package, version=version )
@@ -18,3 +20,30 @@ def package_vers(request, package, version):
extra = { 'pkg':pkg, 'ctx':ctx, 'conf':Conf, 'diffhandler':diffhandler }
return django.shortcuts.render_to_response(tmpl, extra, context_instance=ctx)
+def download_series_patch(request, package, version, patch):
+ pkg = models.SourcePackage.objects.get( name=package, version=version )
+ diffhandler = None
+ if pkg.diffgz_name:
+ dgz = os.sep.join([Conf.archive_root, pkg.loc, pkg.diffgz_name])
+ diffhandler = DiffGzHandler.DiffGzHandler(dgz)
+ elif pkg.debtar_name:
+ dtar = os.sep.join([Conf.archive_root, pkg.loc, pkg.debtar_name])
+ diffhandler = DebTarHandler(dtar)
+ patchContents = diffhandler.series().fetch(patch)
+ return django.http.HttpResponse(patchContents, mimetype="text/plain")
+
+def view_series_patch(request, package, version, patch):
+ pkg = models.SourcePackage.objects.get( name=package, version=version )
+ ctx = django.template.RequestContext(request)
+ tmpl = 'patch_view.html'
+ diffhandler = None
+ if pkg.diffgz_name:
+ dgz = os.sep.join([Conf.archive_root, pkg.loc, pkg.diffgz_name])
+ diffhandler = DiffGzHandler.DiffGzHandler(dgz)
+ elif pkg.debtar_name:
+ dtar = os.sep.join([Conf.archive_root, pkg.loc, pkg.debtar_name])
+ diffhandler = DebTarHandler(dtar)
+ patchContents = diffhandler.series().fetch(patch)
+ extra = { 'pkg':pkg, 'patch':patch, 'patchContents':patchContents,
+ 'patchType':'series', 'conf':Conf }
+ return django.shortcuts.render_to_response(tmpl, extra, context_instance=ctx)
diff --git a/templates/patch_view.html b/templates/patch_view.html
new file mode 100644
index 0000000..b4b50e0
--- /dev/null
+++ b/templates/patch_view.html
@@ -0,0 +1,24 @@
+{% extends "base.html" %}
+{% block title %}
+Patch information for {{ pkg.name }} ({{ pkg.version }}) {{ patch }}
+{% endblock %}
+{% block content %}
+ <h1>{{ pkg.name }} ({{ pkg.version }}) {{ patch }}</h1>
+ <h2>Summary</h2>
+ <div>
+ <code class="diffstat">
+ <pre>
+{{ patchContents.diffstat|escape }}
+ </pre>
+ </code>
+ </div>
+ <div>
+ <a href="{{ conf.root_url }}/patch/{{ patchType }}/dl/{{ pkg.name }}/{{ pkg.version }}/{{ patch }}">
+ download this patch
+ </a>
+ </div>
+ <h2>Patch contents</h2>
+ <div class="patch">
+{{ patchContents.highlight|safe }}
+ </div>
+{% endblock %}