summaryrefslogtreecommitdiffstats
path: root/packages/utils.py
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2011-12-08 10:51:52 -0600
committerDan McGee <dan@archlinux.org>2011-12-08 10:51:52 -0600
commit96fecb1079a1ad4a2b574616bc6611678fa53dc8 (patch)
tree9508dc70701443ec8790866273b550c03c3a97d9 /packages/utils.py
parent604c748f8f8dee5e51e2ea5937d1be0b60fb0e7b (diff)
downloadarchweb-96fecb1079a1ad4a2b574616bc6611678fa53dc8.tar.gz
archweb-96fecb1079a1ad4a2b574616bc6611678fa53dc8.zip
Multilib differences report
This new tables shows multilib packages paired with their regular counterparts in the normal repos if the pkgver differs. A few name hacks are needed to trim lib32-, -multilib, etc. from the name to find the matching package. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'packages/utils.py')
-rw-r--r--packages/utils.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/packages/utils.py b/packages/utils.py
index f8e1f2a1..5703db3b 100644
--- a/packages/utils.py
+++ b/packages/utils.py
@@ -1,4 +1,5 @@
from collections import defaultdict
+from itertools import chain
from operator import itemgetter
from django.db import connection
@@ -63,6 +64,7 @@ def get_split_packages_info():
split['repo'] = all_repos[split['repo']]
return split_pkgs
+
class Difference(object):
def __init__(self, pkgname, repo, pkg_a, pkg_b):
self.pkgname = pkgname
@@ -89,6 +91,7 @@ class Difference(object):
return cmp(self.__dict__, other.__dict__)
return False
+
@cache_function(300)
def get_differences_info(arch_a, arch_b):
# This is a monster. Join packages against itself, looking for packages in
@@ -143,6 +146,46 @@ SELECT p.id, q.id
return differences
+def multilib_differences():
+ # Query for checking multilib out of date-ness
+ sql = """
+SELECT ml.id, reg.id
+ FROM packages ml
+ JOIN packages reg
+ ON (
+ reg.pkgname = (
+ CASE WHEN ml.pkgname LIKE %s
+ THEN SUBSTRING(ml.pkgname, 7)
+ WHEN ml.pkgname LIKE %s
+ THEN SUBSTRING(ml.pkgname FROM 1 FOR CHAR_LENGTH(ml.pkgname) - 9)
+ ELSE
+ ml.pkgname
+ END
+ )
+ AND reg.pkgver != ml.pkgver
+ )
+ JOIN repos r ON reg.repo_id = r.id
+ WHERE ml.repo_id = %s
+ AND r.testing = %s
+ AND r.staging = %s
+ AND reg.arch_id = %s
+ ORDER BY ml.last_update
+"""
+ multilib = Repo.objects.get(name__iexact='multilib')
+ i686 = Arch.objects.get(name='i686')
+ params = ['lib32-%', '%-multilib', multilib.id, False, False, i686.id]
+
+ cursor = connection.cursor()
+ cursor.execute(sql, params)
+ results = cursor.fetchall()
+
+ # fetch all of the necessary packages
+ to_fetch = set(chain.from_iterable(results))
+ pkgs = Package.objects.normal().in_bulk(to_fetch)
+
+ return [(pkgs[ml], pkgs[reg]) for ml, reg in results]
+
+
def get_wrong_permissions():
sql = """
SELECT DISTINCT id