diff options
author | Sean Finney <seanius@debian.org> | 2010-05-13 12:17:57 +0200 |
---|---|---|
committer | Sean Finney <seanius@debian.org> | 2010-05-13 12:17:57 +0200 |
commit | 9649bd16ef6cadc96c2c6e96f3449aa62646df66 (patch) | |
tree | a79f67398b8b36bdc4a46a5cf1a3aae9398b2ece /patchtracker | |
parent | e2a079386b6f95deeadcea4cd3e2a04fafbf467a (diff) | |
download | patch-tracker-9649bd16ef6cadc96c2c6e96f3449aa62646df66.tar.gz |
Implement series patch download and view in django
Diffstat (limited to 'patchtracker')
-rw-r--r-- | patchtracker/Patch.py | 11 | ||||
-rw-r--r-- | patchtracker/urls.py | 7 | ||||
-rw-r--r-- | patchtracker/views.py | 33 |
3 files changed, 47 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) |