[calm - Cygwin server-side packaging maintenance script] branch master, updated. 20190530-32-gf92ad1d

jturney@sourceware.org jturney@sourceware.org
Thu Jun 20 16:18:00 GMT 2019




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

commit f92ad1d5c292ed54e7a62f5c52280efab8267f37
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Wed Jun 19 18:26:23 2019 +0100

    Omit maintainer in package summary page if we don't have any details
    
    Also improve the package/maintainer validation we do, to better detect
    non-obsolete, maintainer-less packages.
    
    Also make some unnecessarily absolute URLs relative.

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

commit 7b5e7c5f9a9e981d9165a0486c1407ad9e9b6a09
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon Jun 17 20:01:35 2019 +0100

    Linkify hyperlinks in ldesc in package summary page
    
    Also move where we do html escaping, so it doesn't interact with
    formatting of line-breaks in ldesc

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

commit 65fee8305bcab558831f89750c1690298a210895
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon Jun 17 11:43:34 2019 +0100

    Clarify messages which can appear as a consequence of another error
    
    Clarify messages which can appear as a consequence of another error in a
    different package. (We don't distinguish between missing and errored
    packages, so this is the best we can do, at the moment.)

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

commit 9d3908e05391a205ebcdb923d2ffdf9fa8687f50
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Sun Jun 16 23:39:05 2019 +0100

    Round file size up in package summary
    
    Round the file size up in package summary (so tiny, but non-empty
    packages are reported as 1kB, while empty packages are still reported as
    0kB)

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

commit 3a2efe206ea6879cdf0dfac252a9f1f70d6e9638
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Sun Jun 16 23:18:24 2019 +0100

    Add alphabetic shortcuts to package list

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

commit 5a0661fd16b9af1663ab6b8676df0b35616604ae
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon Jun 10 19:58:03 2019 +0100

    Drop some accomodations for sdesc:-less packages
    
    Also use sdesc, rather than package name, in place of an absent ldesc in
    package summary

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

commit 4a35a245b35b5817c772eda941b45d06ffacb01f
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Sun Jun 9 21:13:35 2019 +0100

    Don't allow hint file to consist of just 'skip:'
    
    Historically, this was allowed for a source-only package, but source
    packages not having a sdesc: is now inconvenient.
    
    For uploads, this should be no great hardship, as we already suggest
    cygport >= 0.23.0 for pvr.hint generation.
    
    'calm-tool fix-skip-only-hint' can be used on an existing relarea.

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

commit c1d428b24f352cbb1f92ceae9b279bcffe128e50
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Tue Jun 11 17:57:22 2019 +0100

    packages.inc doesn't need execute permissions

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

commit 46a115f52f38ae46f0e32b6956a55a5b5c2e91bd
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Tue Jun 11 13:26:19 2019 +0100

    Factor out os.makedirs wrapper


Diff:
---
 calm/calm.py                                       |    6 +-
 calm/dedupsrc.py                                   |    6 +-
 calm/hint.py                                       |    8 ++-
 calm/movelist.py                                   |   11 +--
 calm/package.py                                    |   19 +++--
 calm/past_mistakes.py                              |   11 +++
 calm/pkg2html.py                                   |   77 ++++++++++++--------
 calm/utils.py                                      |   13 ++++
 test/testdata/htdocs.expected/packages.inc         |   35 ++++++---
 test/testdata/htdocs.expected/summary/arc.html     |    4 +-
 .../htdocs.expected/summary/base-cygwin.html       |    8 +-
 test/testdata/htdocs.expected/summary/corrupt.html |    6 +-
 .../htdocs.expected/summary/cygwin-debuginfo.html  |   10 ++--
 .../htdocs.expected/summary/cygwin-devel.html      |   10 ++--
 test/testdata/htdocs.expected/summary/cygwin.html  |   16 ++--
 .../testdata/htdocs.expected/summary/keychain.html |    8 +-
 .../htdocs.expected/summary/libdns_sd-devel.html   |    6 +-
 .../htdocs.expected/summary/libdns_sd1.html        |    6 +-
 .../htdocs.expected/summary/mDNSResponder.html     |    8 +-
 test/testdata/htdocs.expected/summary/obs-a.html   |   10 ++--
 test/testdata/htdocs.expected/summary/obs-b.html   |   10 ++--
 test/testdata/htdocs.expected/summary/openssh.html |    8 +-
 .../summary/per-version-replacement-hint-only.html |    8 +-
 .../htdocs.expected/summary/per-version.html       |   12 ++--
 .../htdocs.expected/summary/perl-Net-SMTP-SSL.html |   10 ++--
 test/testdata/htdocs.expected/summary/rpm-doc.html |   10 +--
 .../htdocs.expected/summary/staleversion.html      |   28 ++++----
 test/testdata/htdocs.expected/summary/test-c.html  |   10 ++--
 test/testdata/htdocs.expected/summary/test-d.html  |   10 ++--
 test/testdata/htdocs.expected/summary/test-e.html  |   10 ++--
 .../htdocs.expected/summary/testpackage.html       |    4 +-
 31 files changed, 221 insertions(+), 177 deletions(-)

diff --git a/calm/calm.py b/calm/calm.py
index 0ff63ec..28e15e3 100755
--- a/calm/calm.py
+++ b/calm/calm.py
@@ -75,6 +75,7 @@ from . import pkg2html
 from . import queue
 from . import setup_exe
 from . import uploads
+from . import utils
 
 
 #
@@ -619,10 +620,7 @@ def mail_logs(enabled, toaddrs, subject, thresholdLevel, retainLevel=None):
 
 def logging_setup(args):
     # set up logging to a file
-    try:
-        os.makedirs(args.logdir, exist_ok=True)
-    except FileExistsError:
-        pass
+    utils.makedirs(args.logdir)
     rfh = logging.handlers.TimedRotatingFileHandler(os.path.join(args.logdir, 'calm.log'), backupCount=48, when='midnight')
     rfh.setFormatter(logging.Formatter('%(asctime)s - %(levelname)-8s - %(message)s'))
     rfh.setLevel(logging.DEBUG)
diff --git a/calm/dedupsrc.py b/calm/dedupsrc.py
index d8a8e84..4bf48ea 100644
--- a/calm/dedupsrc.py
+++ b/calm/dedupsrc.py
@@ -35,6 +35,7 @@ import sys
 
 from . import common_constants
 from . import hint
+from . import utils
 
 binary_only_hints = ['requires', 'depends', 'obsoletes', 'external-source']
 
@@ -142,10 +143,7 @@ def dedup(archive, relarea):
         return 1
 
     # ensure target directory exists
-    try:
-        os.makedirs(os.path.join(relarea, 'src', path, p + '-src'))
-    except FileExistsError:
-        pass
+    utils.makedirs(os.path.join(relarea, 'src', path, p + '-src'))
 
     # write .hint file for new -src package
     src_hints = copy.copy(hints['x86'])
