[calm - Cygwin server-side packaging maintenance script] branch master, updated. 20210626-7-g8b6fa8f

Jon TURNEY via Cygwin-apps-cvs <[email protected]>
Newsgroups gmane.os.cygwin.cvs.apps
Message-ID <[email protected]>


https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=8b6fa8fb2c0cdc12d3e0219b0bbf21836835bf7a

commit 8b6fa8fb2c0cdc12d3e0219b0bbf21836835bf7a
Author: Jon Turney <[email protected]>
Date:   Thu Jan 20 14:08:54 2022 +0000

    Exempt obsolete:d packages from version check
    
    Exempt obsolete:d packages from check that they provide a version
    matching the current source pacakge version.

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=3541f8933bb7f7c7fa4e9368f10a2da20bf0a6f6

commit 3541f8933bb7f7c7fa4e9368f10a2da20bf0a6f6
Author: Jon Turney <[email protected]>
Date:   Sat Jan 8 15:51:29 2022 +0000

    Clear is_used_by before generating it
    
    Avoid an install package which has been totally removed lingering in the
    is_used_by for it's source.

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=6c6a59a7e1a0d47d38383211afe478edea354ffc

commit 6c6a59a7e1a0d47d38383211afe478edea354ffc
Author: Jon Turney <[email protected]>
Date:   Tue Jan 4 16:53:32 2022 +0000

    Drop freenode #cygwin-bots irc channel

https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=aa9c1c68233d09737ee438c43fad223199e53606

commit aa9c1c68233d09737ee438c43fad223199e53606
Author: Jon Turney <[email protected]>
Date:   Thu Jan 20 15:48:15 2022 +0000

    Update expected test output for summary link in package contents HTML


Diff:
---
 calm/irk.py                                                  |  2 +-
 calm/package.py                                              | 12 ++++++++++++
 test/testdata/htdocs.expected/x86/arc-src/arc-4.32.7-10-src  |  2 +-
 test/testdata/htdocs.expected/x86/arc/arc-4.32.7-10          |  2 +-
 .../htdocs.expected/x86/base-cygwin/base-cygwin-3.6-1        |  2 +-
 .../htdocs.expected/x86/base-cygwin/base-cygwin-3.8-1        |  2 +-
 .../htdocs.expected/x86/corrupt-src/corrupt-2.0.0-1-src      |  2 +-
 test/testdata/htdocs.expected/x86/corrupt/corrupt-2.0.0-1    |  2 +-
 .../x86/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1            |  2 +-
 .../x86/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1            |  2 +-
 .../x86/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3          |  2 +-
 .../htdocs.expected/x86/cygwin-devel/cygwin-devel-2.2.0-1    |  2 +-
 .../htdocs.expected/x86/cygwin-devel/cygwin-devel-2.2.1-1    |  2 +-
 .../htdocs.expected/x86/cygwin-devel/cygwin-devel-2.3.0-0.3  |  2 +-
 .../htdocs.expected/x86/cygwin-src/cygwin-2.2.0-1-src        |  2 +-
 .../htdocs.expected/x86/cygwin-src/cygwin-2.2.1-1-src        |  2 +-
 .../htdocs.expected/x86/cygwin-src/cygwin-2.3.0-0.3-src      |  2 +-
 test/testdata/htdocs.expected/x86/cygwin/cygwin-2.2.0-1      |  2 +-
 test/testdata/htdocs.expected/x86/cygwin/cygwin-2.2.1-1      |  2 +-
 test/testdata/htdocs.expected/x86/cygwin/cygwin-2.3.0-0.3    |  2 +-
 .../htdocs.expected/x86/keychain-src/keychain-2.6.8-1-src    |  2 +-
 .../htdocs.expected/x86/keychain-src/keychain-2.7.1-1-src    |  2 +-
 test/testdata/htdocs.expected/x86/keychain/keychain-2.6.8-1  |  2 +-
 test/testdata/htdocs.expected/x86/keychain/keychain-2.7.1-1  |  2 +-
 .../x86/libdns_sd-devel/libdns_sd-devel-379.32.1-1           |  2 +-
 .../htdocs.expected/x86/libdns_sd1/libdns_sd1-379.32.1-1     |  2 +-
 .../x86/mDNSResponder-src/mDNSResponder-379.32.1-1-src       |  2 +-
 .../x86/mDNSResponder/mDNSResponder-379.32.1-1               |  2 +-
 test/testdata/htdocs.expected/x86/obs-a-src/obs-a-1.0-1-src  |  2 +-
 test/testdata/htdocs.expected/x86/obs-a/obs-a-1.0-1          |  2 +-
 test/testdata/htdocs.expected/x86/obs-b-src/obs-b-1.0-1-src  |  2 +-
 test/testdata/htdocs.expected/x86/obs-b/obs-b-1.0-1          |  2 +-
 .../htdocs.expected/x86/openssh-src/openssh-7.2p2-1-src      |  2 +-
 test/testdata/htdocs.expected/x86/openssh/openssh-7.2p2-1    |  2 +-
 .../per-version-replacement-hint-only-1.0-1-src              |  2 +-
 .../per-version-replacement-hint-only-1.0-1                  |  2 +-
 .../x86/per-version-src/per-version-4.0-1-src                |  2 +-
 .../x86/per-version-src/per-version-4.8-1-src                |  2 +-
 .../htdocs.expected/x86/per-version/per-version-4.0-1        |  2 +-
 .../htdocs.expected/x86/per-version/per-version-4.8-1        |  2 +-
 .../x86/perl-Net-SMTP-SSL-src/perl-Net-SMTP-SSL-1.01-1-src   |  2 +-
 .../x86/perl-Net-SMTP-SSL-src/perl-Net-SMTP-SSL-1.02-1-src   |  2 +-
 .../x86/perl-Net-SMTP-SSL-src/perl-Net-SMTP-SSL-1.03-1-src   |  2 +-
 .../x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.01-1           |  2 +-
 .../x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.02-1           |  2 +-
 .../x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-1           |  2 +-
 .../htdocs.expected/x86/rpm-doc-src/rpm-doc-4.1-2-src        |  2 +-
 test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-4.1-2      |  2 +-
 test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-999-1      |  2 +-
 .../x86/staleversion-src/staleversion-240-1-src              |  2 +-
 .../x86/staleversion-src/staleversion-242-0-src              |  2 +-
 .../x86/staleversion-src/staleversion-243-0-src              |  2 +-
 .../x86/staleversion-src/staleversion-250-0-src              |  2 +-
 .../x86/staleversion-src/staleversion-251-0-src              |  2 +-
 .../x86/staleversion-src/staleversion-260-0-src              |  2 +-
 .../htdocs.expected/x86/staleversion/staleversion-240-1      |  2 +-
 .../htdocs.expected/x86/staleversion/staleversion-242-0      |  2 +-
 .../htdocs.expected/x86/staleversion/staleversion-243-0      |  2 +-
 .../htdocs.expected/x86/staleversion/staleversion-250-0      |  2 +-
 .../htdocs.expected/x86/staleversion/staleversion-251-0      |  2 +-
 .../htdocs.expected/x86/staleversion/staleversion-260-0      |  2 +-
 .../testdata/htdocs.expected/x86/test-c-src/test-c-1.0-1-src |  2 +-
 test/testdata/htdocs.expected/x86/test-c/test-c-1.0-1        |  2 +-
 .../testdata/htdocs.expected/x86/test-d-src/test-d-1.0-1-src |  2 +-
 test/testdata/htdocs.expected/x86/test-d/test-d-1.0-1        |  2 +-
 .../testdata/htdocs.expected/x86/test-e-src/test-e-1.0-1-src |  2 +-
 test/testdata/htdocs.expected/x86/test-e/test-e-1.0-1        |  2 +-
 .../x86/testpackage-src/testpackage-0.1-1-src                |  2 +-
 .../htdocs.expected/x86/testpackage/testpackage-0.1-1        |  2 +-
 69 files changed, 80 insertions(+), 68 deletions(-)

