From 89fc82f391c954263b34bdca7b4588c3080cef75 Mon Sep 17 00:00:00 2001 From: Yorhel Date: Mon, 19 Apr 2021 07:26:02 +0200 Subject: [PATCH] Handle version-indepentend distro man-page redirects E.g. /man/debian/ncdu As proposed in issue #1. --- www/index.pl | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/www/index.pl b/www/index.pl index f6563ff..8997051 100755 --- a/www/index.pl +++ b/www/index.pl @@ -18,7 +18,7 @@ use ManUtils; TUWF::set( logfile => $ENV{TUWF_LOG}, db_login => [undef, undef, undef], - debug => 0, + debug => $ENV{TUWF_DEBUG}, xml_pretty => 0, log_slow_pages => 500, # Cache the system information @@ -571,24 +571,25 @@ sub man_redir { # 2. // # 3. /// - $sys = $self->{sysbyshort}{$sys}; - return $self->resNotFound if !$sys; + my $sysid = $self->{sysbyshort}{$sys}; + $sysid = $sysid ? [$sysid->{id}] : [ map $self->{sysbyshort}{$_}{id}, grep /^\Q$sys\E-/, keys $self->{sysbyshort}->%* ]; + return $self->resNotFound if !@$sysid; my $man; if($path !~ m{/}) { # (1) - ($man) = $self->dbManPrefName($path, sysid => $sys->{id}); + ($man) = $self->dbManPrefName($path, sysid => $sysid); } else { $path =~ s{/([^/]+)$}{}; my $name = $1; - my($pkg, $ver) = pkg_frompath($self, $sys->{id}, $path); # Handles (2) and (3) + my($pkg, $ver) = pkg_frompath($self, $sysid, $path); # Handles (2) and (3) return $self->resNotFound if !$pkg; my $verid = $ver && $self->dbPackageVersions($pkg->{id}, $ver)->[0]{id}; return $self->resNotFound if $ver && !$verid; - ($man) = $self->dbManPrefName($name, sysid => $sys->{id}, pkgid => $pkg->{id}, pkgver => $verid); + ($man) = $self->dbManPrefName($name, sysid => $sysid, pkgid => $pkg->{id}, pkgver => $verid); } return $self->resNotFound if !$man; @@ -999,7 +1000,7 @@ sub dbManPref { length $o{name} ? ('m.name = ?' => $o{name}) : (), $o{shorthash} ? (q{substring(m.hash from 1 for 4) = decode(?, 'hex')} => $o{shorthash}) : (), length $o{section} ? ('m.section LIKE ?' => escape_like($o{section}).'%') : (), - $o{sysid} ? ('p.system = ?' => $o{sysid}) : (), + $o{sysid} ? ('p.system IN(!l)' => [ ref $o{sysid} ? $o{sysid} : [$o{sysid}] ]) : (), $o{package} ? ('p.id = ?' => $o{package}) : (), $o{pkgver} ? ('v.id = ?' => $o{pkgver}) : (), $o{language} ? (q{substring(locale from '^[^.]+') = ?} => $o{language}) : (), @@ -1102,7 +1103,7 @@ sub dbPackageGet { my %o = (results => 10, page => 1, @_); my @where = ( - $o{sysid} ? ('system = ?' => $o{sysid} ) : (), + $o{sysid} ? ('system IN(!l)' => [ ref $o{sysid} ? $o{sysid} : [$o{sysid}] ]) : (), $o{category} ? ('category = ?' => $o{category}) : (), $o{name} ? ('name = ?' => $o{name} ) : (), # This seems slow, perhaps cache?