diff options
author | Dan McGee <dan@archlinux.org> | 2013-04-17 06:24:33 +0200 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2013-04-17 06:24:33 +0200 |
commit | 81821d2b4791f18635b13394aa57fa0795acddaf (patch) | |
tree | 3715cf6f1b5cf2f8a1c45ff9d5c8230624f15615 | |
parent | b7b24740640e24883cd17fd683e1d465fbb343f8 (diff) | |
download | archweb-81821d2b4791f18635b13394aa57fa0795acddaf.tar.gz archweb-81821d2b4791f18635b13394aa57fa0795acddaf.tar.xz |
Sort required by entries by dependency type
We were doing this for depends entries already, and we can do the same
for required by entries via some absolutely awesome SQL query magic and
injecting a few more things to our already crazy query.
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | main/models.py | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/main/models.py b/main/models.py index 24aeed8..2f4d352 100644 --- a/main/models.py +++ b/main/models.py @@ -193,14 +193,22 @@ class Package(models.Model): category as this package if that check makes sense. """ from packages.models import Depend + sorttype = '''(CASE deptype + WHEN 'D' THEN 0 + WHEN 'O' THEN 1 + WHEN 'M' THEN 2 + WHEN 'C' THEN 3 + ELSE 1000 END)''' name_clause = '''packages_depend.name IN ( SELECT %s UNION ALL SELECT z.name FROM packages_provision z WHERE z.pkg_id = %s )''' requiredby = Depend.objects.select_related('pkg', 'pkg__arch', 'pkg__repo').extra( - where=[name_clause], params=[self.pkgname, self.id]).order_by( - 'pkg__pkgname', 'pkg__arch__name', 'pkg__repo__name') + select={'sorttype': sorttype}, + where=[name_clause], params=[self.pkgname, self.id]).order_by( + 'sorttype', 'pkg__pkgname', + 'pkg__arch__name', 'pkg__repo__name') if not self.arch.agnostic: # make sure we match architectures if possible requiredby = requiredby.filter( |