diff --git a/calm/hint.py b/calm/hint.py
index c340b94..5b050a7 100755
--- a/calm/hint.py
+++ b/calm/hint.py
@@ -276,10 +276,12 @@ def hint_file_parse(fn, kind):
                 else:
                     errors.append("unknown construct '%s' at line %d" % (item, i))
 
-            # for the pvr kind, if 'skip' isn't present, 'category' and
-            # 'sdesc' must be
+            if ('skip' in hints) and (len(hints) == 1):
+                errors.append("hint only contains skip: key, please update to cygport >= 0.22.0")
+
+            # for the pvr kind, 'category' and 'sdesc' must be present
             # XXX: genini also requires 'requires' but that seems wrong
-            if 'skip' not in hints and kind == pvr:
+            if kind == pvr:
                 mandatory = ['category', 'sdesc']
                 for k in mandatory:
                     if k not in hints:
diff --git a/calm/movelist.py b/calm/movelist.py
index 8fb682a..bf6268e 100644
--- a/calm/movelist.py
+++ b/calm/movelist.py
@@ -25,6 +25,7 @@ import logging
 import os
 
 from collections import defaultdict
+from . import utils
 
 
 #
@@ -54,10 +55,7 @@ class MoveList(object):
         for p in sorted(self.movelist):
             logging.debug("mkdir %s" % os.path.join(todir, p))
             if not args.dryrun:
-                try:
-                    os.makedirs(os.path.join(todir, p), exist_ok=True)
-                except FileExistsError:
-                    pass
+                utils.makedirs(os.path.join(todir, p))
             logging.debug("move from '%s' to '%s':" % (os.path.join(fromdir, p), os.path.join(todir, p)))
             for f in sorted(self.movelist[p]):
                 if os.path.exists(os.path.join(fromdir, p, f)):
@@ -98,10 +96,7 @@ class MoveList(object):
         for p in sorted(self.movelist):
             logging.debug("mkdir %s" % os.path.join(todir, p))
             if not args.dryrun:
-                try:
-                    os.makedirs(os.path.join(todir, p), exist_ok=True)
-                except FileExistsError:
-                    pass
+                utils.makedirs(os.path.join(todir, p))
             logging.debug("copy from '%s' to '%s':" % (os.path.join(fromdir, p), os.path.join(todir, p)))
             for f in sorted(self.movelist[p]):
                 if os.path.exists(os.path.join(fromdir, p, f)):
diff --git a/calm/package.py b/calm/package.py
index 7e7bb6a..008d01c 100755
--- a/calm/package.py
+++ b/calm/package.py
@@ -448,7 +448,7 @@ def validate_packages(args, packages):
                         # disable-check option says that's ok)
                         if r not in packages:
                             if okmissing not in getattr(args, 'disable_check', []):
-                                logging.error("package '%s' version '%s' %s nonexistent package '%s'" % (p, v, c, r))
+                                logging.error("package '%s' version '%s' %s nonexistent or errored package '%s'" % (p, v, c, r))
                                 error = True
                             continue
 
@@ -461,7 +461,7 @@ def validate_packages(args, packages):
             if 'external-source' in hints:
                 e = hints['external-source']
                 if e not in packages:
-                    logging.error("package '%s' version '%s' refers to nonexistent external-source '%s'" % (p, v, e))
+                    logging.error("package '%s' version '%s' refers to nonexistent or errored external-source '%s'" % (p, v, e))
                     error = True
 
         packages[p].vermap = defaultdict(defaultdict)
@@ -807,15 +807,20 @@ def validate_package_maintainers(args, packages):
 
     # validate that all packages are in the package list
     for p in sorted(packages):
-        # ignore skip packages
-        if packages[p].skip:
-            continue
         # ignore obsolete packages
         if any(['_obsolete' in packages[p].version_hints[vr].get('category', '') for vr in packages[p].version_hints]):
             continue
+        # validate that the package is in a path which starts with something in the package list
         if not is_in_package_list(packages[p].pkgpath, all_packages):
-            logging.error("package '%s' is not in the package list" % (p))
+            logging.error("package '%s' on path '%s', which doesn't start with a package in the package list" % (p, packages[p].pkgpath))
             error = True
+        # validate that the source package has a maintainer
+        bv = packages[p].best_version
+        es = packages[p].version_hints[bv].get('external-source', p)
+        if es not in all_packages and p not in all_packages:
+            if bv not in past_mistakes.maint_anomalies.get(p, []):
+                logging.error("package '%s' is not obsolete, but has no maintainer" % (p))
+                error = True
 
     return error
 
@@ -1051,7 +1056,7 @@ def write_repo_json(args, packages, f):
         d = {
             'name': pn,
             'versions': versions,
-            'summary': po.version_hints[bv].get('sdesc', '').strip('"'),
+            'summary': po.version_hints[bv]['sdesc'].strip('"'),
             'subpackages': [{'name': sp, 'categories': package(sp).version_hints[package(sp).best_version].get('category', '').split()} for sp in po.is_used_by],
             'arches': arches,
         }
diff --git a/calm/past_mistakes.py b/calm/past_mistakes.py
index 9a04f3d..31bcb0d 100644
--- a/calm/past_mistakes.py
+++ b/calm/past_mistakes.py
@@ -169,3 +169,14 @@ mtime_anomalies = [
     'subversion-ruby',
     'subversion-tools',
 ]
+
+# packages with maintainer anomalies
+maint_anomalies = {
+    'libelf0': ['0.8.13-2'],  # libelf is called libelf0 in x86 arch
+    'libelf0-devel': ['0.8.13-2'],
+    'ksnapshot-debuginfo': ['15.04.3-1'],  # should be obsoleted by spectacle(-debuginfo)
+    'man-debuginfo': ['1.6g-2'],  # should be obsoleted by man-db(-debuginfo)
+    'procps-debuginfo': ['3.2.8-5'],  # should be obsoleted by procps-ng(-debuginfo)
+    'python-debuginfo': ['2.7.12-1'],  # should be obsoleted by python2(-debuginfo)
+    'transfig-debuginfo': ['3.2.5e-2'],  # should be obsoleted by xfig(-debuginfo)
+}
diff --git a/calm/pkg2html.py b/calm/pkg2html.py
index a74f913..e5c3c06 100755
--- a/calm/pkg2html.py
+++ b/calm/pkg2html.py
@@ -44,8 +44,10 @@ import glob
 import html
 import itertools
 import logging
+import math
 import os
 import re
+import string
 import sys
 import tarfile
 import textwrap
@@ -61,46 +63,39 @@ from . import utils
 #
 # get sdesc for a package
 #
-# some source-only packages don't have an sdesc, since they consist of just
-# 'skip':', in which case we try to make a reasonable one
-#
-
 def sdesc(packages, p, bv):
-    if 'sdesc' in packages[p].version_hints[bv]:
-        header = packages[p].version_hints[bv]['sdesc']
-    else:
-        header = p
-
-    return header.strip('"')
+    header = packages[p].version_hints[bv]['sdesc']
+    header = header.strip('"')
+    return html.escape(header, quote=False)
 
 
+#
 # ditto for ldesc