diff --git a/calm/irk.py b/calm/irk.py
index 40986b9..4028dd7 100755
--- a/calm/irk.py
+++ b/calm/irk.py
@@ -12,7 +12,7 @@ import socket
 import sys
 
 DEFAULT_SERVER = ("localhost", 6659)
-DEFAULT_TARGET = ['cygwin-bots', 'irc://irc.libera.chat/cygwin-bots']
+DEFAULT_TARGET = ['irc://irc.libera.chat/cygwin-bots']
 
 
 def connect(server=DEFAULT_SERVER):
diff --git a/calm/package.py b/calm/package.py
index d253afb..34424a8 100755
--- a/calm/package.py
+++ b/calm/package.py
@@ -499,6 +499,9 @@ def validate_packages(args, packages):
         for hints in packages[p].version_hints.values():
             valid_requires.update(hints.get('provides', '').split())
 
+            # reset obsolete:d by some other package state
+            packages[p].obsolete = False
+
     # perform various package validations
     for p in sorted(packages.keys()):
         logging.log(5, "validating package '%s'" % (p))
@@ -569,6 +572,8 @@ def validate_packages(args, packages):
                     o = re.sub(r'(.*) +\(.*\)', r'\1', o)
 
                     if o in packages:
+                        packages[o].obsolete = True
+
                         for (ov, ohints) in packages[o].version_hints.items():
                             if 'depends' in ohints:
                                 depends = ohints['depends'].split(',')
@@ -763,6 +768,9 @@ def validate_packages(args, packages):
 
     # make another pass to verify a source tarfile exists for every install
     # tarfile version
+    for p in packages.keys():
+        packages[p].is_used_by = set()
+
     for p in sorted(packages.keys()):
         if not packages[p].kind == Kind.binary:
             continue
@@ -830,6 +838,8 @@ def validate_packages(args, packages):
                 continue
 
             # ignore obsolete packages
+            if packages[install_p].obsolete:
+                continue
             if any(['_obsolete' in packages[install_p].version_hints[vr].get('category', '') for vr in packages[install_p].version_hints]):
                 continue
 
@@ -1160,6 +1170,8 @@ def write_repo_json(args, packages, f):
             for arch in common_constants.ARCHES:
                 if p in packages[arch]:
                     return packages[arch][p]
+
+            # will lead to AttributeError as has no version_hints
             return None
 
         bv = po.best_version
diff --git a/test/testdata/htdocs.expected/x86/arc-src/arc-4.32.7-10-src b/test/testdata/htdocs.expected/x86/arc-src/arc-4.32.7-10-src
index 583e28d..1f449c6 100644
--- a/test/testdata/htdocs.expected/x86/arc-src/arc-4.32.7-10-src
+++ b/test/testdata/htdocs.expected/x86/arc-src/arc-4.32.7-10-src
@@ -4,7 +4,7 @@
 <title>arc-src: The ARC archive utility (source)</title>
 </head>
 <body>
-<h1>arc-src: The ARC archive utility (source)</h1>
+<h1><a href="/packages/summary/arc-src.html">arc-src</a>: The ARC archive utility (source)</h1>
 <pre>
     2016-11-24 22:47        1786 cc1BOI4Z
     2016-11-24 18:14        1786 ccbdRcNC
diff --git a/test/testdata/htdocs.expected/x86/arc/arc-4.32.7-10 b/test/testdata/htdocs.expected/x86/arc/arc-4.32.7-10
index b9d474e..5b867d7 100644
--- a/test/testdata/htdocs.expected/x86/arc/arc-4.32.7-10
+++ b/test/testdata/htdocs.expected/x86/arc/arc-4.32.7-10
@@ -4,7 +4,7 @@
 <title>arc: The ARC archive utility</title>
 </head>
 <body>
-<h1>arc: The ARC archive utility</h1>
+<h1><a href="/packages/summary/arc.html">arc</a>: The ARC archive utility</h1>
 <pre>
     2016-11-24 22:47        1786 cc1BOI4Z
     2016-11-24 18:14        1786 ccbdRcNC
diff --git a/test/testdata/htdocs.expected/x86/base-cygwin/base-cygwin-3.6-1 b/test/testdata/htdocs.expected/x86/base-cygwin/base-cygwin-3.6-1
index 68cfc5e..46bac14 100644
--- a/test/testdata/htdocs.expected/x86/base-cygwin/base-cygwin-3.6-1
+++ b/test/testdata/htdocs.expected/x86/base-cygwin/base-cygwin-3.6-1
@@ -4,7 +4,7 @@
 <title>base-cygwin: Initial base installation helper script</title>
 </head>
 <body>
-<h1>base-cygwin: Initial base installation helper script</h1>
+<h1><a href="/packages/summary/base-cygwin.html">base-cygwin</a>: Initial base installation helper script</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/base-cygwin/base-cygwin-3.8-1 b/test/testdata/htdocs.expected/x86/base-cygwin/base-cygwin-3.8-1
index 68cfc5e..46bac14 100644
--- a/test/testdata/htdocs.expected/x86/base-cygwin/base-cygwin-3.8-1
+++ b/test/testdata/htdocs.expected/x86/base-cygwin/base-cygwin-3.8-1
@@ -4,7 +4,7 @@
 <title>base-cygwin: Initial base installation helper script</title>
 </head>
 <body>
-<h1>base-cygwin: Initial base installation helper script</h1>
+<h1><a href="/packages/summary/base-cygwin.html">base-cygwin</a>: Initial base installation helper script</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/corrupt-src/corrupt-2.0.0-1-src b/test/testdata/htdocs.expected/x86/corrupt-src/corrupt-2.0.0-1-src
index 46032cf..200b049 100644
--- a/test/testdata/htdocs.expected/x86/corrupt-src/corrupt-2.0.0-1-src
+++ b/test/testdata/htdocs.expected/x86/corrupt-src/corrupt-2.0.0-1-src
@@ -4,7 +4,7 @@
 <title>corrupt-src: A corrupt package (source)</title>
 </head>
 <body>
-<h1>corrupt-src: A corrupt package (source)</h1>
+<h1><a href="/packages/summary/corrupt-src.html">corrupt-src</a>: A corrupt package (source)</h1>
 <pre>
     2016-06-11 10:34           0 perl-Business-ISBN-2.011-1.src/
     2016-06-11 10:34      364175 perl-Business-ISBN-2.011-1.src/Business-ISBN-2.011.tar.gz
diff --git a/test/testdata/htdocs.expected/x86/corrupt/corrupt-2.0.0-1 b/test/testdata/htdocs.expected/x86/corrupt/corrupt-2.0.0-1
index 396aa97..1868c86 100644
--- a/test/testdata/htdocs.expected/x86/corrupt/corrupt-2.0.0-1
+++ b/test/testdata/htdocs.expected/x86/corrupt/corrupt-2.0.0-1
@@ -4,7 +4,7 @@
 <title>corrupt: A corrupt package</title>
 </head>
 <body>
