summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2021-04-19 07:26:02 +0200
committerYorhel <git@yorhel.nl>2021-04-19 07:26:04 +0200
commit89fc82f391c954263b34bdca7b4588c3080cef75 (patch)
tree4d0b47c8cd95764cef7f26c6ea00353a8ddddc41
parent12f88c0b6f716742c94308e9988f95b9b6e7d87e (diff)
Handle version-indepentend distro man-page redirects
E.g. /man/debian/ncdu As proposed in issue #1.
-rwxr-xr-xwww/index.pl17
1 files 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. <category>/<package>/<name>
# 3. <category>/<package>/<version>/<name>
- $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?