-
+#
 def ldesc(packages, p, bv):
     if 'ldesc' in packages[p].version_hints[bv]:
         header = packages[p].version_hints[bv]['ldesc']
     else:
-        header = p
+        return sdesc(packages, p, bv)
 
     header = header.strip('"')
+    # escape html entities
+    header = html.escape(header, quote=False)
     header = header.replace('\n\n', '\n<br>\n')
     # try to recognize things which look like bullet points
     header = re.sub(r'\n(\s*[*-]\s)', r'<br>\n\1', header)
+    # linkify things which look like hyperlinks
+    header = re.sub(r'http(s|)://[^\s\)]*', r'<a href="\g<0>">\g<0></a>', header)
 
     return header
 
 
+#
 # ensure a directory exists
 #
-# for some versions of python, os.makedirs() can still raise FileExistsError
-# even when exists_ok=True, if the directory mode is not as expected.
-
 def ensure_dir_exists(args, path):
     if not args.dryrun:
-        try:
-            os.makedirs(path, exist_ok=True)
-        except FileExistsError:
-            pass
+        utils.makedirs(path)
         os.chmod(path, 0o755)
 
 
@@ -177,8 +172,8 @@ def update_package_listings(args, packages):
                     <!--#include virtual="/top.html" -->
                     <h1>Package: %s</h1>''' % (title, p)), file=f)
 
-                    print('<span class="detail">summary</span>: %s<br><br>' % html.escape(sdesc(arch_packages, p, bv), quote=False), file=f)
-                    print('<span class="detail">description</span>: %s<br><br>' % html.escape(ldesc(arch_packages, p, bv), quote=False), file=f)
+                    print('<span class="detail">summary</span>: %s<br><br>' % sdesc(arch_packages, p, bv), file=f)
+                    print('<span class="detail">description</span>: %s<br><br>' % ldesc(arch_packages, p, bv), file=f)
                     print('<span class="detail">categories</span>: %s<br><br>' % arch_packages[p].version_hints[bv].get('category', ''), file=f)
 
                     for key in ['depends', 'obsoletes', 'provides', 'conflicts', 'build-depends']:
@@ -197,11 +192,13 @@ def update_package_listings(args, packages):
                         m = 'ORPHANED'
                     else:
                         m = ', '.join(sorted(pkg_maintainers[es]))
-                    print('<span class="detail">maintainer(s)</span>: %s ' % m, file=f)
-                    print(textwrap.dedent('''\
-                    <span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-                    <a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>'''), file=f)
-                    print('<br><br>', file=f)
+
+                    if m:
+                        print('<span class="detail">maintainer(s)</span>: %s ' % m, file=f)
+                        print(textwrap.dedent('''\
+                        <span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+                        <a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>'''), file=f)
+                        print('<br><br>', file=f)
 
                     print('<ul>', file=f)
                     for arch in sorted(packages):
@@ -216,7 +213,7 @@ def update_package_listings(args, packages):
                                 if category not in p.vermap[v]:
                                     return
                                 t = p.vermap[v][category]
-                                size = round(p.tar(v, category).size / 1024)
+                                size = int(math.ceil(p.tar(v, category).size / 1024))
                                 name = v if category == 'install' else v + ' (source)'
                                 target = "%s-%s" % (pn, v) + ('' if category == 'install' else '-src')
                                 test = 'test' if 'test' in p.version_hints[v] else 'stable'
@@ -247,10 +244,22 @@ def update_package_listings(args, packages):
     logging.debug('writing %s' % packages_inc)
     if not args.dryrun:
         with open(packages_inc, 'w') as index:
-            os.fchmod(index.fileno(), 0o755)
+            os.fchmod(index.fileno(), 0o644)
+
+            jumplist = set()
+            for p in package_list:
+                c = p[0].lower()
+                if c in string.ascii_lowercase:
+                    jumplist.add(c)
+
+            print('<p class="center">', file=index)
+            print(' - \n'.join(['<a href="#%s">%s</a>' % (c, c) for c in sorted(jumplist)]), file=index)
+            print('</p>', file=index)
+
             print('<table class="pkglist">', file=index)
 
             first = ' class="pkgname"'
+            jump = ''
             for p in sorted(package_list, key=package.sort_key):
                 if p.endswith('-debuginfo'):
                     continue
@@ -267,8 +276,14 @@ def update_package_listings(args, packages):
                 bv = arch_packages[p].best_version
                 header = sdesc(arch_packages, p, bv)
 
-                print('<tr><td%s><a href="summary/%s.html">%s</a></td><td>%s</td></tr>' %
-                      (first, p, p, html.escape(header, quote=False)),
+                anchor = ''
+                if jump != p[0].lower():
+                    jump = p[0].lower()
+                    if jump in jumplist:
+                        anchor = ' id="%s"' % (jump)
+
+                print('<tr%s><td%s><a href="summary/%s.html">%s</a></td><td>%s</td></tr>' %
+                      (anchor, first, p, p, header),
                       file=index)
                 first = ''
 
@@ -360,8 +375,6 @@ def write_arch_listing(args, packages, arch):
                         if fver.endswith('-src'):
                             header = header + " (source code)"
 
-                        header = html.escape(header, quote=False)
-
                         print(textwrap.dedent('''\
                                                  <!DOCTYPE html>
                                                  <html>
diff --git a/calm/utils.py b/calm/utils.py
index 7c33ac7..d6d6e1c 100644
--- a/calm/utils.py
+++ b/calm/utils.py
@@ -38,3 +38,16 @@ def touch(fn, times=None):
             os.utime(fn, times)
     except PermissionError:
         logging.error("couldn't update mtime for %s" % (fn))
+
+
+#
+# ensure a directory exists
+#
+# for some versions of python, os.makedirs() can still raise FileExistsError
+# even when exists_ok=True, if the directory mode is not as expected.
+#
+def makedirs(name):
+    try:
+        os.makedirs(name, exist_ok=True)
+    except FileExistsError:
+        pass
diff --git a/test/testdata/htdocs.expected/packages.inc b/test/testdata/htdocs.expected/packages.inc
index 0ed68aa..25a317f 100755
--- a/test/testdata/htdocs.expected/packages.inc
+++ b/test/testdata/htdocs.expected/packages.inc
@@ -1,22 +1,35 @@
+<p class="center">
+<a href="#a">a</a> - 
+<a href="#b">b</a> - 
+<a href="#c">c</a> - 
+<a href="#k">k</a> - 
+<a href="#l">l</a> - 
+<a href="#m">m</a> - 
+<a href="#o">o</a> - 
+<a href="#p">p</a> - 
+<a href="#r">r</a> - 
+<a href="#s">s</a> - 
+<a href="#t">t</a>
+</p>
 <table class="pkglist">