-<h1>corrupt: A corrupt package</h1>
+<h1><a href="/packages/summary/corrupt.html">corrupt</a>: A corrupt package</h1>
 <pre>
 package is corrupted
 </pre>
diff --git a/test/testdata/htdocs.expected/x86/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1 b/test/testdata/htdocs.expected/x86/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1
index 419b839..a4b3595 100644
--- a/test/testdata/htdocs.expected/x86/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1
+++ b/test/testdata/htdocs.expected/x86/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1
@@ -4,7 +4,7 @@
 <title>cygwin-debuginfo: Debug info for cygwin</title>
 </head>
 <body>
-<h1>cygwin-debuginfo: Debug info for cygwin</h1>
+<h1><a href="/packages/summary/cygwin-debuginfo.html">cygwin-debuginfo</a>: Debug info for cygwin</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1 b/test/testdata/htdocs.expected/x86/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1
index 419b839..a4b3595 100644
--- a/test/testdata/htdocs.expected/x86/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1
+++ b/test/testdata/htdocs.expected/x86/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1
@@ -4,7 +4,7 @@
 <title>cygwin-debuginfo: Debug info for cygwin</title>
 </head>
 <body>
-<h1>cygwin-debuginfo: Debug info for cygwin</h1>
+<h1><a href="/packages/summary/cygwin-debuginfo.html">cygwin-debuginfo</a>: Debug info for cygwin</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3 b/test/testdata/htdocs.expected/x86/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3
index 419b839..a4b3595 100644
--- a/test/testdata/htdocs.expected/x86/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3
+++ b/test/testdata/htdocs.expected/x86/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3
@@ -4,7 +4,7 @@
 <title>cygwin-debuginfo: Debug info for cygwin</title>
 </head>
 <body>
-<h1>cygwin-debuginfo: Debug info for cygwin</h1>
+<h1><a href="/packages/summary/cygwin-debuginfo.html">cygwin-debuginfo</a>: Debug info for cygwin</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/cygwin-devel/cygwin-devel-2.2.0-1 b/test/testdata/htdocs.expected/x86/cygwin-devel/cygwin-devel-2.2.0-1
index 77de194..fe04746 100644
--- a/test/testdata/htdocs.expected/x86/cygwin-devel/cygwin-devel-2.2.0-1
+++ b/test/testdata/htdocs.expected/x86/cygwin-devel/cygwin-devel-2.2.0-1
@@ -4,7 +4,7 @@
 <title>cygwin-devel: Core development files</title>
 </head>
 <body>
-<h1>cygwin-devel: Core development files</h1>
+<h1><a href="/packages/summary/cygwin-devel.html">cygwin-devel</a>: Core development files</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/cygwin-devel/cygwin-devel-2.2.1-1 b/test/testdata/htdocs.expected/x86/cygwin-devel/cygwin-devel-2.2.1-1
index 77de194..fe04746 100644
--- a/test/testdata/htdocs.expected/x86/cygwin-devel/cygwin-devel-2.2.1-1
+++ b/test/testdata/htdocs.expected/x86/cygwin-devel/cygwin-devel-2.2.1-1
@@ -4,7 +4,7 @@
 <title>cygwin-devel: Core development files</title>
 </head>
 <body>
-<h1>cygwin-devel: Core development files</h1>
+<h1><a href="/packages/summary/cygwin-devel.html">cygwin-devel</a>: Core development files</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/cygwin-devel/cygwin-devel-2.3.0-0.3 b/test/testdata/htdocs.expected/x86/cygwin-devel/cygwin-devel-2.3.0-0.3
index 77de194..fe04746 100644
--- a/test/testdata/htdocs.expected/x86/cygwin-devel/cygwin-devel-2.3.0-0.3
+++ b/test/testdata/htdocs.expected/x86/cygwin-devel/cygwin-devel-2.3.0-0.3
@@ -4,7 +4,7 @@
 <title>cygwin-devel: Core development files</title>
 </head>
 <body>
-<h1>cygwin-devel: Core development files</h1>
+<h1><a href="/packages/summary/cygwin-devel.html">cygwin-devel</a>: Core development files</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/cygwin-src/cygwin-2.2.0-1-src b/test/testdata/htdocs.expected/x86/cygwin-src/cygwin-2.2.0-1-src
index 9a42632..2cb3f3e 100644
--- a/test/testdata/htdocs.expected/x86/cygwin-src/cygwin-2.2.0-1-src
+++ b/test/testdata/htdocs.expected/x86/cygwin-src/cygwin-2.2.0-1-src
@@ -4,7 +4,7 @@
 <title>cygwin-src: The UNIX emulation engine (source)</title>
 </head>
 <body>
-<h1>cygwin-src: The UNIX emulation engine (source)</h1>
+<h1><a href="/packages/summary/cygwin-src.html">cygwin-src</a>: The UNIX emulation engine (source)</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/cygwin-src/cygwin-2.2.1-1-src b/test/testdata/htdocs.expected/x86/cygwin-src/cygwin-2.2.1-1-src
index 9a42632..2cb3f3e 100644
--- a/test/testdata/htdocs.expected/x86/cygwin-src/cygwin-2.2.1-1-src
+++ b/test/testdata/htdocs.expected/x86/cygwin-src/cygwin-2.2.1-1-src
@@ -4,7 +4,7 @@
 <title>cygwin-src: The UNIX emulation engine (source)</title>
 </head>
 <body>
-<h1>cygwin-src: The UNIX emulation engine (source)</h1>
+<h1><a href="/packages/summary/cygwin-src.html">cygwin-src</a>: The UNIX emulation engine (source)</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/cygwin-src/cygwin-2.3.0-0.3-src b/test/testdata/htdocs.expected/x86/cygwin-src/cygwin-2.3.0-0.3-src
index 9a42632..2cb3f3e 100644
--- a/test/testdata/htdocs.expected/x86/cygwin-src/cygwin-2.3.0-0.3-src
+++ b/test/testdata/htdocs.expected/x86/cygwin-src/cygwin-2.3.0-0.3-src
@@ -4,7 +4,7 @@
 <title>cygwin-src: The UNIX emulation engine (source)</title>
 </head>
 <body>
-<h1>cygwin-src: The UNIX emulation engine (source)</h1>
+<h1><a href="/packages/summary/cygwin-src.html">cygwin-src</a>: The UNIX emulation engine (source)</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/cygwin/cygwin-2.2.0-1 b/test/testdata/htdocs.expected/x86/cygwin/cygwin-2.2.0-1
index 1cd75d5..c5648ca 100644
--- a/test/testdata/htdocs.expected/x86/cygwin/cygwin-2.2.0-1
+++ b/test/testdata/htdocs.expected/x86/cygwin/cygwin-2.2.0-1
@@ -4,7 +4,7 @@
 <title>cygwin: The UNIX emulation engine</title>
 </head>
 <body>
-<h1>cygwin: The UNIX emulation engine</h1>
+<h1><a href="/packages/summary/cygwin.html">cygwin</a>: The UNIX emulation engine</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/cygwin/cygwin-2.2.1-1 b/test/testdata/htdocs.expected/x86/cygwin/cygwin-2.2.1-1
index 1cd75d5..c5648ca 100644
--- a/test/testdata/htdocs.expected/x86/cygwin/cygwin-2.2.1-1
+++ b/test/testdata/htdocs.expected/x86/cygwin/cygwin-2.2.1-1
@@ -4,7 +4,7 @@
 <title>cygwin: The UNIX emulation engine</title>
 </head>
 <body>
