the sorting in the ftpbrowser for source tarballs has always been odd,
authorStefan Kaltenbrunner <stefan@kaltenbrunner.cc>
Fri, 28 Feb 2014 20:51:50 +0000 (21:51 +0100)
committerStefan Kaltenbrunner <stefan@kaltenbrunner.cc>
Fri, 28 Feb 2014 20:51:50 +0000 (21:51 +0100)
this is a small hack to make it better for the most common usecases...

pgweb/downloads/views.py
pgweb/util/misc.py

index 6e6b4987e798a34575d6df1769e3b6f55ba9c167..60b9642b7c03e03dde165a749e0fd174110bee82 100644 (file)
@@ -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,
index 0877208fb4998854b28117606119af68886c922a..10fc6f3fdf4c0991321e5273d87822764c297dfa 100644 (file)
@@ -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