-<tr><td class="pkgname"><a href="summary/arc.html">arc</a></td><td>The ARC archive utility</td></tr>
-<tr><td><a href="summary/base-cygwin.html">base-cygwin</a></td><td>Initial base installation helper script</td></tr>
-<tr><td><a href="summary/corrupt.html">corrupt</a></td><td>A corrupt package</td></tr>
+<tr id="a"><td class="pkgname"><a href="summary/arc.html">arc</a></td><td>The ARC archive utility</td></tr>
+<tr id="b"><td><a href="summary/base-cygwin.html">base-cygwin</a></td><td>Initial base installation helper script</td></tr>
+<tr id="c"><td><a href="summary/corrupt.html">corrupt</a></td><td>A corrupt package</td></tr>
 <tr><td><a href="summary/cygwin.html">cygwin</a></td><td>The UNIX emulation engine</td></tr>
 <tr><td><a href="summary/cygwin-devel.html">cygwin-devel</a></td><td>Core development files</td></tr>
-<tr><td><a href="summary/keychain.html">keychain</a></td><td>Key manager for OpenSSH</td></tr>
-<tr><td><a href="summary/libdns_sd-devel.html">libdns_sd-devel</a></td><td>Bonjour Zeroconf implementation</td></tr>
+<tr id="k"><td><a href="summary/keychain.html">keychain</a></td><td>Key manager for OpenSSH</td></tr>
+<tr id="l"><td><a href="summary/libdns_sd-devel.html">libdns_sd-devel</a></td><td>Bonjour Zeroconf implementation</td></tr>
 <tr><td><a href="summary/libdns_sd1.html">libdns_sd1</a></td><td>Bonjour Zeroconf implementation</td></tr>
-<tr><td><a href="summary/mDNSResponder.html">mDNSResponder</a></td><td>Bonjour Zeroconf implementation</td></tr>
-<tr><td><a href="summary/obs-a.html">obs-a</a></td><td>obsolete package A</td></tr>
+<tr id="m"><td><a href="summary/mDNSResponder.html">mDNSResponder</a></td><td>Bonjour Zeroconf implementation</td></tr>
+<tr id="o"><td><a href="summary/obs-a.html">obs-a</a></td><td>obsolete package A</td></tr>
 <tr><td><a href="summary/obs-b.html">obs-b</a></td><td>obsolete package B</td></tr>
 <tr><td><a href="summary/openssh.html">openssh</a></td><td>The OpenSSH server and client programs</td></tr>
-<tr><td><a href="summary/per-version.html">per-version</a></td><td>Per-version hint test package</td></tr>
+<tr id="p"><td><a href="summary/per-version.html">per-version</a></td><td>Per-version hint test package</td></tr>
 <tr><td><a href="summary/per-version-replacement-hint-only.html">per-version-replacement-hint-only</a></td><td>Per-version hint test package</td></tr>
 <tr><td><a href="summary/perl-Net-SMTP-SSL.html">perl-Net-SMTP-SSL</a></td><td>Perl distribution Net-SMTP-SSL</td></tr>
-<tr><td><a href="summary/rpm-doc.html">rpm-doc</a></td><td>Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)</td></tr>
-<tr><td><a href="summary/staleversion.html">staleversion</a></td><td>Test package for stale version removal</td></tr>
-<tr><td><a href="summary/test-c.html">test-c</a></td><td>test package C</td></tr>
+<tr id="r"><td><a href="summary/rpm-doc.html">rpm-doc</a></td><td>Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)</td></tr>
+<tr id="s"><td><a href="summary/staleversion.html">staleversion</a></td><td>Test package for stale version removal</td></tr>
+<tr id="t"><td><a href="summary/test-c.html">test-c</a></td><td>test package C</td></tr>
 <tr><td><a href="summary/test-d.html">test-d</a></td><td>test package D</td></tr>
 <tr><td><a href="summary/test-e.html">test-e</a></td><td>test package E</td></tr>
 <tr><td><a href="summary/testpackage.html">testpackage</a></td><td>A test package (stuff & other stuff)</td></tr>
diff --git a/test/testdata/htdocs.expected/summary/arc.html b/test/testdata/htdocs.expected/summary/arc.html
index 2d988b8..009b8f5 100644
--- a/test/testdata/htdocs.expected/summary/arc.html
+++ b/test/testdata/htdocs.expected/summary/arc.html
@@ -20,8 +20,8 @@ the best of packing, squeezing, or crunching is used.<br><br>
 <span class="detail">categories</span>: Archive<br><br>
 <span class="detail">binaries</span>: <a href="arc.html">arc</a><br><br>
 <span class="detail">maintainer(s)</span>: Jari Aalto 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