-<h1>cygwin: The UNIX emulation engine</h1>
+<h1><a href="/packages/summary/cygwin.html">cygwin</a>: The UNIX emulation engine</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/cygwin/cygwin-2.3.0-0.3 b/test/testdata/htdocs.expected/x86/cygwin/cygwin-2.3.0-0.3
index 1cd75d5..c5648ca 100644
--- a/test/testdata/htdocs.expected/x86/cygwin/cygwin-2.3.0-0.3
+++ b/test/testdata/htdocs.expected/x86/cygwin/cygwin-2.3.0-0.3
@@ -4,7 +4,7 @@
 <title>cygwin: The UNIX emulation engine</title>
 </head>
 <body>
-<h1>cygwin: The UNIX emulation engine</h1>
+<h1><a href="/packages/summary/cygwin.html">cygwin</a>: The UNIX emulation engine</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/keychain-src/keychain-2.6.8-1-src b/test/testdata/htdocs.expected/x86/keychain-src/keychain-2.6.8-1-src
index bdc08ce..ede5b28 100644
--- a/test/testdata/htdocs.expected/x86/keychain-src/keychain-2.6.8-1-src
+++ b/test/testdata/htdocs.expected/x86/keychain-src/keychain-2.6.8-1-src
@@ -4,7 +4,7 @@
 <title>keychain-src: Key manager for OpenSSH (source)</title>
 </head>
 <body>
-<h1>keychain-src: Key manager for OpenSSH (source)</h1>
+<h1><a href="/packages/summary/keychain-src.html">keychain-src</a>: Key manager for OpenSSH (source)</h1>
 <pre>
     2006-11-09 04:59        3051 keychain-2.6.8-1.patch
     2006-11-09 04:59        5621 keychain-2.6.8-1.sh
diff --git a/test/testdata/htdocs.expected/x86/keychain-src/keychain-2.7.1-1-src b/test/testdata/htdocs.expected/x86/keychain-src/keychain-2.7.1-1-src
index 239531c..47a0fcb 100644
--- a/test/testdata/htdocs.expected/x86/keychain-src/keychain-2.7.1-1-src
+++ b/test/testdata/htdocs.expected/x86/keychain-src/keychain-2.7.1-1-src
@@ -4,7 +4,7 @@
 <title>keychain-src: Key manager for OpenSSH (source)</title>
 </head>
 <body>
-<h1>keychain-src: Key manager for OpenSSH (source)</h1>
+<h1><a href="/packages/summary/keychain-src.html">keychain-src</a>: Key manager for OpenSSH (source)</h1>
 <pre>
     2012-10-10 05:40       24455 keychain-2.7.1-1-cygwin.patch
     2012-10-10 05:40         270 keychain-2.7.1-1-cygwin.patch.sig
diff --git a/test/testdata/htdocs.expected/x86/keychain/keychain-2.6.8-1 b/test/testdata/htdocs.expected/x86/keychain/keychain-2.6.8-1
index 77c8827..154c3d6 100644
--- a/test/testdata/htdocs.expected/x86/keychain/keychain-2.6.8-1
+++ b/test/testdata/htdocs.expected/x86/keychain/keychain-2.6.8-1
@@ -4,7 +4,7 @@
 <title>keychain: Key manager for OpenSSH</title>
 </head>
 <body>
-<h1>keychain: Key manager for OpenSSH</h1>
+<h1><a href="/packages/summary/keychain.html">keychain</a>: Key manager for OpenSSH</h1>
 <pre>
     2006-11-09 04:58           0 usr/
     2006-11-09 04:58           0 usr/bin/
diff --git a/test/testdata/htdocs.expected/x86/keychain/keychain-2.7.1-1 b/test/testdata/htdocs.expected/x86/keychain/keychain-2.7.1-1
index 29bcdf2..ab5a835 100644
--- a/test/testdata/htdocs.expected/x86/keychain/keychain-2.7.1-1
+++ b/test/testdata/htdocs.expected/x86/keychain/keychain-2.7.1-1
@@ -4,7 +4,7 @@
 <title>keychain: Key manager for OpenSSH</title>
 </head>
 <body>
-<h1>keychain: Key manager for OpenSSH</h1>
+<h1><a href="/packages/summary/keychain.html">keychain</a>: Key manager for OpenSSH</h1>
 <pre>
     2012-10-10 05:40           0 usr/
     2012-10-10 05:40           0 usr/bin/
diff --git a/test/testdata/htdocs.expected/x86/libdns_sd-devel/libdns_sd-devel-379.32.1-1 b/test/testdata/htdocs.expected/x86/libdns_sd-devel/libdns_sd-devel-379.32.1-1
index c3d4606..1cfbdc7 100644
--- a/test/testdata/htdocs.expected/x86/libdns_sd-devel/libdns_sd-devel-379.32.1-1
+++ b/test/testdata/htdocs.expected/x86/libdns_sd-devel/libdns_sd-devel-379.32.1-1
@@ -4,7 +4,7 @@
 <title>libdns_sd-devel: Bonjour Zeroconf implementation</title>
 </head>
 <body>
-<h1>libdns_sd-devel: Bonjour Zeroconf implementation</h1>
+<h1><a href="/packages/summary/libdns_sd-devel.html">libdns_sd-devel</a>: Bonjour Zeroconf implementation</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/libdns_sd1/libdns_sd1-379.32.1-1 b/test/testdata/htdocs.expected/x86/libdns_sd1/libdns_sd1-379.32.1-1
index 9a35eec..70646b2 100644
--- a/test/testdata/htdocs.expected/x86/libdns_sd1/libdns_sd1-379.32.1-1
+++ b/test/testdata/htdocs.expected/x86/libdns_sd1/libdns_sd1-379.32.1-1
@@ -4,7 +4,7 @@
 <title>libdns_sd1: Bonjour Zeroconf implementation</title>
 </head>
 <body>
-<h1>libdns_sd1: Bonjour Zeroconf implementation</h1>
+<h1><a href="/packages/summary/libdns_sd1.html">libdns_sd1</a>: Bonjour Zeroconf implementation</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/mDNSResponder-src/mDNSResponder-379.32.1-1-src b/test/testdata/htdocs.expected/x86/mDNSResponder-src/mDNSResponder-379.32.1-1-src
index 6b9e6ce..099b395 100644
--- a/test/testdata/htdocs.expected/x86/mDNSResponder-src/mDNSResponder-379.32.1-1-src
+++ b/test/testdata/htdocs.expected/x86/mDNSResponder-src/mDNSResponder-379.32.1-1-src
@@ -4,7 +4,7 @@
 <title>mDNSResponder-src: Bonjour Zeroconf implementation (source)</title>
 </head>
 <body>
-<h1>mDNSResponder-src: Bonjour Zeroconf implementation (source)</h1>
+<h1><a href="/packages/summary/mDNSResponder-src.html">mDNSResponder-src</a>: Bonjour Zeroconf implementation (source)</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/mDNSResponder/mDNSResponder-379.32.1-1 b/test/testdata/htdocs.expected/x86/mDNSResponder/mDNSResponder-379.32.1-1
index 8302d56..e19a2f5 100644
--- a/test/testdata/htdocs.expected/x86/mDNSResponder/mDNSResponder-379.32.1-1
+++ b/test/testdata/htdocs.expected/x86/mDNSResponder/mDNSResponder-379.32.1-1
@@ -4,7 +4,7 @@
 <title>mDNSResponder: Bonjour Zeroconf implementation</title>
 </head>
 <body>
