diff options
author | Yorhel <git@yorhel.nl> | 2021-04-19 07:26:02 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2021-04-19 07:26:04 +0200 |
commit | 89fc82f391c954263b34bdca7b4588c3080cef75 (patch) | |
tree | 4d0b47c8cd95764cef7f26c6ea00353a8ddddc41 | |
parent | 12f88c0b6f716742c94308e9988f95b9b6e7d87e (diff) |
Handle version-indepentend distro man-page redirects
E.g. /man/debian/ncdu
As proposed in issue #1.
-rwxr-xr-x | www/index.pl | 17 |
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? |