diff --git a/test/testdata/htdocs.expected/summary/base-cygwin.html b/test/testdata/htdocs.expected/summary/base-cygwin.html
index a0d814d..0ce7e9e 100644
--- a/test/testdata/htdocs.expected/summary/base-cygwin.html
+++ b/test/testdata/htdocs.expected/summary/base-cygwin.html
@@ -15,15 +15,15 @@
 <span class="detail">categories</span>: Base<br><br>
 <span class="detail">binaries</span>: <br><br>
 <span class="detail">maintainer(s)</span>: Corinna Vinschen 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>3.6-1</td><td class="right">0 kB</td><td>[<a href="../x86/base-cygwin/base-cygwin-3.6-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>3.8-1</td><td class="right">0 kB</td><td>[<a href="../x86/base-cygwin/base-cygwin-3.8-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>3.6-1</td><td class="right">1 kB</td><td>[<a href="../x86/base-cygwin/base-cygwin-3.6-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>3.8-1</td><td class="right">1 kB</td><td>[<a href="../x86/base-cygwin/base-cygwin-3.8-1">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/corrupt.html b/test/testdata/htdocs.expected/summary/corrupt.html
index 0b91c3a..d7016dc 100644
--- a/test/testdata/htdocs.expected/summary/corrupt.html
+++ b/test/testdata/htdocs.expected/summary/corrupt.html
@@ -15,14 +15,14 @@
 <span class="detail">categories</span>: Devel<br><br>
 <span class="detail">binaries</span>: <a href="corrupt.html">corrupt</a><br><br>
 <span class="detail">maintainer(s)</span>: Blooey McFooey 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>2.0.0-1</td><td class="right">0 kB</td><td>[<a href="../x86/corrupt/corrupt-2.0.0-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>2.0.0-1</td><td class="right">1 kB</td><td>[<a href="../x86/corrupt/corrupt-2.0.0-1">list of files</a>]</td><td>stable</td></tr>
 <tr><td>2.0.0-1 (source)</td><td class="right">354 kB</td><td>[<a href="../x86/corrupt/corrupt-2.0.0-1-src">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
diff --git a/test/testdata/htdocs.expected/summary/cygwin-debuginfo.html b/test/testdata/htdocs.expected/summary/cygwin-debuginfo.html
index bf4d895..0d613d6 100644
--- a/test/testdata/htdocs.expected/summary/cygwin-debuginfo.html
+++ b/test/testdata/htdocs.expected/summary/cygwin-debuginfo.html
@@ -17,16 +17,16 @@ cygwin package with gdb.<br><br>
 <span class="detail">depends</span>: <a href="cygwin-debuginfo.html">cygwin-debuginfo</a><br><br>
 <span class="detail">source</span>: <a href="cygwin.html">cygwin</a><br><br>
 <span class="detail">maintainer(s)</span>: Corinna Vinschen, Yaakov Selkowitz 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>2.2.0-1</td><td class="right">0 kB</td><td>[<a href="../x86/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>2.2.1-1</td><td class="right">0 kB</td><td>[<a href="../x86/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>2.3.0-0.3</td><td class="right">0 kB</td><td>[<a href="../x86/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3">list of files</a>]</td><td>test</td></tr>
+<tr><td>2.2.0-1</td><td class="right">1 kB</td><td>[<a href="../x86/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>2.2.1-1</td><td class="right">1 kB</td><td>[<a href="../x86/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>2.3.0-0.3</td><td class="right">1 kB</td><td>[<a href="../x86/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3">list of files</a>]</td><td>test</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/cygwin-devel.html b/test/testdata/htdocs.expected/summary/cygwin-devel.html
index 1a443b8..2435a15 100644
--- a/test/testdata/htdocs.expected/summary/cygwin-devel.html
+++ b/test/testdata/htdocs.expected/summary/cygwin-devel.html
@@ -15,16 +15,16 @@
 <span class="detail">categories</span>: Devel<br><br>
 <span class="detail">source</span>: <a href="cygwin.html">cygwin</a><br><br>
 <span class="detail">maintainer(s)</span>: Corinna Vinschen, Yaakov Selkowitz 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>2.2.0-1</td><td class="right">0 kB</td><td>[<a href="../x86/cygwin-devel/cygwin-devel-2.2.0-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>2.2.1-1</td><td class="right">0 kB</td><td>[<a href="../x86/cygwin-devel/cygwin-devel-2.2.1-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>2.3.0-0.3</td><td class="right">0 kB</td><td>[<a href="../x86/cygwin-devel/cygwin-devel-2.3.0-0.3">list of files</a>]</td><td>test</td></tr>
+<tr><td>2.2.0-1</td><td class="right">1 kB</td><td>[<a href="../x86/cygwin-devel/cygwin-devel-2.2.0-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>2.2.1-1</td><td class="right">1 kB</td><td>[<a href="../x86/cygwin-devel/cygwin-devel-2.2.1-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>2.3.0-0.3</td><td class="right">1 kB</td><td>[<a href="../x86/cygwin-devel/cygwin-devel-2.3.0-0.3">list of files</a>]</td><td>test</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/cygwin.html b/test/testdata/htdocs.expected/summary/cygwin.html
index b77856b..c7c16de 100644
--- a/test/testdata/htdocs.expected/summary/cygwin.html
+++ b/test/testdata/htdocs.expected/summary/cygwin.html
@@ -16,19 +16,19 @@
 <span class="detail">depends</span>: <a href="base-cygwin.html">base-cygwin</a><br><br>
 <span class="detail">binaries</span>: <a href="cygwin.html">cygwin</a>, <a href="cygwin-debuginfo.html">cygwin-debuginfo</a>, <a href="cygwin-devel.html">cygwin-devel</a><br><br>
 <span class="detail">maintainer(s)</span>: Corinna Vinschen, Yaakov Selkowitz 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>2.2.0-1</td><td class="right">0 kB</td><td>[<a href="../x86/cygwin/cygwin-2.2.0-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>2.2.0-1 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/cygwin/cygwin-2.2.0-1-src">list of files</a>]</td><td>stable</td></tr>
-<tr><td>2.2.1-1</td><td class="right">0 kB</td><td>[<a href="../x86/cygwin/cygwin-2.2.1-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>2.2.1-1 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/cygwin/cygwin-2.2.1-1-src">list of files</a>]</td><td>stable</td></tr>
-<tr><td>2.3.0-0.3</td><td class="right">0 kB</td><td>[<a href="../x86/cygwin/cygwin-2.3.0-0.3">list of files</a>]</td><td>test</td></tr>
-<tr><td>2.3.0-0.3 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/cygwin/cygwin-2.3.0-0.3-src">list of files</a>]</td><td>test</td></tr>
+<tr><td>2.2.0-1</td><td class="right">1 kB</td><td>[<a href="../x86/cygwin/cygwin-2.2.0-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>2.2.0-1 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/cygwin/cygwin-2.2.0-1-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>2.2.1-1</td><td class="right">1 kB</td><td>[<a href="../x86/cygwin/cygwin-2.2.1-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>2.2.1-1 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/cygwin/cygwin-2.2.1-1-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>2.3.0-0.3</td><td class="right">1 kB</td><td>[<a href="../x86/cygwin/cygwin-2.3.0-0.3">list of files</a>]</td><td>test</td></tr>
+<tr><td>2.3.0-0.3 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/cygwin/cygwin-2.3.0-0.3-src">list of files</a>]</td><td>test</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/keychain.html b/test/testdata/htdocs.expected/summary/keychain.html
index 392083b..96f30f7 100644
--- a/test/testdata/htdocs.expected/summary/keychain.html
+++ b/test/testdata/htdocs.expected/summary/keychain.html
@@ -24,16 +24,16 @@ necessary<br><br>
 <span class="detail">depends</span>: <a href="openssh.html">openssh</a><br><br>
 <span class="detail">binaries</span>: <a href="keychain.html">keychain</a><br><br>
 <span class="detail">maintainer(s)</span>: Jari Aalto 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
 <tr><td>2.6.8-1</td><td class="right">30 kB</td><td>[<a href="../x86/keychain/keychain-2.6.8-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>2.6.8-1 (source)</td><td class="right">35 kB</td><td>[<a href="../x86/keychain/keychain-2.6.8-1-src">list of files</a>]</td><td>stable</td></tr>
-<tr><td>2.7.1-1</td><td class="right">31 kB</td><td>[<a href="../x86/keychain/keychain-2.7.1-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>2.6.8-1 (source)</td><td class="right">36 kB</td><td>[<a href="../x86/keychain/keychain-2.6.8-1-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>2.7.1-1</td><td class="right">32 kB</td><td>[<a href="../x86/keychain/keychain-2.7.1-1">list of files</a>]</td><td>stable</td></tr>
 <tr><td>2.7.1-1 (source)</td><td class="right">132 kB</td><td>[<a href="../x86/keychain/keychain-2.7.1-1-src">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
diff --git a/test/testdata/htdocs.expected/summary/libdns_sd-devel.html b/test/testdata/htdocs.expected/summary/libdns_sd-devel.html
index efa7fef..e28d111 100644
--- a/test/testdata/htdocs.expected/summary/libdns_sd-devel.html
+++ b/test/testdata/htdocs.expected/summary/libdns_sd-devel.html
@@ -18,14 +18,14 @@ industry standard IP protocols.<br><br>
 <span class="detail">depends</span>: <a href="libdns_sd1.html">libdns_sd1</a><br><br>
 <span class="detail">source</span>: <a href="mDNSResponder.html">mDNSResponder</a><br><br>
 <span class="detail">maintainer(s)</span>: Yaakov Selkowitz 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>379.32.1-1</td><td class="right">0 kB</td><td>[<a href="../x86/libdns_sd-devel/libdns_sd-devel-379.32.1-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>379.32.1-1</td><td class="right">1 kB</td><td>[<a href="../x86/libdns_sd-devel/libdns_sd-devel-379.32.1-1">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/libdns_sd1.html b/test/testdata/htdocs.expected/summary/libdns_sd1.html
index 1b1e201..8fe51cd 100644
--- a/test/testdata/htdocs.expected/summary/libdns_sd1.html
+++ b/test/testdata/htdocs.expected/summary/libdns_sd1.html
@@ -17,14 +17,14 @@ industry standard IP protocols.<br><br>
 <span class="detail">categories</span>: Net<br><br>
 <span class="detail">source</span>: <a href="mDNSResponder.html">mDNSResponder</a><br><br>
 <span class="detail">maintainer(s)</span>: Yaakov Selkowitz 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>379.32.1-1</td><td class="right">0 kB</td><td>[<a href="../x86/libdns_sd1/libdns_sd1-379.32.1-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>379.32.1-1</td><td class="right">1 kB</td><td>[<a href="../x86/libdns_sd1/libdns_sd1-379.32.1-1">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/mDNSResponder.html b/test/testdata/htdocs.expected/summary/mDNSResponder.html
index 94788d1..eac93f9 100644
--- a/test/testdata/htdocs.expected/summary/mDNSResponder.html
+++ b/test/testdata/htdocs.expected/summary/mDNSResponder.html
@@ -18,15 +18,15 @@ industry standard IP protocols.<br><br>
 <span class="detail">depends</span>: <a href="libdns_sd1.html">libdns_sd1</a><br><br>
 <span class="detail">binaries</span>: <a href="libdns_sd-devel.html">libdns_sd-devel</a>, <a href="libdns_sd1.html">libdns_sd1</a>, <a href="mDNSResponder.html">mDNSResponder</a><br><br>
 <span class="detail">maintainer(s)</span>: Yaakov Selkowitz 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>379.32.1-1</td><td class="right">0 kB</td><td>[<a href="../x86/mDNSResponder/mDNSResponder-379.32.1-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>379.32.1-1 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/mDNSResponder/mDNSResponder-379.32.1-1-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>379.32.1-1</td><td class="right">1 kB</td><td>[<a href="../x86/mDNSResponder/mDNSResponder-379.32.1-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>379.32.1-1 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/mDNSResponder/mDNSResponder-379.32.1-1-src">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/obs-a.html b/test/testdata/htdocs.expected/summary/obs-a.html
index 0d32039..b3f5ac7 100644
--- a/test/testdata/htdocs.expected/summary/obs-a.html
+++ b/test/testdata/htdocs.expected/summary/obs-a.html
@@ -11,19 +11,19 @@
 <!--#include virtual="/top.html" -->
 <h1>Package: obs-a</h1>
 <span class="detail">summary</span>: obsolete package A<br><br>
-<span class="detail">description</span>: obs-a<br><br>
+<span class="detail">description</span>: obsolete package A<br><br>
 <span class="detail">categories</span>: Devel<br><br>
 <span class="detail">binaries</span>: <a href="obs-a.html">obs-a</a><br><br>
 <span class="detail">maintainer(s)</span>: ORPHANED 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>1.0-1</td><td class="right">0 kB</td><td>[<a href="../x86/obs-a/obs-a-1.0-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>1.0-1 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/obs-a/obs-a-1.0-1-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>1.0-1</td><td class="right">1 kB</td><td>[<a href="../x86/obs-a/obs-a-1.0-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>1.0-1 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/obs-a/obs-a-1.0-1-src">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/obs-b.html b/test/testdata/htdocs.expected/summary/obs-b.html
index 3062af6..436fa94 100644
--- a/test/testdata/htdocs.expected/summary/obs-b.html
+++ b/test/testdata/htdocs.expected/summary/obs-b.html
@@ -11,19 +11,19 @@
 <!--#include virtual="/top.html" -->
 <h1>Package: obs-b</h1>
 <span class="detail">summary</span>: obsolete package B<br><br>
-<span class="detail">description</span>: obs-b<br><br>
+<span class="detail">description</span>: obsolete package B<br><br>
 <span class="detail">categories</span>: Devel<br><br>
 <span class="detail">binaries</span>: <a href="obs-b.html">obs-b</a><br><br>
 <span class="detail">maintainer(s)</span>: ORPHANED 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>1.0-1</td><td class="right">0 kB</td><td>[<a href="../x86/obs-b/obs-b-1.0-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>1.0-1 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/obs-b/obs-b-1.0-1-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>1.0-1</td><td class="right">1 kB</td><td>[<a href="../x86/obs-b/obs-b-1.0-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>1.0-1 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/obs-b/obs-b-1.0-1-src">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/openssh.html b/test/testdata/htdocs.expected/summary/openssh.html
index a8a92be..a2f3b78 100644
--- a/test/testdata/htdocs.expected/summary/openssh.html
+++ b/test/testdata/htdocs.expected/summary/openssh.html
@@ -17,15 +17,15 @@
 <span class="detail">categories</span>: Net<br><br>
 <span class="detail">binaries</span>: <a href="openssh.html">openssh</a><br><br>
 <span class="detail">maintainer(s)</span>: Corinna Vinschen 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>7.2p2-1</td><td class="right">0 kB</td><td>[<a href="../x86/openssh/openssh-7.2p2-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>7.2p2-1 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/openssh/openssh-7.2p2-1-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>7.2p2-1</td><td class="right">1 kB</td><td>[<a href="../x86/openssh/openssh-7.2p2-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>7.2p2-1 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/openssh/openssh-7.2p2-1-src">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/per-version-replacement-hint-only.html b/test/testdata/htdocs.expected/summary/per-version-replacement-hint-only.html
index 277fd3b..8ab2a7f 100644
--- a/test/testdata/htdocs.expected/summary/per-version-replacement-hint-only.html
+++ b/test/testdata/htdocs.expected/summary/per-version-replacement-hint-only.html
@@ -16,15 +16,15 @@
 <span class="detail">depends</span>: <a href="cygwin.html">cygwin</a><br><br>
 <span class="detail">binaries</span>: <a href="per-version-replacement-hint-only.html">per-version-replacement-hint-only</a><br><br>
 <span class="detail">maintainer(s)</span>: Blooey McFooey 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>1.0-1</td><td class="right">0 kB</td><td>[<a href="../x86/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>1.0-1 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>1.0-1</td><td class="right">1 kB</td><td>[<a href="../x86/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>1.0-1 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1-src">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/per-version.html b/test/testdata/htdocs.expected/summary/per-version.html
index fe82cee..3fef454 100644
--- a/test/testdata/htdocs.expected/summary/per-version.html
+++ b/test/testdata/htdocs.expected/summary/per-version.html
@@ -16,17 +16,17 @@
 <span class="detail">depends</span>: <a href="base-cygwin.html">base-cygwin</a><br><br>
 <span class="detail">binaries</span>: <a href="per-version.html">per-version</a><br><br>
 <span class="detail">maintainer(s)</span>: Blooey McFooey 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>4.0-1</td><td class="right">0 kB</td><td>[<a href="../x86/per-version/per-version-4.0-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>4.0-1 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/per-version/per-version-4.0-1-src">list of files</a>]</td><td>stable</td></tr>
-<tr><td>4.8-1</td><td class="right">0 kB</td><td>[<a href="../x86/per-version/per-version-4.8-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>4.8-1 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/per-version/per-version-4.8-1-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>4.0-1</td><td class="right">1 kB</td><td>[<a href="../x86/per-version/per-version-4.0-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>4.0-1 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/per-version/per-version-4.0-1-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>4.8-1</td><td class="right">1 kB</td><td>[<a href="../x86/per-version/per-version-4.8-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>4.8-1 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/per-version/per-version-4.8-1-src">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/perl-Net-SMTP-SSL.html b/test/testdata/htdocs.expected/summary/perl-Net-SMTP-SSL.html
index 700037e..68f5b81 100644
--- a/test/testdata/htdocs.expected/summary/perl-Net-SMTP-SSL.html
+++ b/test/testdata/htdocs.expected/summary/perl-Net-SMTP-SSL.html
@@ -16,18 +16,18 @@ its network operations in order to support encrypted connections.<br><br>
 <span class="detail">categories</span>: Perl<br><br>
 <span class="detail">binaries</span>: <a href="perl-Net-SMTP-SSL.html">perl-Net-SMTP-SSL</a><br><br>
 <span class="detail">maintainer(s)</span>: Blooey McFooey, Yaakov Selkowitz 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>1.01-1</td><td class="right">3 kB</td><td>[<a href="../x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.01-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>1.01-1</td><td class="right">4 kB</td><td>[<a href="../x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.01-1">list of files</a>]</td><td>stable</td></tr>
 <tr><td>1.01-1 (source)</td><td class="right">3 kB</td><td>[<a href="../x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.01-1-src">list of files</a>]</td><td>stable</td></tr>
-<tr><td>1.02-1</td><td class="right">3 kB</td><td>[<a href="../x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.02-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>1.02-1</td><td class="right">4 kB</td><td>[<a href="../x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.02-1">list of files</a>]</td><td>stable</td></tr>
 <tr><td>1.02-1 (source)</td><td class="right">3 kB</td><td>[<a href="../x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.02-1-src">list of files</a>]</td><td>stable</td></tr>
-<tr><td>1.03-1</td><td class="right">3 kB</td><td>[<a href="../x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>1.03-1</td><td class="right">4 kB</td><td>[<a href="../x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-1">list of files</a>]</td><td>stable</td></tr>
 <tr><td>1.03-1 (source)</td><td class="right">3 kB</td><td>[<a href="../x86/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-1-src">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
diff --git a/test/testdata/htdocs.expected/summary/rpm-doc.html b/test/testdata/htdocs.expected/summary/rpm-doc.html
index d7c844f..f56be56 100644
--- a/test/testdata/htdocs.expected/summary/rpm-doc.html
+++ b/test/testdata/htdocs.expected/summary/rpm-doc.html
@@ -11,20 +11,16 @@
 <!--#include virtual="/top.html" -->
 <h1>Package: rpm-doc</h1>
 <span class="detail">summary</span>: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)<br><br>
-<span class="detail">description</span>: rpm-doc<br><br>
+<span class="detail">description</span>: Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)<br><br>
 <span class="detail">categories</span>: _obsolete<br><br>
 <span class="detail">binaries</span>: <a href="rpm-doc.html">rpm-doc</a><br><br>
-<span class="detail">maintainer(s)</span>:  
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
-<br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
 <tr><td>4.1-2</td><td class="right">50 kB</td><td>[<a href="../x86/rpm-doc/rpm-doc-4.1-2">list of files</a>]</td><td>stable</td></tr>
-<tr><td>4.1-2 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/rpm-doc/rpm-doc-4.1-2-src">list of files</a>]</td><td>stable</td></tr>
-<tr><td>999-1</td><td class="right">0 kB</td><td>[<a href="../x86/rpm-doc/rpm-doc-999-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>4.1-2 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/rpm-doc/rpm-doc-4.1-2-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>999-1</td><td class="right">1 kB</td><td>[<a href="../x86/rpm-doc/rpm-doc-999-1">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/staleversion.html b/test/testdata/htdocs.expected/summary/staleversion.html
index a283f53..0f59ea2 100644
--- a/test/testdata/htdocs.expected/summary/staleversion.html
+++ b/test/testdata/htdocs.expected/summary/staleversion.html
@@ -15,25 +15,25 @@
 <span class="detail">categories</span>: Shells Base<br><br>
 <span class="detail">binaries</span>: <a href="staleversion.html">staleversion</a><br><br>
 <span class="detail">maintainer(s)</span>: Blooey McFooey 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>240-1</td><td class="right">0 kB</td><td>[<a href="../x86/staleversion/staleversion-240-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>240-1 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/staleversion/staleversion-240-1-src">list of files</a>]</td><td>stable</td></tr>
-<tr><td>242-0</td><td class="right">0 kB</td><td>[<a href="../x86/staleversion/staleversion-242-0">list of files</a>]</td><td>stable</td></tr>
-<tr><td>242-0 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/staleversion/staleversion-242-0-src">list of files</a>]</td><td>stable</td></tr>
-<tr><td>243-0</td><td class="right">0 kB</td><td>[<a href="../x86/staleversion/staleversion-243-0">list of files</a>]</td><td>stable</td></tr>
-<tr><td>243-0 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/staleversion/staleversion-243-0-src">list of files</a>]</td><td>stable</td></tr>
-<tr><td>250-0</td><td class="right">0 kB</td><td>[<a href="../x86/staleversion/staleversion-250-0">list of files</a>]</td><td>stable</td></tr>
-<tr><td>250-0 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/staleversion/staleversion-250-0-src">list of files</a>]</td><td>stable</td></tr>
-<tr><td>251-0</td><td class="right">0 kB</td><td>[<a href="../x86/staleversion/staleversion-251-0">list of files</a>]</td><td>stable</td></tr>
-<tr><td>251-0 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/staleversion/staleversion-251-0-src">list of files</a>]</td><td>stable</td></tr>
-<tr><td>260-0</td><td class="right">0 kB</td><td>[<a href="../x86/staleversion/staleversion-260-0">list of files</a>]</td><td>test</td></tr>
-<tr><td>260-0 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/staleversion/staleversion-260-0-src">list of files</a>]</td><td>test</td></tr>
+<tr><td>240-1</td><td class="right">1 kB</td><td>[<a href="../x86/staleversion/staleversion-240-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>240-1 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/staleversion/staleversion-240-1-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>242-0</td><td class="right">1 kB</td><td>[<a href="../x86/staleversion/staleversion-242-0">list of files</a>]</td><td>stable</td></tr>
+<tr><td>242-0 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/staleversion/staleversion-242-0-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>243-0</td><td class="right">1 kB</td><td>[<a href="../x86/staleversion/staleversion-243-0">list of files</a>]</td><td>stable</td></tr>
+<tr><td>243-0 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/staleversion/staleversion-243-0-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>250-0</td><td class="right">1 kB</td><td>[<a href="../x86/staleversion/staleversion-250-0">list of files</a>]</td><td>stable</td></tr>
+<tr><td>250-0 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/staleversion/staleversion-250-0-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>251-0</td><td class="right">1 kB</td><td>[<a href="../x86/staleversion/staleversion-251-0">list of files</a>]</td><td>stable</td></tr>
+<tr><td>251-0 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/staleversion/staleversion-251-0-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>260-0</td><td class="right">1 kB</td><td>[<a href="../x86/staleversion/staleversion-260-0">list of files</a>]</td><td>test</td></tr>
+<tr><td>260-0 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/staleversion/staleversion-260-0-src">list of files</a>]</td><td>test</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/test-c.html b/test/testdata/htdocs.expected/summary/test-c.html
index c506b97..188f4b0 100644
--- a/test/testdata/htdocs.expected/summary/test-c.html
+++ b/test/testdata/htdocs.expected/summary/test-c.html
@@ -11,21 +11,21 @@
 <!--#include virtual="/top.html" -->
 <h1>Package: test-c</h1>
 <span class="detail">summary</span>: test package C<br><br>
-<span class="detail">description</span>: test-c<br><br>
+<span class="detail">description</span>: test package C<br><br>
 <span class="detail">categories</span>: Devel<br><br>
 <span class="detail">depends</span>: test-d (>= 1.0), <a href="test-e.html">test-e</a><br><br>
 <span class="detail">obsoletes</span>: <a href="obs-a.html">obs-a</a>, <a href="obs-b.html">obs-b</a><br><br>
 <span class="detail">binaries</span>: <a href="test-c.html">test-c</a><br><br>
 <span class="detail">maintainer(s)</span>: ORPHANED 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>1.0-1</td><td class="right">0 kB</td><td>[<a href="../x86/test-c/test-c-1.0-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>1.0-1 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/test-c/test-c-1.0-1-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>1.0-1</td><td class="right">1 kB</td><td>[<a href="../x86/test-c/test-c-1.0-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>1.0-1 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/test-c/test-c-1.0-1-src">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/test-d.html b/test/testdata/htdocs.expected/summary/test-d.html
index fc139bf..ba3ee0e 100644
--- a/test/testdata/htdocs.expected/summary/test-d.html
+++ b/test/testdata/htdocs.expected/summary/test-d.html
@@ -11,19 +11,19 @@
 <!--#include virtual="/top.html" -->
 <h1>Package: test-d</h1>
 <span class="detail">summary</span>: test package D<br><br>
-<span class="detail">description</span>: test-d<br><br>
+<span class="detail">description</span>: test package D<br><br>
 <span class="detail">categories</span>: Devel<br><br>
 <span class="detail">binaries</span>: <a href="test-d.html">test-d</a><br><br>
 <span class="detail">maintainer(s)</span>: ORPHANED 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>1.0.42590-1</td><td class="right">0 kB</td><td>[<a href="../x86/test-d/test-d-1.0.42590-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>1.0.42590-1 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/test-d/test-d-1.0.42590-1-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>1.0.42590-1</td><td class="right">1 kB</td><td>[<a href="../x86/test-d/test-d-1.0.42590-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>1.0.42590-1 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/test-d/test-d-1.0.42590-1-src">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/test-e.html b/test/testdata/htdocs.expected/summary/test-e.html
index b97a9ba..1360f7d 100644
--- a/test/testdata/htdocs.expected/summary/test-e.html
+++ b/test/testdata/htdocs.expected/summary/test-e.html
@@ -11,20 +11,20 @@
 <!--#include virtual="/top.html" -->
 <h1>Package: test-e</h1>
 <span class="detail">summary</span>: test package E<br><br>
-<span class="detail">description</span>: test-e<br><br>
+<span class="detail">description</span>: test package E<br><br>
 <span class="detail">categories</span>: Devel<br><br>
 <span class="detail">build-depends</span>: libtextcat-devel<br><br>
 <span class="detail">binaries</span>: <a href="test-e.html">test-e</a><br><br>
 <span class="detail">maintainer(s)</span>: ORPHANED 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>
 <table class="pkgtable">
 <tr><th>Version</th><th>Package Size</th><th>Files</th><th>Status</th></tr>
-<tr><td>1.0-1</td><td class="right">0 kB</td><td>[<a href="../x86/test-e/test-e-1.0-1">list of files</a>]</td><td>stable</td></tr>
-<tr><td>1.0-1 (source)</td><td class="right">0 kB</td><td>[<a href="../x86/test-e/test-e-1.0-1-src">list of files</a>]</td><td>stable</td></tr>
+<tr><td>1.0-1</td><td class="right">1 kB</td><td>[<a href="../x86/test-e/test-e-1.0-1">list of files</a>]</td><td>stable</td></tr>
+<tr><td>1.0-1 (source)</td><td class="right">1 kB</td><td>[<a href="../x86/test-e/test-e-1.0-1-src">list of files</a>]</td><td>stable</td></tr>
 </table><br>
 </ul>
 </div>
diff --git a/test/testdata/htdocs.expected/summary/testpackage.html b/test/testdata/htdocs.expected/summary/testpackage.html
index ca5706e..6f6daff 100644
--- a/test/testdata/htdocs.expected/summary/testpackage.html
+++ b/test/testdata/htdocs.expected/summary/testpackage.html
@@ -15,8 +15,8 @@
 <span class="detail">categories</span>: Devel<br><br>
 <span class="detail">binaries</span>: <a href="testpackage.html">testpackage</a><br><br>
 <span class="detail">maintainer(s)</span>: Blooey McFooey 
-<span class="smaller">(Use <a href="https://cygwin.com/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
-<a href="https://cygwin.com/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
+<span class="smaller">(Use <a href="/lists.html#cygwin">the mailing list</a> to report bugs or ask questions.
+<a href="/problems.html#personal-email">Do not contact the maintainer(s) directly</a>.)</span>
 <br><br>
 <ul>
 <li><span class="detail">x86</span></li>



More information about the Cygwin-apps-cvs mailing list