-<h1>mDNSResponder: Bonjour Zeroconf implementation</h1>
+<h1><a href="/packages/summary/mDNSResponder.html">mDNSResponder</a>: Bonjour Zeroconf implementation</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/obs-a-src/obs-a-1.0-1-src b/test/testdata/htdocs.expected/x86/obs-a-src/obs-a-1.0-1-src
index e33509d..f4bb3fa 100644
--- a/test/testdata/htdocs.expected/x86/obs-a-src/obs-a-1.0-1-src
+++ b/test/testdata/htdocs.expected/x86/obs-a-src/obs-a-1.0-1-src
@@ -4,7 +4,7 @@
 <title>obs-a-src: obsolete package A (source)</title>
 </head>
 <body>
-<h1>obs-a-src: obsolete package A (source)</h1>
+<h1><a href="/packages/summary/obs-a-src.html">obs-a-src</a>: obsolete package A (source)</h1>
 <pre>
     2017-05-22 13:04          82 test-a-1.0-1.hint
 </pre>
diff --git a/test/testdata/htdocs.expected/x86/obs-a/obs-a-1.0-1 b/test/testdata/htdocs.expected/x86/obs-a/obs-a-1.0-1
index 5fd9229..619a6b6 100644
--- a/test/testdata/htdocs.expected/x86/obs-a/obs-a-1.0-1
+++ b/test/testdata/htdocs.expected/x86/obs-a/obs-a-1.0-1
@@ -4,7 +4,7 @@
 <title>obs-a: obsolete package A</title>
 </head>
 <body>
-<h1>obs-a: obsolete package A</h1>
+<h1><a href="/packages/summary/obs-a.html">obs-a</a>: obsolete package A</h1>
 <pre>
     2017-05-22 13:04          82 test-a-1.0-1.hint
 </pre>
diff --git a/test/testdata/htdocs.expected/x86/obs-b-src/obs-b-1.0-1-src b/test/testdata/htdocs.expected/x86/obs-b-src/obs-b-1.0-1-src
index ad1d017..4a47d77 100644
--- a/test/testdata/htdocs.expected/x86/obs-b-src/obs-b-1.0-1-src
+++ b/test/testdata/htdocs.expected/x86/obs-b-src/obs-b-1.0-1-src
@@ -4,7 +4,7 @@
 <title>obs-b-src: obsolete package B (source)</title>
 </head>
 <body>
-<h1>obs-b-src: obsolete package B (source)</h1>
+<h1><a href="/packages/summary/obs-b-src.html">obs-b-src</a>: obsolete package B (source)</h1>
 <pre>
     2017-05-22 13:04          82 test-a-1.0-1.hint
 </pre>
diff --git a/test/testdata/htdocs.expected/x86/obs-b/obs-b-1.0-1 b/test/testdata/htdocs.expected/x86/obs-b/obs-b-1.0-1
index d7f6187..5dcd26c 100644
--- a/test/testdata/htdocs.expected/x86/obs-b/obs-b-1.0-1
+++ b/test/testdata/htdocs.expected/x86/obs-b/obs-b-1.0-1
@@ -4,7 +4,7 @@
 <title>obs-b: obsolete package B</title>
 </head>
 <body>
-<h1>obs-b: obsolete package B</h1>
+<h1><a href="/packages/summary/obs-b.html">obs-b</a>: obsolete package B</h1>
 <pre>
     2017-05-22 13:04          82 test-a-1.0-1.hint
 </pre>
diff --git a/test/testdata/htdocs.expected/x86/openssh-src/openssh-7.2p2-1-src b/test/testdata/htdocs.expected/x86/openssh-src/openssh-7.2p2-1-src
index 11ab8f7..0fe8a4e 100644
--- a/test/testdata/htdocs.expected/x86/openssh-src/openssh-7.2p2-1-src
+++ b/test/testdata/htdocs.expected/x86/openssh-src/openssh-7.2p2-1-src
@@ -4,7 +4,7 @@
 <title>openssh-src: The OpenSSH server and client programs (source)</title>
 </head>
 <body>
-<h1>openssh-src: The OpenSSH server and client programs (source)</h1>
+<h1><a href="/packages/summary/openssh-src.html">openssh-src</a>: The OpenSSH server and client programs (source)</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/openssh/openssh-7.2p2-1 b/test/testdata/htdocs.expected/x86/openssh/openssh-7.2p2-1
index cdf9790..82e73cc 100644
--- a/test/testdata/htdocs.expected/x86/openssh/openssh-7.2p2-1
+++ b/test/testdata/htdocs.expected/x86/openssh/openssh-7.2p2-1
@@ -4,7 +4,7 @@
 <title>openssh: The OpenSSH server and client programs</title>
 </head>
 <body>
-<h1>openssh: The OpenSSH server and client programs</h1>
+<h1><a href="/packages/summary/openssh.html">openssh</a>: The OpenSSH server and client programs</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only-src/per-version-replacement-hint-only-1.0-1-src b/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only-src/per-version-replacement-hint-only-1.0-1-src
index bef865b..388bd92 100644
--- a/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only-src/per-version-replacement-hint-only-1.0-1-src
+++ b/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only-src/per-version-replacement-hint-only-1.0-1-src
@@ -4,7 +4,7 @@
 <title>per-version-replacement-hint-only-src: Per-version hint test package (source)</title>
 </head>
 <body>
-<h1>per-version-replacement-hint-only-src: Per-version hint test package (source)</h1>
+<h1><a href="/packages/summary/per-version-replacement-hint-only-src.html">per-version-replacement-hint-only-src</a>: Per-version hint test package (source)</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1 b/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1
index 11a687b..8cf7abe 100644
--- a/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1
+++ b/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1
@@ -4,7 +4,7 @@
 <title>per-version-replacement-hint-only: Per-version hint test package</title>
 </head>
 <body>
-<h1>per-version-replacement-hint-only: Per-version hint test package</h1>
+<h1><a href="/packages/summary/per-version-replacement-hint-only.html">per-version-replacement-hint-only</a>: Per-version hint test package</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/per-version-src/per-version-4.0-1-src b/test/testdata/htdocs.expected/x86/per-version-src/per-version-4.0-1-src
index a43c063..87e9ca1 100644
--- a/test/testdata/htdocs.expected/x86/per-version-src/per-version-4.0-1-src
+++ b/test/testdata/htdocs.expected/x86/per-version-src/per-version-4.0-1-src
@@ -4,7 +4,7 @@
 <title>per-version-src: Per-version hint test package (source)</title>
 </head>
 <body>
-<h1>per-version-src: Per-version hint test package (source)</h1>
+<h1><a href="/packages/summary/per-version-src.html">per-version-src</a>: Per-version hint test package (source)</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/per-version-src/per-version-4.8-1-src b/test/testdata/htdocs.expected/x86/per-version-src/per-version-4.8-1-src
index a43c063..87e9ca1 100644
--- a/test/testdata/htdocs.expected/x86/per-version-src/per-version-4.8-1-src
+++ b/test/testdata/htdocs.expected/x86/per-version-src/per-version-4.8-1-src
@@ -4,7 +4,7 @@
 <title>per-version-src: Per-version hint test package (source)</title>
 </head>
 <body>
