|
9 | 9 | from django.template import loader |
10 | 10 | from django.utils.timezone import now |
11 | 11 | from django.views.decorators.cache import cache_page, never_cache |
| 12 | +from django.db.models import Q |
| 13 | +from django.http import Http404 |
12 | 14 |
|
13 | 15 | from ..models import FlagRequest |
14 | 16 | from main.models import Package |
@@ -54,20 +56,39 @@ def flag(request, name, repo, arch): |
54 | 56 | if pkg.flag_date is not None: |
55 | 57 | # already flagged. do nothing. |
56 | 58 | return render(request, 'packages/flagged.html', {'pkg': pkg}) |
57 | | - # find all packages from (hopefully) the same PKGBUILD |
58 | | - pkgs = Package.objects.normal().filter( |
59 | | - pkgbase=pkg.pkgbase, flag_date__isnull=True, |
| 59 | + |
| 60 | + # Find packages based on the same packagebase |
| 61 | + pkg_filter = Q(pkgbase=pkg.pkgbase, flag_date__isnull=True, |
60 | 62 | repo__testing=pkg.repo.testing, |
61 | | - repo__staging=pkg.repo.staging).order_by( |
62 | | - 'pkgname', 'repo__name', 'arch__name') |
| 63 | + repo__staging=pkg.repo.staging) |
| 64 | + |
| 65 | + if "lib32-" in name: |
| 66 | + # Find normal version of lib32 packages |
| 67 | + non_lib32_pkg = get_object_or_404(Package.objects.normal(), |
| 68 | + pkgname=name.replace("lib32-","")) |
| 69 | + pkg_filter = pkg_filter | Q(pkgbase=non_lib32_pkg.pkgbase, |
| 70 | + flag_date__isnull=True) |
| 71 | + else: |
| 72 | + # Find lib32 version of normal packages |
| 73 | + try: |
| 74 | + lib32_pkg = get_object_or_404(Package.objects.normal(), |
| 75 | + pkgname="lib32-"+pkg.pkgbase) |
| 76 | + pkg_filter = pkg_filter | Q(pkgbase=lib32_pkg.pkgbase, |
| 77 | + flag_date__isnull=True) |
| 78 | + except Http404: |
| 79 | + pass # Do not raise an error when there is no lib32 version |
| 80 | + |
63 | 81 |
|
| 82 | + |
| 83 | + pkgs = Package.objects.normal().filter(pkg_filter).order_by( |
| 84 | + 'pkgname', 'repo__name', 'arch__name') |
64 | 85 | authenticated = request.user.is_authenticated |
65 | 86 |
|
66 | 87 | if request.POST: |
67 | 88 | form = FlagForm(request.POST, authenticated=authenticated) |
68 | 89 | if form.is_valid() and form.cleaned_data['website'] == '': |
69 | 90 | # save the package list for later use |
70 | | - flagged_pkgs = list(pkgs) |
| 91 | + flagged_pkgs = list(pkgs) + list(lib32_pkgs) |
71 | 92 |
|
72 | 93 | # find a common version if there is one available to store |
73 | 94 | versions = set((pkg.pkgver, pkg.pkgrel, pkg.epoch) |
|
0 commit comments