diff options
author | Dan McGee <dan@archlinux.org> | 2012-05-19 03:26:16 +0200 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2012-05-19 04:36:05 +0200 |
commit | cf67e7952396121d3f7190195d812ea3f5fc7dcf (patch) | |
tree | 1a6fd354c9ee9300eb93f451a3a570a7049a0fde | |
parent | 1625cd31c334b017688a8c30631ddad60fafd8f4 (diff) | |
download | archweb-cf67e7952396121d3f7190195d812ea3f5fc7dcf.tar.gz archweb-cf67e7952396121d3f7190195d812ea3f5fc7dcf.tar.xz |
Issue redirects from non-agnostic to agnostic URLs if unambiguous
For something like "/extra/i686/apache-ant/", we can redirect to
"/extra/any/apache-ant/" without ambiguity. Previously this redirected
to the split packages listing with a single package, which was neither
correct nor really expected.
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | packages/views/__init__.py | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/packages/views/__init__.py b/packages/views/__init__.py index c1a035d..3e574c2 100644 --- a/packages/views/__init__.py +++ b/packages/views/__init__.py @@ -136,6 +136,16 @@ def details(request, name='', repo='', arch=''): return direct_to_template(request, 'packages/details.html', {'pkg': pkg, }) except Package.DoesNotExist: + arch_obj = get_object_or_404(Arch, name=arch) + # for arch='any' packages, we can issue a redirect to them if we + # have a single non-ambiguous option by changing the arch to match + # any arch-agnostic package + if not arch_obj.agnostic: + pkgs = Package.objects.select_related( + 'arch', 'repo', 'packager').filter(pkgname=name, + repo__name__iexact=repo, arch__agnostic=True) + if len(pkgs) == 1: + return redirect(pkgs[0], permanent=True) return split_package_details(request, name, repo, arch) else: pkg_data = [ |