From 1be7fe8e0c0b06050825824557fc905b3b0ff3b2 Mon Sep 17 00:00:00 2001 From: Stefan Kaltenbrunner Date: Fri, 28 Feb 2014 21:51:50 +0100 Subject: [PATCH] the sorting in the ftpbrowser for source tarballs has always been odd, this is a small hack to make it better for the most common usecases... --- pgweb/downloads/views.py | 5 ++--- pgweb/util/misc.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/pgweb/downloads/views.py b/pgweb/downloads/views.py index 6e6b4987..60b9642b 100644 --- a/pgweb/downloads/views.py +++ b/pgweb/downloads/views.py @@ -12,7 +12,7 @@ import cPickle as pickle from pgweb.util.decorators import ssl_required, nocache from pgweb.util.contexts import NavContext from pgweb.util.helpers import simple_form, PgXmlHelper, HttpServerError -from pgweb.util.misc import get_client_ip, varnish_purge +from pgweb.util.misc import get_client_ip, varnish_purge, version_sort from models import Mirror, Category, Product, StackBuilderApp from forms import ProductForm @@ -50,7 +50,6 @@ def ftpbrowser(request, subpath): directories = [{'link': k, 'url': k} for k,v in node.items() if v['t'] == 'd'] # Add all symlinks (only directoreis supported) directories.extend([{'link': k, 'url': v['d']} for k,v in node.items() if v['t'] == 'l']) - directories.sort() # Add a link to the parent directory if subpath: @@ -81,7 +80,7 @@ def ftpbrowser(request, subpath): return render_to_response('downloads/ftpbrowser.html', { 'basepath': subpath.rstrip('/'), - 'directories': directories, + 'directories': sorted(directories, key = version_sort, reverse=True), 'files': sorted(files), 'breadcrumbs': breadcrumbs, 'readme': file_readme, diff --git a/pgweb/util/misc.py b/pgweb/util/misc.py index 0877208f..10fc6f3f 100644 --- a/pgweb/util/misc.py +++ b/pgweb/util/misc.py @@ -3,6 +3,7 @@ from django.conf import settings from pgweb.mailqueue.util import send_simple_mail from pgweb.util.helpers import template_to_string +import re def send_template_mail(sender, receiver, subject, templatename, templateattr={}, usergenerated=False): send_simple_mail(sender, receiver, subject, @@ -59,3 +60,17 @@ def varnish_purge(url): """ url = '^%s' % url connection.cursor().execute("SELECT varnish_purge(%s)", (url, )) + +def version_sort(l): + """ + map a directory name to a format that will show up sensibly in an ascii sort + """ + print l['url'] + mkey = l['url'] + m = re.match('v([0-9]+)\.([0-9]+)\.([0-9]+)$',l['url']) + if m: + mkey = m.group(1) + '%02d' % int(m.group(2)) + '%02d' % int(m.group(3)); + m = re.match('v([0-9]+)\.([0-9]+)$',l['url']) + if m: + mkey = m.group(1) + '%02d' % int(m.group(2)); + return mkey