-<h1>per-version-src: Per-version hint test package (source)</h1>
+<h1><a href="/packages/summary/per-version-src.html">per-version-src</a>: Per-version hint test package (source)</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/per-version/per-version-4.0-1 b/test/testdata/htdocs.expected/x86/per-version/per-version-4.0-1
index d7dd06d..aab433e 100644
--- a/test/testdata/htdocs.expected/x86/per-version/per-version-4.0-1
+++ b/test/testdata/htdocs.expected/x86/per-version/per-version-4.0-1
@@ -4,7 +4,7 @@
 <title>per-version: Per-version hint test package</title>
 </head>
 <body>
-<h1>per-version: Per-version hint test package</h1>
+<h1><a href="/packages/summary/per-version.html">per-version</a>: Per-version hint test package</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/per-version/per-version-4.8-1 b/test/testdata/htdocs.expected/x86/per-version/per-version-4.8-1
index d7dd06d..aab433e 100644
--- a/test/testdata/htdocs.expected/x86/per-version/per-version-4.8-1
+++ b/test/testdata/htdocs.expected/x86/per-version/per-version-4.8-1
@@ -4,7 +4,7 @@
 <title>per-version: Per-version hint test package</title>
 </head>
 <body>
-<h1>per-version: Per-version hint test package</h1>
+<h1><a href="/packages/summary/per-version.html">per-version</a>: Per-version hint test package</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL-src/perl-Net-SMTP-SSL-1.01-1-src b/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL-src/perl-Net-SMTP-SSL-1.01-1-src
index 806be54..6aff96f 100644
--- a/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL-src/perl-Net-SMTP-SSL-1.01-1-src
+++ b/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL-src/perl-Net-SMTP-SSL-1.01-1-src
@@ -4,7 +4,7 @@
 <title>perl-Net-SMTP-SSL-src: Perl distribution Net-SMTP-SSL (source)</title>
 </head>
 <body>
-<h1>perl-Net-SMTP-SSL-src: Perl distribution Net-SMTP-SSL (source)</h1>
+<h1><a href="/packages/summary/perl-Net-SMTP-SSL-src.html">perl-Net-SMTP-SSL-src</a>: Perl distribution Net-SMTP-SSL (source)</h1>
 <pre>
     2015-06-26 19:10           0 perl-Net-SMTP-SSL-1.03-1.src/
     2015-06-26 19:10        2271 perl-Net-SMTP-SSL-1.03-1.src/Net-SMTP-SSL-1.03.tar.gz
diff --git a/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL-src/perl-Net-SMTP-SSL-1.02-1-src b/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL-src/perl-Net-SMTP-SSL-1.02-1-src
index 806be54..6aff96f 100644
--- a/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL-src/perl-Net-SMTP-SSL-1.02-1-src
+++ b/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL-src/perl-Net-SMTP-SSL-1.02-1-src
@@ -4,7 +4,7 @@
 <title>perl-Net-SMTP-SSL-src: Perl distribution Net-SMTP-SSL (source)</title>
 </head>
 <body>
-<h1>perl-Net-SMTP-SSL-src: Perl distribution Net-SMTP-SSL (source)</h1>
+<h1><a href="/packages/summary/perl-Net-SMTP-SSL-src.html">perl-Net-SMTP-SSL-src</a>: Perl distribution Net-SMTP-SSL (source)</h1>
 <pre>
     2015-06-26 19:10           0 perl-Net-SMTP-SSL-1.03-1.src/
     2015-06-26 19:10        2271 perl-Net-SMTP-SSL-1.03-1.src/Net-SMTP-SSL-1.03.tar.gz
diff --git a/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL-src/perl-Net-SMTP-SSL-1.03-1-src b/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL-src/perl-Net-SMTP-SSL-1.03-1-src
index 806be54..6aff96f 100644
--- a/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL-src/perl-Net-SMTP-SSL-1.03-1-src
+++ b/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL-src/perl-Net-SMTP-SSL-1.03-1-src
@@ -4,7 +4,7 @@
 <title>perl-Net-SMTP-SSL-src: Perl distribution Net-SMTP-SSL (source)</title>
 </head>
 <body>
-<h1>perl-Net-SMTP-SSL-src: Perl distribution Net-SMTP-SSL (source)</h1>
+<h1><a href="/packages/summary/perl-Net-SMTP-SSL-src.html">perl-Net-SMTP-SSL-src</a>: Perl distribution Net-SMTP-SSL (source)</h1>
 <pre>
     2015-06-26 19:10           0 perl-Net-SMTP-SSL-1.03-1.src/
     2015-06-26 19:10        2271 perl-Net-SMTP-SSL-1.03-1.src/Net-SMTP-SSL-1.03.tar.gz
diff --git a/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.01-1 b/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.01-1
index 9f3632d..62e2f11 100644
--- a/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.01-1
+++ b/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.01-1
@@ -4,7 +4,7 @@
 <title>perl-Net-SMTP-SSL: Perl distribution Net-SMTP-SSL</title>
 </head>
 <body>
-<h1>perl-Net-SMTP-SSL: Perl distribution Net-SMTP-SSL</h1>
+<h1><a href="/packages/summary/perl-Net-SMTP-SSL.html">perl-Net-SMTP-SSL</a>: Perl distribution Net-SMTP-SSL</h1>
 <pre>
     2015-06-26 19:10           0 usr/
     2015-06-26 19:10           0 usr/lib/
diff --git a/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.02-1 b/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.02-1
index 9f3632d..62e2f11 100644
--- a/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.02-1
+++ b/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.02-1
@@ -4,7 +4,7 @@
 <title>perl-Net-SMTP-SSL: Perl distribution Net-SMTP-SSL</title>
 </head>
 <body>
-<h1>perl-Net-SMTP-SSL: Perl distribution Net-SMTP-SSL</h1>
+<h1><a href="/packages/summary/perl-Net-SMTP-SSL.html">perl-Net-SMTP-SSL</a>: Perl distribution Net-SMTP-SSL</h1>
 <pre>
     2015-06-26 19:10           0 usr/
     2015-06-26 19:10           0 usr/lib/
diff --git a/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-1 b/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-1
index 9f3632d..62e2f11 100644
--- a/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-1
+++ b/test/testdata/htdocs.expected/x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-1
@@ -4,7 +4,7 @@
 <title>perl-Net-SMTP-SSL: Perl distribution Net-SMTP-SSL</title>
 </head>
 <body>
-<h1>perl-Net-SMTP-SSL: Perl distribution Net-SMTP-SSL</h1>
+<h1><a href="/packages/summary/perl-Net-SMTP-SSL.html">perl-Net-SMTP-SSL</a>: Perl distribution Net-SMTP-SSL</h1>
 <pre>
     2015-06-26 19:10           0 usr/
     2015-06-26 19:10           0 usr/lib/
diff --git a/test/testdata/htdocs.expected/x86/rpm-doc-src/rpm-doc-4.1-2-src b/test/testdata/htdocs.expected/x86/rpm-doc-src/rpm-doc-4.1-2-src
index aef3d74..d76985b 100644
--- a/test/testdata/htdocs.expected/x86/rpm-doc-src/rpm-doc-4.1-2-src
+++ b/test/testdata/htdocs.expected/x86/rpm-doc-src/rpm-doc-4.1-2-src
@@ -4,7 +4,7 @@
 <title>rpm-doc-src: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line) (source)</title>
 </head>
 <body>
