diff --git a/TODO b/TODO index b227356..f2fbd7d 100644 --- a/TODO +++ b/TODO @@ -24,8 +24,8 @@ euscan ### metadata.xml -- Create a page to list handlers users, and average confidence -- Use this page to generate metadata for some packages (handled by deb or brute force for example) +- Use handler's statistics page to generate metadata for some packages + (handled by deb or brute force for example) - Create a subtree of metadata using custom rules - Finalize format - Write a GLEP @@ -40,7 +40,7 @@ euscan ### handlers - remote-id type deb repository: - - find out how to get download url (not sure it's possible) +-- find out how to get download url (not sure it's possible) ### remote-id - Propose new remote-id: deb @@ -56,15 +56,12 @@ euscanwww ### misc -- change ebuild/metadata urls. Use //-(-?).ebuild instead. Use portage code to parse that. Same thing for metadata.xml, without - version-revision. - Really fix mails: better formating - Always keep in db all found versions (when using an API only?). But don't display them if older than current packaged version, except maybe in the "upstream_version" column. ### packages - show additional informations in the web interface (remote-id, etc...) -- show the content of the ebuild for a particular version - Ignore alpha/beta if current is not alpha/beta: per-package setting using metadata.xml ? - ~arch / stable support: see "models: keywords" - stabilisation candidates: check stabilizations rules, and see how this can be automated diff --git a/euscanwww/djeuscan/helpers.py b/euscanwww/djeuscan/helpers.py index 177b91c..171ba5e 100644 --- a/euscanwww/djeuscan/helpers.py +++ b/euscanwww/djeuscan/helpers.py @@ -98,12 +98,3 @@ def get_layman_repos(): lay = Layman(config=settings.LAYMAN_CONFIG) installed_overlays = lay.get_installed() return lay.get_all_info(installed_overlays) - - -def versiontag_to_attrs(tag): - import re - match = re.match(r"(.+)-(.+)-(.+)", tag) - if match: - return match.groups() - else: - None diff --git a/euscanwww/djeuscan/models.py b/euscanwww/djeuscan/models.py index 2dbe85c..2c7f6c2 100644 --- a/euscanwww/djeuscan/models.py +++ b/euscanwww/djeuscan/models.py @@ -171,13 +171,13 @@ class Version(models.Model): def cpv(self): return '%s/%s-%s%s' % ( self.package.category, self.package.name, self.version, - '-' + self.revision if self.revision != '-r0' else '' + '-' + self.revision if self.revision != 'r0' else '' ) def __unicode__(self): return '%s/%s-%s%s%s [%s]' % ( self.package.category, self.package.name, self.version, - '-' + self.revision if self.revision != '-r0' else '', + '-' + self.revision if self.revision != 'r0' else '', ':' + self.slot if self.slot and self.slot != '0' else '', self.overlay or "" ) @@ -221,7 +221,7 @@ class VersionLog(models.Model): txt = '+ ' if self.action == self.VERSION_ADDED else '- ' txt += '%s/%s-%s%s%s [%s]' % ( self.package.category, self.package.name, self.version, - '-' + self.revision if self.revision != '-r0' else '', + '-' + self.revision if self.revision != 'r0' else '', ':' + self.slot if self.slot and self.slot != '0' else '', self.overlay or "" ) diff --git a/euscanwww/djeuscan/templates/euscan/_package_details.html b/euscanwww/djeuscan/templates/euscan/_package_details.html index 8953345..3110606 100644 --- a/euscanwww/djeuscan/templates/euscan/_package_details.html +++ b/euscanwww/djeuscan/templates/euscan/_package_details.html @@ -63,14 +63,14 @@ {% endif %} {% if version.ebuild_path %} - + {{ version.version }}{% if version.revision != "r0" %}-{{ version.revision }}{% endif %}{% if version.slot != "0" %}:{{ version.slot }}{% endif %} {% endif %} {% if version.metadata_path %} - - Metadata - + + Metadata + {% endif %} {% endfor %} diff --git a/euscanwww/djeuscan/urls.py b/euscanwww/djeuscan/urls.py index 83a07de..57cc08e 100644 --- a/euscanwww/djeuscan/urls.py +++ b/euscanwww/djeuscan/urls.py @@ -23,10 +23,16 @@ package_patterns = patterns('djeuscan.views', url(r'^unfavourite/$', unfavourite_package, name="unfavourite_package"), url(r'^refresh$', "refresh_package", name="refresh_package"), url(r'^problem$', 'problem', name="problem"), - url(r'^(?P.*)/ebuild$', "package_version_ebuild", +) + +files_patterns = patterns('djeuscan.views', + url(r'^(?P[\w+][\w+.-]*)/(?P.+).ebuild$', + "package_version_ebuild", name="package_version_ebuild"), - url(r'^(?P.*)/metadata$', "package_version_metadata", - name="package_version_metadata"), + url(r'^(?P[\w+][\w+.-]*)/(?P[\w+][\w+.-]*)/' + r'(?P[\w+][\w+.-]*)/metadata.xml$', + "package_metadata", + name="package_metadata"), ) categories_patterns = patterns('djeuscan.views', @@ -112,5 +118,7 @@ urlpatterns = patterns('djeuscan.views', url(r'^package/(?P[\w+][\w+.-]*)/(?P[\w+][\w+.-]*)/', include(package_patterns)), + url(r'^files/', include(files_patterns)), + url(r'^tasks/', include(tasks_patterns)), ) diff --git a/euscanwww/djeuscan/views.py b/euscanwww/djeuscan/views.py index 8456640..e09b82f 100644 --- a/euscanwww/djeuscan/views.py +++ b/euscanwww/djeuscan/views.py @@ -3,6 +3,8 @@ import inspect from annoying.decorators import render_to, ajax_request +from portage.versions import catpkgsplit + from django.http import HttpResponse, HttpResponseNotFound from django.core.urlresolvers import reverse from django.shortcuts import get_object_or_404, redirect @@ -11,7 +13,7 @@ from django.views.decorators.http import require_POST from django.db import models from djeuscan.helpers import version_key, packages_from_names, \ - get_maintainer_or_404, get_make_conf, get_layman_repos, versiontag_to_attrs + get_maintainer_or_404, get_make_conf, get_layman_repos from djeuscan.models import Version, Package, Herd, Maintainer, EuscanResult, \ VersionLog, RefreshPackageQuery, ProblemReport, Category, Overlay from djeuscan.forms import WorldForm, PackagesForm, ProblemReportForm @@ -225,14 +227,17 @@ def package(request, category, package): } -def package_version_metadata(request, category, package, version_tag): +def package_metadata(request, overlay, category, package): package = get_object_or_404(Package, category=category, name=package) - try: - ver, rev, over = versiontag_to_attrs(version_tag) - except TypeError: + + versions = Version.objects.filter(package=package, overlay=overlay) + if len(versions) == 0: return HttpResponseNotFound() - version = get_object_or_404(Version, package=package, version=ver, - revision=rev, overlay=over) + + # XXX: Kinda ugly, it assumes that every version with the same overlay + # has the same metadata path + version = versions[0] + content = "" if version.metadata_path: try: @@ -245,17 +250,15 @@ def package_version_metadata(request, category, package, version_tag): return HttpResponse(content, content_type="text/plain") -def package_version_ebuild(request, category, package, version_tag): - package = get_object_or_404(Package, category=category, name=package) - try: - ver, rev, over = versiontag_to_attrs(version_tag) - except TypeError: - return HttpResponseNotFound() - version = get_object_or_404(Version, package=package, version=ver, - revision=rev, overlay=over) - if version.ebuild_path: +def package_version_ebuild(request, overlay, cpv): + category, package, version, revision = catpkgsplit(cpv) + pkg = get_object_or_404(Package, category=category, name=package) + obj = get_object_or_404(Version, package=pkg, version=version, + revision=revision, overlay=overlay) + + if obj.ebuild_path: try: - with open(version.ebuild_path) as ebuild_file: + with open(obj.ebuild_path) as ebuild_file: content = ebuild_file.read() except IOError: return HttpResponseNotFound()