-<h1>rpm-doc-src: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line) (source)</h1>
+<h1><a href="/packages/summary/rpm-doc-src.html">rpm-doc-src</a>: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line) (source)</h1>
 <pre>
     2021-05-03 19:35           0 rpm-4.1.tar.gz
     2021-05-03 19:36           0 rpm-4.1-1.patch
diff --git a/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-4.1-2 b/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-4.1-2
index 8ae10d2..ce2f742 100644
--- a/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-4.1-2
+++ b/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-4.1-2
@@ -4,7 +4,7 @@
 <title>rpm-doc: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)</title>
 </head>
 <body>
-<h1>rpm-doc: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)</h1>
+<h1><a href="/packages/summary/rpm-doc.html">rpm-doc</a>: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)</h1>
 <pre>
     2003-05-02 11:46       25562 usr/man/fr/man8/rpm.8
     2003-05-02 11:46       39721 usr/man/ja/man8/rpm.8
diff --git a/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-999-1 b/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-999-1
index 6ac87cb..fabb93a 100644
--- a/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-999-1
+++ b/test/testdata/htdocs.expected/x86/rpm-doc/rpm-doc-999-1
@@ -4,7 +4,7 @@
 <title>rpm-doc: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)</title>
 </head>
 <body>
-<h1>rpm-doc: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)</h1>
+<h1><a href="/packages/summary/rpm-doc.html">rpm-doc</a>: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)</h1>
 <pre>
 </pre>
 </body>
diff --git a/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-240-1-src b/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-240-1-src
index c7e0926..ce020f9 100644
--- a/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-240-1-src
+++ b/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-240-1-src
@@ -4,7 +4,7 @@
 <title>staleversion-src: Test package for stale version removal (source)</title>
 </head>
 <body>
-<h1>staleversion-src: Test package for stale version removal (source)</h1>
+<h1><a href="/packages/summary/staleversion-src.html">staleversion-src</a>: Test package for stale version removal (source)</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-242-0-src b/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-242-0-src
index c7e0926..ce020f9 100644
--- a/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-242-0-src
+++ b/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-242-0-src
@@ -4,7 +4,7 @@
 <title>staleversion-src: Test package for stale version removal (source)</title>
 </head>
 <body>
-<h1>staleversion-src: Test package for stale version removal (source)</h1>
+<h1><a href="/packages/summary/staleversion-src.html">staleversion-src</a>: Test package for stale version removal (source)</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-243-0-src b/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-243-0-src
index c7e0926..ce020f9 100644
--- a/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-243-0-src
+++ b/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-243-0-src
@@ -4,7 +4,7 @@
 <title>staleversion-src: Test package for stale version removal (source)</title>
 </head>
 <body>
-<h1>staleversion-src: Test package for stale version removal (source)</h1>
+<h1><a href="/packages/summary/staleversion-src.html">staleversion-src</a>: Test package for stale version removal (source)</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-250-0-src b/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-250-0-src
index c7e0926..ce020f9 100644
--- a/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-250-0-src
+++ b/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-250-0-src
@@ -4,7 +4,7 @@
 <title>staleversion-src: Test package for stale version removal (source)</title>
 </head>
 <body>
-<h1>staleversion-src: Test package for stale version removal (source)</h1>
+<h1><a href="/packages/summary/staleversion-src.html">staleversion-src</a>: Test package for stale version removal (source)</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-251-0-src b/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-251-0-src
index c7e0926..ce020f9 100644
--- a/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-251-0-src
+++ b/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-251-0-src
@@ -4,7 +4,7 @@
 <title>staleversion-src: Test package for stale version removal (source)</title>
 </head>
 <body>
-<h1>staleversion-src: Test package for stale version removal (source)</h1>
+<h1><a href="/packages/summary/staleversion-src.html">staleversion-src</a>: Test package for stale version removal (source)</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-260-0-src b/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-260-0-src
index c7e0926..ce020f9 100644
--- a/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-260-0-src
+++ b/test/testdata/htdocs.expected/x86/staleversion-src/staleversion-260-0-src
@@ -4,7 +4,7 @@
 <title>staleversion-src: Test package for stale version removal (source)</title>
 </head>
 <body>
-<h1>staleversion-src: Test package for stale version removal (source)</h1>
+<h1><a href="/packages/summary/staleversion-src.html">staleversion-src</a>: Test package for stale version removal (source)</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/staleversion/staleversion-240-1 b/test/testdata/htdocs.expected/x86/staleversion/staleversion-240-1
index b788d09..986fd3c 100644
--- a/test/testdata/htdocs.expected/x86/staleversion/staleversion-240-1
+++ b/test/testdata/htdocs.expected/x86/staleversion/staleversion-240-1
@@ -4,7 +4,7 @@
 <title>staleversion: Test package for stale version removal</title>
 </head>
 <body>
-<h1>staleversion: Test package for stale version removal</h1>
+<h1><a href="/packages/summary/staleversion.html">staleversion</a>: Test package for stale version removal</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/staleversion/staleversion-242-0 b/test/testdata/htdocs.expected/x86/staleversion/staleversion-242-0
index b788d09..986fd3c 100644
--- a/test/testdata/htdocs.expected/x86/staleversion/staleversion-242-0
+++ b/test/testdata/htdocs.expected/x86/staleversion/staleversion-242-0
@@ -4,7 +4,7 @@
 <title>staleversion: Test package for stale version removal</title>
 </head>
 <body>
-<h1>staleversion: Test package for stale version removal</h1>
+<h1><a href="/packages/summary/staleversion.html">staleversion</a>: Test package for stale version removal</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/staleversion/staleversion-243-0 b/test/testdata/htdocs.expected/x86/staleversion/staleversion-243-0
index b788d09..986fd3c 100644
--- a/test/testdata/htdocs.expected/x86/staleversion/staleversion-243-0
+++ b/test/testdata/htdocs.expected/x86/staleversion/staleversion-243-0
@@ -4,7 +4,7 @@
 <title>staleversion: Test package for stale version removal</title>
 </head>
 <body>
-<h1>staleversion: Test package for stale version removal</h1>
+<h1><a href="/packages/summary/staleversion.html">staleversion</a>: Test package for stale version removal</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/staleversion/staleversion-250-0 b/test/testdata/htdocs.expected/x86/staleversion/staleversion-250-0
index b788d09..986fd3c 100644
--- a/test/testdata/htdocs.expected/x86/staleversion/staleversion-250-0
+++ b/test/testdata/htdocs.expected/x86/staleversion/staleversion-250-0
@@ -4,7 +4,7 @@
 <title>staleversion: Test package for stale version removal</title>
 </head>
 <body>
-<h1>staleversion: Test package for stale version removal</h1>
+<h1><a href="/packages/summary/staleversion.html">staleversion</a>: Test package for stale version removal</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/staleversion/staleversion-251-0 b/test/testdata/htdocs.expected/x86/staleversion/staleversion-251-0
index b788d09..986fd3c 100644
--- a/test/testdata/htdocs.expected/x86/staleversion/staleversion-251-0
+++ b/test/testdata/htdocs.expected/x86/staleversion/staleversion-251-0
@@ -4,7 +4,7 @@
 <title>staleversion: Test package for stale version removal</title>
 </head>
 <body>
-<h1>staleversion: Test package for stale version removal</h1>
+<h1><a href="/packages/summary/staleversion.html">staleversion</a>: Test package for stale version removal</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/staleversion/staleversion-260-0 b/test/testdata/htdocs.expected/x86/staleversion/staleversion-260-0
index b788d09..986fd3c 100644
--- a/test/testdata/htdocs.expected/x86/staleversion/staleversion-260-0
+++ b/test/testdata/htdocs.expected/x86/staleversion/staleversion-260-0
@@ -4,7 +4,7 @@
 <title>staleversion: Test package for stale version removal</title>
 </head>
 <body>
-<h1>staleversion: Test package for stale version removal</h1>
+<h1><a href="/packages/summary/staleversion.html">staleversion</a>: Test package for stale version removal</h1>
 <pre>
     2015-10-11 14:45          26 test/test.1
     2015-10-11 14:45          31 test/test.2
diff --git a/test/testdata/htdocs.expected/x86/test-c-src/test-c-1.0-1-src b/test/testdata/htdocs.expected/x86/test-c-src/test-c-1.0-1-src
index e3bd985..6ca10c5 100644
--- a/test/testdata/htdocs.expected/x86/test-c-src/test-c-1.0-1-src
+++ b/test/testdata/htdocs.expected/x86/test-c-src/test-c-1.0-1-src
@@ -4,7 +4,7 @@
 <title>test-c-src: test package C (source)</title>
 </head>
 <body>
-<h1>test-c-src: test package C (source)</h1>
+<h1><a href="/packages/summary/test-c-src.html">test-c-src</a>: test package C (source)</h1>
 <pre>
     2017-05-22 13:27          82 test-c-0.5-1.hint
 </pre>
diff --git a/test/testdata/htdocs.expected/x86/test-c/test-c-1.0-1 b/test/testdata/htdocs.expected/x86/test-c/test-c-1.0-1
index f5730e6..8569e54 100644
--- a/test/testdata/htdocs.expected/x86/test-c/test-c-1.0-1
+++ b/test/testdata/htdocs.expected/x86/test-c/test-c-1.0-1
@@ -4,7 +4,7 @@
 <title>test-c: test package C</title>
 </head>
 <body>
-<h1>test-c: test package C</h1>
+<h1><a href="/packages/summary/test-c.html">test-c</a>: test package C</h1>
 <pre>
     2017-05-22 13:27          82 test-c-0.5-1.hint
 </pre>
diff --git a/test/testdata/htdocs.expected/x86/test-d-src/test-d-1.0-1-src b/test/testdata/htdocs.expected/x86/test-d-src/test-d-1.0-1-src
index 1551c3f..6ca0f96 100644
--- a/test/testdata/htdocs.expected/x86/test-d-src/test-d-1.0-1-src
+++ b/test/testdata/htdocs.expected/x86/test-d-src/test-d-1.0-1-src
@@ -4,7 +4,7 @@
 <title>test-d-src: test package D (source)</title>
 </head>
 <body>
-<h1>test-d-src: test package D (source)</h1>
+<h1><a href="/packages/summary/test-d-src.html">test-d-src</a>: test package D (source)</h1>
 <pre>
     2017-05-22 18:17          40 test-d-1.0-1.hint
 </pre>
diff --git a/test/testdata/htdocs.expected/x86/test-d/test-d-1.0-1 b/test/testdata/htdocs.expected/x86/test-d/test-d-1.0-1
index e964dd5..4ec6d98 100644
--- a/test/testdata/htdocs.expected/x86/test-d/test-d-1.0-1
+++ b/test/testdata/htdocs.expected/x86/test-d/test-d-1.0-1
@@ -4,7 +4,7 @@
 <title>test-d: test package D</title>
 </head>
 <body>
-<h1>test-d: test package D</h1>
+<h1><a href="/packages/summary/test-d.html">test-d</a>: test package D</h1>
 <pre>
     2017-05-22 18:17          40 test-d-1.0-1.hint
 </pre>
diff --git a/test/testdata/htdocs.expected/x86/test-e-src/test-e-1.0-1-src b/test/testdata/htdocs.expected/x86/test-e-src/test-e-1.0-1-src
index a1b7a2a..ce1aff3 100644
--- a/test/testdata/htdocs.expected/x86/test-e-src/test-e-1.0-1-src
+++ b/test/testdata/htdocs.expected/x86/test-e-src/test-e-1.0-1-src
@@ -4,7 +4,7 @@
 <title>test-e-src: test package E (source)</title>
 </head>
 <body>
-<h1>test-e-src: test package E (source)</h1>
+<h1><a href="/packages/summary/test-e-src.html">test-e-src</a>: test package E (source)</h1>
 <pre>
     2017-05-22 18:17          40 test-d-1.0-1.hint
 </pre>
diff --git a/test/testdata/htdocs.expected/x86/test-e/test-e-1.0-1 b/test/testdata/htdocs.expected/x86/test-e/test-e-1.0-1
index 86b1132..9fef56c 100644
--- a/test/testdata/htdocs.expected/x86/test-e/test-e-1.0-1
+++ b/test/testdata/htdocs.expected/x86/test-e/test-e-1.0-1
@@ -4,7 +4,7 @@
 <title>test-e: test package E</title>
 </head>
 <body>
-<h1>test-e: test package E</h1>
+<h1><a href="/packages/summary/test-e.html">test-e</a>: test package E</h1>
 <pre>
     2017-05-22 18:17          40 test-d-1.0-1.hint
 </pre>
diff --git a/test/testdata/htdocs.expected/x86/testpackage-src/testpackage-0.1-1-src b/test/testdata/htdocs.expected/x86/testpackage-src/testpackage-0.1-1-src
index ea726da..ba14cad 100644
--- a/test/testdata/htdocs.expected/x86/testpackage-src/testpackage-0.1-1-src
+++ b/test/testdata/htdocs.expected/x86/testpackage-src/testpackage-0.1-1-src
@@ -4,7 +4,7 @@
 <title>testpackage-src: A test package (stuff &amp; other stuff) (source)</title>
 </head>
 <body>
-<h1>testpackage-src: A test package (stuff &amp; other stuff) (source)</h1>
+<h1><a href="/packages/summary/testpackage-src.html">testpackage-src</a>: A test package (stuff &amp; other stuff) (source)</h1>
 <pre>
     2016-11-24 22:47        1786 cc1BOI4Z
     2016-11-24 18:14        1786 ccbdRcNC
diff --git a/test/testdata/htdocs.expected/x86/testpackage/testpackage-0.1-1 b/test/testdata/htdocs.expected/x86/testpackage/testpackage-0.1-1
index 430f56a..936b1ee 100644
--- a/test/testdata/htdocs.expected/x86/testpackage/testpackage-0.1-1
+++ b/test/testdata/htdocs.expected/x86/testpackage/testpackage-0.1-1
@@ -4,7 +4,7 @@
 <title>testpackage: A test package (stuff &amp; other stuff)</title>
 </head>
 <body>
-<h1>testpackage: A test package (stuff &amp; other stuff)</h1>
+<h1><a href="/packages/summary/testpackage.html">testpackage</a>: A test package (stuff &amp; other stuff)</h1>
 <pre>
     2016-11-24 22:47        1786 cc1BOI4Z
     2016-11-24 18:14        1786 ccbdRcNC
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.