Diff:
---
calm/calm.py | 8 +-
calm/mail-inactive-maintainers.py | 9 ++-
calm/pkg2html.py | 8 +-
calm/repology.py | 49 +++++++----
calm/reports.py | 94 +++++++++++++++++-----
test/testdata/htdocs.expected/summary/arc-src.html | 2 +-
test/testdata/htdocs.expected/summary/arc.html | 2 +-
.../htdocs.expected/summary/base-cygwin.html | 2 +-
.../htdocs.expected/summary/corrupt-src.html | 2 +-
test/testdata/htdocs.expected/summary/corrupt.html | 2 +-
.../htdocs.expected/summary/cygwin-debuginfo.html | 2 +-
.../htdocs.expected/summary/cygwin-devel.html | 2 +-
.../htdocs.expected/summary/cygwin-src.html | 2 +-
test/testdata/htdocs.expected/summary/cygwin.html | 2 +-
.../htdocs.expected/summary/keychain-src.html | 2 +-
.../testdata/htdocs.expected/summary/keychain.html | 2 +-
.../htdocs.expected/summary/libdns_sd-devel.html | 2 +-
.../htdocs.expected/summary/libdns_sd1.html | 2 +-
.../htdocs.expected/summary/mDNSResponder-src.html | 2 +-
.../htdocs.expected/summary/mDNSResponder.html | 2 +-
.../htdocs.expected/summary/openssh-src.html | 2 +-
test/testdata/htdocs.expected/summary/openssh.html | 2 +-
.../per-version-replacement-hint-only-src.html | 2 +-
.../summary/per-version-replacement-hint-only.html | 2 +-
.../htdocs.expected/summary/per-version-src.html | 2 +-
.../htdocs.expected/summary/per-version.html | 2 +-
.../summary/perl-Net-SMTP-SSL-src.html | 2 +-
.../htdocs.expected/summary/perl-Net-SMTP-SSL.html | 2 +-
.../htdocs.expected/summary/staleversion-src.html | 2 +-
.../htdocs.expected/summary/staleversion.html | 2 +-
.../htdocs.expected/summary/testpackage-src.html | 2 +-
.../htdocs.expected/summary/testpackage.html | 2 +-
test/testdata/process_arch/htdocs.expected | 66 +++++++++++++++
33 files changed, 217 insertions(+), 71 deletions(-)
diff --git a/calm/calm.py b/calm/calm.py
index 600a074..c8c8a77 100755
--- a/calm/calm.py
+++ b/calm/calm.py
@@ -587,10 +587,6 @@ def is_passphrase_cached(args):
#
#
def do_output(args, state):
- # update packages listings
- # XXX: perhaps we need a --[no]listing command line option to disable this
from being run?
- pkg2html.update_package_listings(args, state.packages)
-
update_json = False
# for each arch
@@ -693,6 +689,10 @@ def do_output(args, state):
repology.annotate_packages(args, state.packages)
reports.do_reports(args, state.packages)
+ # update packages listings
+ # XXX: perhaps we need a --[no]listing command line option to disable this
from being run?
+ pkg2html.update_package_listings(args, state.packages)
+
# if we are daemonized, allow force regeneration of static content in
htdocs
# initially (in case the generation code has changed), but update that
# static content only as needed on subsequent loops
diff --git a/calm/mail-inactive-maintainers.py
b/calm/mail-inactive-maintainers.py
index badc5ad..fb9a931 100644
--- a/calm/mail-inactive-maintainers.py
+++ b/calm/mail-inactive-maintainers.py
@@ -33,13 +33,13 @@ from . import pkg2html
from . import reports
from . import utils
-MAINTAINER_ACTIVITY_THRESHOLD_YEARS = 8.5
+MAINTAINER_ACTIVITY_THRESHOLD_YEARS = 3
template = '''
Hi {},
As a part of keeping Cygwin secure, your package maintainer account has been
-found to be long inactive. It will soon be disabled and your packages moved to
+found to be inactive. It will soon be disabled and your packages moved to
'ORPHANED' status.
The estimated date of your last packaging activity is {} UTC.
@@ -76,6 +76,9 @@ def main(args):
logging.info('threshold date %s', pkg2html.tsformat(threshold))
for a in activity_list:
+ if not a.last_package:
+ continue
+
last_activity = max(a.last_seen, a.last_package)
if last_activity < threshold:
@@ -88,7 +91,7 @@ def main(args):
hdr['Envelope-From'] = common_constants.ALWAYS_BCC # we want to
see bounces
hdr['Reply-To'] = '[email protected]'
hdr['Bcc'] = common_constants.ALWAYS_BCC
- hdr['Subject'] = 'upcoming removal of cygwin package maintainer
account for %s' % a.name
+ hdr['Subject'] = 'Upcoming removal of cygwin package maintainer
account for %s' % a.name
hdr['X-Calm-Inactive-Maintainer'] = '1'
msg = template.format(a.name, pkg2html.tsformat(last_activity),
'\n'.join(pkg_list))
diff --git a/calm/pkg2html.py b/calm/pkg2html.py
index a23c662..8c43c3f 100755
--- a/calm/pkg2html.py
+++ b/calm/pkg2html.py
@@ -63,6 +63,7 @@ import xtarfile
from . import common_constants
from . import maintainers
from . import package
+from . import reports
from . import utils
from .version import SetupVersion
@@ -313,7 +314,7 @@ def update_package_listings(args, packages):
if pkg_maintainers[m_pn].is_orphaned():
m = 'ORPHANED'
else:
- m = ',
'.join(sorted(pkg_maintainers[m_pn].maintainers()))
+ m = ', '.join('<a href="../reports/%s">%s</a>' %
(reports.filenameify(l), l) for l in
sorted(pkg_maintainers[m_pn].maintainers()))
pkg_groups = pkg_maintainers[m_pn].groups()
@@ -332,6 +333,11 @@ def update_package_listings(args, packages):
repo_browse_url = '/cgit/cygwin-packages/%s/'
% pn
details_table['packaging repository'] = '<a
href="%s">%s.git</a>' % (repo_browse_url, pn)
+ repology_pn = getattr(po, 'repology_project_name',
None)
+ if repology_pn:
+ upstream_version = getattr(po, 'upstream_version',
'')
+ details_table['repology info'] = '<a
href="https://repology.org/project/%s/information">%s</a> (%s)' % (repology_pn,
repology_pn, upstream_version)
+
if po.kind == package.Kind.binary:
doc_path = os.path.join(args.htdocs, 'doc', pn)
if os.path.exists(doc_path):
diff --git a/calm/repology.py b/calm/repology.py
index 4ecefe5..f2a6f60 100644
--- a/calm/repology.py
+++ b/calm/repology.py
@@ -52,9 +52,11 @@ use_legacy = {'qt': [LegacyData('5', []),
]
}
+RepologyData = namedtuple('RepologyData', ['upstream_version',
'repology_project_name'])
-def repology_fetch_versions():
- upstream_versions = {}
+
+def repology_fetch_data():
+ repology_data = {}
last_pn = ''
while True:
@@ -80,15 +82,15 @@ def repology_fetch_versions():
for pn in sorted(j.keys()):
p = j[pn]
- # first, pick out the version which repology has called newest, and
+ # first, pick out the version(s) which repology has called newest,
and
# if needed, also pick out latest version for legacy packages
- newest_version = None
+ newest_version = []
legacy_versions = {}
for i in p:
v = i['version']
if i['status'] == 'newest':
- newest_version = v
+ newest_version.append(v)
if (pn in use_legacy) and (i['status'] in ['legacy',
'outdated']):
prefix = None
@@ -113,6 +115,9 @@ def repology_fetch_versions():
if not newest_version:
continue
+ # XXX: if everything is noscheme, we can probably record that
+ # information as well.
+
# next, assign that version to all the corresponding cygwin source
# packages
#
@@ -130,11 +135,12 @@ def repology_fetch_versions():
prefix = ld.version
if prefix and prefix in legacy_versions:
- upstream_versions[source_pn] =
legacy_versions[prefix]
- continue
+ upstream_version = legacy_versions[prefix]
+ else:
+ # otherwise, just use the newest version(s)
+ upstream_version = newest_version
- # otherwise, just use the newest version
- upstream_versions[source_pn] = newest_version
+ repology_data[source_pn] = RepologyData(upstream_version,
pn)
if pn == last_pn:
break
@@ -144,7 +150,21 @@ def repology_fetch_versions():
# rate-limit individual API calls to once per second
time.sleep(1)
- return upstream_versions
+ return repology_data
+
+
+# when repology reports multiple 'newest' versions due to altver, pick the one
+# which splits into the same number of numeric and alphabetic sequences
+def seqmatch(bv, uv):
+ if len(uv) <= 1:
+ return uv[0]
+
+ seq_count = len(SetupVersion(bv)._V)
+ for v in uv:
+ if len(SetupVersion(bv)._V) == seq_count:
+ return v
+
+ return uv[0]
def annotate_packages(args, packages):
@@ -156,14 +176,15 @@ def annotate_packages(args, packages):
logging.info("not consulting %s due to ratelimit" % (REPOLOGY_API_URL))
else:
logging.info("consulting %s" % (REPOLOGY_API_URL))
- uv = repology_fetch_versions()
- if uv:
- last_data = uv
+ repology_data = repology_fetch_data()
+ if repology_data:
+ last_data = repology_data
for pn in last_data:
spn = pn + '-src'
for arch in packages:
if spn in packages[arch]:
- packages[arch][spn].upstream_version = last_data[pn]
+ packages[arch][spn].upstream_version =
seqmatch(packages[arch][spn].best_version, last_data[pn].upstream_version)
+ packages[arch][spn].repology_project_name =
last_data[pn].repology_project_name
last_check = time.time()
diff --git a/calm/reports.py b/calm/reports.py
index cd772fe..b2480cc 100644
--- a/calm/reports.py
+++ b/calm/reports.py
@@ -60,7 +60,8 @@ def template(title, body, f):
def write_report(args, title, body, fn, reportlist, not_empty=True):
if not_empty:
- reportlist[title] = os.path.join('reports', fn)
+ if reportlist is not None:
+ reportlist[title] = os.path.join('reports', fn)
fn = os.path.join(args.htdocs, 'reports', fn)
@@ -72,10 +73,29 @@ def linkify(pn, po):
return '<a href="/packages/summary/{0}.html">{1}</a>'.format(po.name,
po.orig_name)
+def filenameify(m):
+ return 'maintainer_' + re.sub(r'[ .]', r'_', m.lower()) + '.html'
+
+
+def status(s):
+ if s < 0:
+ style = "red"
+ mark = "✘" # cross
+ elif s == 0:
+ style = "green"
+ mark = "✔" # tick
+ else:
+ # probably some kind of data error
+ style = "amber"
+ mark = "⯑" # uncertainty
+
+ return '<span class="%s">%s</span>' % (style, mark)
+
+
#
-# produce a report of unmaintained packages
+# produce a report of packages maintained by a given maintainer (None =
unmaintained)
#
-def unmaintained(args, packages, reportlist):
+def maintainer_packages(args, packages, maintainer, reportlist):
pkg_maintainers = maintainers.pkg_list(args.pkglist)
um_list = []
@@ -88,9 +108,18 @@ def unmaintained(args, packages, reportlist):
if po.kind != package.Kind.source:
continue
- if (po.orig_name not in pkg_maintainers) or (not
pkg_maintainers[po.orig_name].is_orphaned()):
+ if po.orig_name not in pkg_maintainers:
continue
+ if maintainer:
+ if maintainer not in pkg_maintainers[po.orig_name].maintainers():
+ continue
+ if pkg_maintainers[po.orig_name].is_orphaned():
+ continue
+ else:
+ if not pkg_maintainers[po.orig_name].is_orphaned():
+ continue
+
# the highest version we have
v = sorted(po.versions(), key=lambda v: SetupVersion(v),
reverse=True)[0]
@@ -114,28 +143,40 @@ def unmaintained(args, packages, reportlist):
up.rdepends = len(rdepends)
up.build_rdepends = len(build_rdepends)
up.importance = po.importance
-
- # some packages are mature. If 'v' is still latest upstream version,
- # then maybe we don't need to worry about this package quite as much...
- up.unchanged = (SetupVersion(v)._V == SetupVersion(up.upstream_v)._V)
- if up.unchanged:
- up.upstream_v += " (unchanged)"
+ up.status = SetupVersion._compare(SetupVersion(v)._V,
SetupVersion(up.upstream_v)._V)
um_list.append(up)
body = io.StringIO()
- print('<p>Packages without a maintainer.</p>', file=body)
+
+ if maintainer:
+ print('<p>Packages maintained by %s.</p>' % maintainer, file=body)
+ else:
+ print('<p>Packages without a maintainer.</p>', file=body)
print('<table class="grid sortable">', file=body)
- print('<tr><th>last
updated</th><th>package</th><th>version</th><th>upstream
version</th><th>rdepends</th><th>build_rdepends</th><th>importance</th></tr>',
file=body)
+ print('<tr><th>last
updated</th><th>package</th><th>version</th><th>upstream
version</th><th>status</th><th>rdepends</th><th>build_rdepends</th><th>importance</th></tr>',
file=body)
- for up in sorted(um_list, key=lambda i: (-i.importance, i.rdepends +
i.build_rdepends, not i.unchanged, i.ts), reverse=True):
-
print('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>'
%
- (pkg2html.tsformat(up.ts), linkify(up.pn, up.po), up.v,
up.upstream_v, up.rdepends, up.build_rdepends, up.importance), file=body)
+ for up in sorted(um_list, key=lambda i: (-i.importance, i.rdepends +
i.build_rdepends, i.status, i.ts), reverse=True):
+
print('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>'
%
+ (pkg2html.tsformat(up.ts), linkify(up.pn, up.po), up.v,
up.upstream_v, status(up.status), up.rdepends, up.build_rdepends,
up.importance), file=body)
print('</table>', file=body)
- write_report(args, 'Unmaintained packages', body, 'unmaintained.html',
reportlist)
+ if maintainer:
+ def feed_url(proto):
+ name = maintainer.replace('.', '').replace(' ', '.').lower() +
'@cygwin'
+ url = 'https://repology.org/maintainer/%s/feed-for-repo/cygwin' %
name
+ if proto == 'atom':
+ url += '/atom'
+
+ return '<a href="%s">(%s)</a>' % (url, proto)
+
+ print("<p>Changes to this data are available in a repology feed: %s
%s</p>" % (feed_url('html'), feed_url('atom')), file=body)
+
+ write_report(args, "%s's packages" % maintainer, body, '%s' %
filenameify(maintainer), None, not_empty=False)
+ else:
+ write_report(args, 'Unmaintained packages', body, 'unmaintained.html',
reportlist)
# produce a report of deprecated packages
@@ -300,8 +341,7 @@ def maintainer_activity(args, packages):
a.last_seen = m.last_seen
# because last_seen hasn't been collected for very long, we also try to
- # estimate by looking at packages (this isn't very good as it gets
- # confused by co-mainainted packages)
+ # estimate last activity by looking at packages
count = 0
mtime = 0
pkgs = []
@@ -318,6 +358,11 @@ def maintainer_activity(args, packages):
if po:
pkgs.append(pn)
+ # ignore timestamp of co-maintained packages, because we don't
+ # know who is responsible for the update
+ if len(p.maintainers()) > 1:
+ continue
+
for v in po.versions():
if po.tar(v).mtime > mtime:
mtime = po.tar(v).mtime
@@ -327,7 +372,6 @@ def maintainer_activity(args, packages):
if count == 0:
continue
- a.count = count
a.pkgs = pkgs
a.last_package = mtime
@@ -352,8 +396,11 @@ def maintainer_activity_report(args, packages, reportlist):
def pkg_details(pkgs):
return '<details><summary>%d</summary>%s</details>' % (len(pkgs),
', '.join(linkify(p, packages[arch][p]) for p in pkgs))
- print('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>' %
- (a.name, pkg_details(a.pkgs), pkg2html.tsformat(a.last_seen),
pkg2html.tsformat(a.last_package)), file=body)
+ def maintainer_link(m):
+ return '<a href="%s">%s</a>' % (filenameify(m), m)
+
+ print('<tr><td>%s</td><td
sorttable_customkey="%d">%s</td><td>%s</td><td>%s</td></tr>' %
+ (maintainer_link(a.name), len(a.pkgs), pkg_details(a.pkgs),
pkg2html.tsformat(a.last_seen), pkg2html.tsformat(a.last_package)), file=body)
print('</table>', file=body)
@@ -534,7 +581,7 @@ def do_reports(args, packages):
pkg2html.ensure_dir_exists(args, os.path.join(args.htdocs, 'reports'))
- unmaintained(args, packages, reportlist)
+ maintainer_packages(args, packages, None, reportlist)
deprecated(args, packages, reportlist)
unstable(args, packages, reportlist)
@@ -544,6 +591,9 @@ def do_reports(args, packages):
maintainer_activity_report(args, packages, reportlist)
+ for maintainer in maintainers.maintainer_list(args):
+ maintainer_packages(args, packages, maintainer, None)
+
fn = os.path.join(args.htdocs, 'reports_list.inc')
with utils.open_amifc(fn) as f:
print('<ul>', file=f)
diff --git a/test/testdata/htdocs.expected/summary/arc-src.html
b/test/testdata/htdocs.expected/summary/arc-src.html
index 9e95ab4..d10edaa 100755
--- a/test/testdata/htdocs.expected/summary/arc-src.html
+++ b/test/testdata/htdocs.expected/summary/arc-src.html
@@ -20,7 +20,7 @@ compressing graphic images. Squeeze analysis is always done
now, and
the best of packing, squeezing, or crunching is used.</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Archive</p></td></tr>
<tr><td><p><span class="detail">install package(s)</span>:</p></td><td><p><a
href="arc.html">arc</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Jari Aalto
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_jari_aalto.html">Jari Aalto</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/arc.html
b/test/testdata/htdocs.expected/summary/arc.html
index 6d3b765..a068aba 100644
--- a/test/testdata/htdocs.expected/summary/arc.html
+++ b/test/testdata/htdocs.expected/summary/arc.html
@@ -20,7 +20,7 @@ compressing graphic images. Squeeze analysis is always done
now, and
the best of packing, squeezing, or crunching is used.</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Archive</p></td></tr>
<tr><td><p><span class="detail">source package</span>:</p></td><td><p><a
href="arc-src.html">arc</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Jari Aalto
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_jari_aalto.html">Jari Aalto</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/base-cygwin.html
b/test/testdata/htdocs.expected/summary/base-cygwin.html
index f7c8f7c..a1d69f3 100644
--- a/test/testdata/htdocs.expected/summary/base-cygwin.html
+++ b/test/testdata/htdocs.expected/summary/base-cygwin.html
@@ -17,7 +17,7 @@
<tr><td><p><span
class="detail">depends</span>:</p></td><td><p>cygwin-api0_291</p></td></tr>
<tr><td><p><span class="detail">rdepends</span>:</p></td><td><p><a
href="cygwin.html">cygwin</a>, <a
href="per-version.html">per-version</a></p></td></tr>
<tr><td><p><span class="detail">source
package</span>:</p></td><td><p>base-cygwin-src</p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Corinna
Vinschen
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_corinna_vinschen.html">Corinna Vinschen</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/corrupt-src.html
b/test/testdata/htdocs.expected/summary/corrupt-src.html
index 8dc69c2..9a182d0 100755
--- a/test/testdata/htdocs.expected/summary/corrupt-src.html
+++ b/test/testdata/htdocs.expected/summary/corrupt-src.html
@@ -15,7 +15,7 @@
<tr><td><p><span class="detail">description</span>:</p></td><td><p>A package
containing corrupt archives</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Devel</p></td></tr>
<tr><td><p><span class="detail">install package(s)</span>:</p></td><td><p><a
href="corrupt.html">corrupt</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Blooey
McFooey
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_blooey_mcfooey.html">Blooey McFooey</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/corrupt.html
b/test/testdata/htdocs.expected/summary/corrupt.html
index 0507405..770831c 100644
--- a/test/testdata/htdocs.expected/summary/corrupt.html
+++ b/test/testdata/htdocs.expected/summary/corrupt.html
@@ -15,7 +15,7 @@
<tr><td><p><span class="detail">description</span>:</p></td><td><p>A package
containing corrupt archives</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Devel</p></td></tr>
<tr><td><p><span class="detail">source package</span>:</p></td><td><p><a
href="corrupt-src.html">corrupt</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Blooey
McFooey
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_blooey_mcfooey.html">Blooey McFooey</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/cygwin-debuginfo.html
b/test/testdata/htdocs.expected/summary/cygwin-debuginfo.html
index 594761c..db73350 100644
--- a/test/testdata/htdocs.expected/summary/cygwin-debuginfo.html
+++ b/test/testdata/htdocs.expected/summary/cygwin-debuginfo.html
@@ -18,7 +18,7 @@ cygwin package with gdb.</p></td></tr>
<tr><td><p><span class="detail">depends</span>:</p></td><td><p><a
href="cygwin-debuginfo.html">cygwin-debuginfo</a></p></td></tr>
<tr><td><p><span class="detail">rdepends</span>:</p></td><td><p><a
href="cygwin-debuginfo.html">cygwin-debuginfo</a></p></td></tr>
<tr><td><p><span class="detail">source package</span>:</p></td><td><p><a
href="cygwin-src.html">cygwin</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Corinna
Vinschen, Yaakov Selkowitz
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_corinna_vinschen.html">Corinna Vinschen</a>, <a
href="../reports/maintainer_yaakov_selkowitz.html">Yaakov Selkowitz</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/cygwin-devel.html
b/test/testdata/htdocs.expected/summary/cygwin-devel.html
index 9120025..a48f771 100644
--- a/test/testdata/htdocs.expected/summary/cygwin-devel.html
+++ b/test/testdata/htdocs.expected/summary/cygwin-devel.html
@@ -16,7 +16,7 @@
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Devel</p></td></tr>
<tr><td><p><span class="detail">build_rdepends</span>:</p></td><td><p><a
href="test-e-src.html">test-e</a></p></td></tr>
<tr><td><p><span class="detail">source package</span>:</p></td><td><p><a
href="cygwin-src.html">cygwin</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Corinna
Vinschen, Yaakov Selkowitz
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_corinna_vinschen.html">Corinna Vinschen</a>, <a
href="../reports/maintainer_yaakov_selkowitz.html">Yaakov Selkowitz</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/cygwin-src.html
b/test/testdata/htdocs.expected/summary/cygwin-src.html
index 84bb91d..ca0eac2 100755
--- a/test/testdata/htdocs.expected/summary/cygwin-src.html
+++ b/test/testdata/htdocs.expected/summary/cygwin-src.html
@@ -16,7 +16,7 @@
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Base</p></td></tr>
<tr><td><p><span class="detail">install package(s)</span>:</p></td><td><p><a
href="cygwin.html">cygwin</a>, <a
href="cygwin-debuginfo.html">cygwin-debuginfo</a>, <a
href="cygwin-devel.html">cygwin-devel</a></p></td></tr>
<tr><td><p><span
class="detail">license</span>:</p></td><td><p>LGPL-3.0-or-later WITH
LGPL-3.0-linking-exception <span class="smaller">(<a
href="https://spdx.org/licenses/">SPDX</a>)</span></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Corinna
Vinschen, Yaakov Selkowitz
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_corinna_vinschen.html">Corinna Vinschen</a>, <a
href="../reports/maintainer_yaakov_selkowitz.html">Yaakov Selkowitz</a>
<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></p></td></tr>
<tr><td><p><span class="detail">packaging repository</span>:</p></td><td><p><a
href="/cgit/cygwin-packages/cygwin/">cygwin.git</a></p></td></tr>
diff --git a/test/testdata/htdocs.expected/summary/cygwin.html
b/test/testdata/htdocs.expected/summary/cygwin.html
index 3b956b2..ade7cfc 100644
--- a/test/testdata/htdocs.expected/summary/cygwin.html
+++ b/test/testdata/htdocs.expected/summary/cygwin.html
@@ -17,7 +17,7 @@
<tr><td><p><span class="detail">depends</span>:</p></td><td><p><a
href="base-cygwin.html">base-cygwin</a></p></td></tr>
<tr><td><p><span class="detail">rdepends</span>:</p></td><td><p><a
href="per-version.html">per-version</a>, <a
href="per-version-replacement-hint-only.html">per-version-replacement-hint-only</a></p></td></tr>
<tr><td><p><span class="detail">source package</span>:</p></td><td><p><a
href="cygwin-src.html">cygwin</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Corinna
Vinschen, Yaakov Selkowitz
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_corinna_vinschen.html">Corinna Vinschen</a>, <a
href="../reports/maintainer_yaakov_selkowitz.html">Yaakov Selkowitz</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/keychain-src.html
b/test/testdata/htdocs.expected/summary/keychain-src.html
index 908685c..80467ee 100755
--- a/test/testdata/htdocs.expected/summary/keychain-src.html
+++ b/test/testdata/htdocs.expected/summary/keychain-src.html
@@ -23,7 +23,7 @@ ssh-agent, otherwise it loads them, prompting you for a
password if
necessary</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Utils</p></td></tr>
<tr><td><p><span class="detail">install package(s)</span>:</p></td><td><p><a
href="keychain.html">keychain</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Jari Aalto
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_jari_aalto.html">Jari Aalto</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/keychain.html
b/test/testdata/htdocs.expected/summary/keychain.html
index 0f3134a..5fa699c 100644
--- a/test/testdata/htdocs.expected/summary/keychain.html
+++ b/test/testdata/htdocs.expected/summary/keychain.html
@@ -24,7 +24,7 @@ necessary</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Utils</p></td></tr>
<tr><td><p><span class="detail">depends</span>:</p></td><td><p><a
href="openssh.html">openssh</a></p></td></tr>
<tr><td><p><span class="detail">source package</span>:</p></td><td><p><a
href="keychain-src.html">keychain</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Jari Aalto
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_jari_aalto.html">Jari Aalto</a>
<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></p></td></tr>
<tr><td><p><span class="detail">readme</span>:</p></td><td><p><a
href="../doc/keychain/keychain.README">keychain.README</a></p></td></tr>
diff --git a/test/testdata/htdocs.expected/summary/libdns_sd-devel.html
b/test/testdata/htdocs.expected/summary/libdns_sd-devel.html
index 31bc9e5..9d021f9 100644
--- a/test/testdata/htdocs.expected/summary/libdns_sd-devel.html
+++ b/test/testdata/htdocs.expected/summary/libdns_sd-devel.html
@@ -18,7 +18,7 @@ industry standard IP protocols.</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Net</p></td></tr>
<tr><td><p><span class="detail">depends</span>:</p></td><td><p><a
href="libdns_sd1.html">libdns_sd1</a></p></td></tr>
<tr><td><p><span class="detail">source package</span>:</p></td><td><p><a
href="mDNSResponder-src.html">mDNSResponder</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Yaakov
Selkowitz
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_yaakov_selkowitz.html">Yaakov Selkowitz</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/libdns_sd1.html
b/test/testdata/htdocs.expected/summary/libdns_sd1.html
index 74f71b2..486ea30 100644
--- a/test/testdata/htdocs.expected/summary/libdns_sd1.html
+++ b/test/testdata/htdocs.expected/summary/libdns_sd1.html
@@ -18,7 +18,7 @@ industry standard IP protocols.</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Net</p></td></tr>
<tr><td><p><span class="detail">rdepends</span>:</p></td><td><p><a
href="libdns_sd-devel.html">libdns_sd-devel</a>, <a
href="mDNSResponder.html">mDNSResponder</a></p></td></tr>
<tr><td><p><span class="detail">source package</span>:</p></td><td><p><a
href="mDNSResponder-src.html">mDNSResponder</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Yaakov
Selkowitz
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_yaakov_selkowitz.html">Yaakov Selkowitz</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/mDNSResponder-src.html
b/test/testdata/htdocs.expected/summary/mDNSResponder-src.html
index 05db800..59d3816 100755
--- a/test/testdata/htdocs.expected/summary/mDNSResponder-src.html
+++ b/test/testdata/htdocs.expected/summary/mDNSResponder-src.html
@@ -17,7 +17,7 @@ automatic discovery of computers, devices, and services on IP
networks using
industry standard IP protocols.</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Net</p></td></tr>
<tr><td><p><span class="detail">install package(s)</span>:</p></td><td><p><a
href="libdns_sd-devel.html">libdns_sd-devel</a>, <a
href="libdns_sd1.html">libdns_sd1</a>, <a
href="mDNSResponder.html">mDNSResponder</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Yaakov
Selkowitz
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_yaakov_selkowitz.html">Yaakov Selkowitz</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/mDNSResponder.html
b/test/testdata/htdocs.expected/summary/mDNSResponder.html
index ba4c9ec..cea5a9f 100644
--- a/test/testdata/htdocs.expected/summary/mDNSResponder.html
+++ b/test/testdata/htdocs.expected/summary/mDNSResponder.html
@@ -18,7 +18,7 @@ industry standard IP protocols.</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Net</p></td></tr>
<tr><td><p><span class="detail">depends</span>:</p></td><td><p><a
href="libdns_sd1.html">libdns_sd1</a></p></td></tr>
<tr><td><p><span class="detail">source package</span>:</p></td><td><p><a
href="mDNSResponder-src.html">mDNSResponder</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Yaakov
Selkowitz
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_yaakov_selkowitz.html">Yaakov Selkowitz</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/openssh-src.html
b/test/testdata/htdocs.expected/summary/openssh-src.html
index c8eb895..c8dd26e 100755
--- a/test/testdata/htdocs.expected/summary/openssh-src.html
+++ b/test/testdata/htdocs.expected/summary/openssh-src.html
@@ -17,7 +17,7 @@
providing encrypted communication between two machines.</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Net</p></td></tr>
<tr><td><p><span class="detail">install package(s)</span>:</p></td><td><p><a
href="openssh.html">openssh</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Corinna
Vinschen
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_corinna_vinschen.html">Corinna Vinschen</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/openssh.html
b/test/testdata/htdocs.expected/summary/openssh.html
index 812ae7d..b815c04 100644
--- a/test/testdata/htdocs.expected/summary/openssh.html
+++ b/test/testdata/htdocs.expected/summary/openssh.html
@@ -18,7 +18,7 @@
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Net</p></td></tr>
<tr><td><p><span class="detail">rdepends</span>:</p></td><td><p><a
href="keychain.html">keychain</a></p></td></tr>
<tr><td><p><span class="detail">source package</span>:</p></td><td><p><a
href="openssh-src.html">openssh</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Corinna
Vinschen
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_corinna_vinschen.html">Corinna Vinschen</a>
<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></p></td></tr>
</table><br>
diff --git
a/test/testdata/htdocs.expected/summary/per-version-replacement-hint-only-src.html
b/test/testdata/htdocs.expected/summary/per-version-replacement-hint-only-src.html
index 078fa31..da6c490 100755
---
a/test/testdata/htdocs.expected/summary/per-version-replacement-hint-only-src.html
+++
b/test/testdata/htdocs.expected/summary/per-version-replacement-hint-only-src.html
@@ -15,7 +15,7 @@
<tr><td><p><span class="detail">description</span>:</p></td><td><p>Per-version
hint test package</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Base</p></td></tr>
<tr><td><p><span class="detail">install package(s)</span>:</p></td><td><p><a
href="per-version-replacement-hint-only.html">per-version-replacement-hint-only</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Blooey
McFooey
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_blooey_mcfooey.html">Blooey McFooey</a>
<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></p></td></tr>
</table><br>
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 e9bd68a..0121bf9 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,7 +16,7 @@
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Base</p></td></tr>
<tr><td><p><span class="detail">depends</span>:</p></td><td><p><a
href="cygwin.html">cygwin</a></p></td></tr>
<tr><td><p><span class="detail">source package</span>:</p></td><td><p><a
href="per-version-replacement-hint-only-src.html">per-version-replacement-hint-only</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Blooey
McFooey
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_blooey_mcfooey.html">Blooey McFooey</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/per-version-src.html
b/test/testdata/htdocs.expected/summary/per-version-src.html
index f99713c..42cf350 100755
--- a/test/testdata/htdocs.expected/summary/per-version-src.html
+++ b/test/testdata/htdocs.expected/summary/per-version-src.html
@@ -15,7 +15,7 @@
<tr><td><p><span class="detail">description</span>:</p></td><td><p>Per-version
hint test package</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Base</p></td></tr>
<tr><td><p><span class="detail">install package(s)</span>:</p></td><td><p><a
href="per-version.html">per-version</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Blooey
McFooey
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_blooey_mcfooey.html">Blooey McFooey</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/per-version.html
b/test/testdata/htdocs.expected/summary/per-version.html
index a16b0bb..d1ead30 100644
--- a/test/testdata/htdocs.expected/summary/per-version.html
+++ b/test/testdata/htdocs.expected/summary/per-version.html
@@ -16,7 +16,7 @@
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Base</p></td></tr>
<tr><td><p><span class="detail">depends</span>:</p></td><td><p><a
href="base-cygwin.html">base-cygwin</a></p></td></tr>
<tr><td><p><span class="detail">source package</span>:</p></td><td><p><a
href="per-version-src.html">per-version</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Blooey
McFooey
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_blooey_mcfooey.html">Blooey McFooey</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/perl-Net-SMTP-SSL-src.html
b/test/testdata/htdocs.expected/summary/perl-Net-SMTP-SSL-src.html
index faff410..efabb55 100755
--- a/test/testdata/htdocs.expected/summary/perl-Net-SMTP-SSL-src.html
+++ b/test/testdata/htdocs.expected/summary/perl-Net-SMTP-SSL-src.html
@@ -16,7 +16,7 @@
its network operations in order to support encrypted connections.</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Perl</p></td></tr>
<tr><td><p><span class="detail">install package(s)</span>:</p></td><td><p><a
href="perl-Net-SMTP-SSL.html">perl-Net-SMTP-SSL</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Blooey
McFooey, Yaakov Selkowitz
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_blooey_mcfooey.html">Blooey McFooey</a>, <a
href="../reports/maintainer_yaakov_selkowitz.html">Yaakov Selkowitz</a>
<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></p></td></tr>
</table><br>
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 2237ceb..07c5b12 100644
--- a/test/testdata/htdocs.expected/summary/perl-Net-SMTP-SSL.html
+++ b/test/testdata/htdocs.expected/summary/perl-Net-SMTP-SSL.html
@@ -16,7 +16,7 @@
its network operations in order to support encrypted connections.</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Perl</p></td></tr>
<tr><td><p><span class="detail">source package</span>:</p></td><td><p><a
href="perl-Net-SMTP-SSL-src.html">perl-Net-SMTP-SSL</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Blooey
McFooey, Yaakov Selkowitz
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_blooey_mcfooey.html">Blooey McFooey</a>, <a
href="../reports/maintainer_yaakov_selkowitz.html">Yaakov Selkowitz</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/staleversion-src.html
b/test/testdata/htdocs.expected/summary/staleversion-src.html
index 4437f2e..91a289c 100755
--- a/test/testdata/htdocs.expected/summary/staleversion-src.html
+++ b/test/testdata/htdocs.expected/summary/staleversion-src.html
@@ -15,7 +15,7 @@
<tr><td><p><span class="detail">description</span>:</p></td><td><p>Test
package for stale version removal</p></td></tr>
<tr><td><p><span class="detail">categories</span>:</p></td><td><p>Shells
Base</p></td></tr>
<tr><td><p><span class="detail">install package(s)</span>:</p></td><td><p><a
href="staleversion.html">staleversion</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Blooey
McFooey
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_blooey_mcfooey.html">Blooey McFooey</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/staleversion.html
b/test/testdata/htdocs.expected/summary/staleversion.html
index d3f31f3..56b6a6c 100644
--- a/test/testdata/htdocs.expected/summary/staleversion.html
+++ b/test/testdata/htdocs.expected/summary/staleversion.html
@@ -15,7 +15,7 @@
<tr><td><p><span class="detail">description</span>:</p></td><td><p>Test
package for stale version removal</p></td></tr>
<tr><td><p><span class="detail">categories</span>:</p></td><td><p>Shells
Base</p></td></tr>
<tr><td><p><span class="detail">source package</span>:</p></td><td><p><a
href="staleversion-src.html">staleversion</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Blooey
McFooey
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_blooey_mcfooey.html">Blooey McFooey</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/testpackage-src.html
b/test/testdata/htdocs.expected/summary/testpackage-src.html
index 1d8fd98..152870c 100755
--- a/test/testdata/htdocs.expected/summary/testpackage-src.html
+++ b/test/testdata/htdocs.expected/summary/testpackage-src.html
@@ -15,7 +15,7 @@
<tr><td><p><span class="detail">description</span>:</p></td><td><p>A test
package (stuff & other stuff)</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Devel</p></td></tr>
<tr><td><p><span class="detail">install package(s)</span>:</p></td><td><p><a
href="testpackage.html">testpackage</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Blooey
McFooey
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_blooey_mcfooey.html">Blooey McFooey</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/htdocs.expected/summary/testpackage.html
b/test/testdata/htdocs.expected/summary/testpackage.html
index be934c8..51bdc37 100644
--- a/test/testdata/htdocs.expected/summary/testpackage.html
+++ b/test/testdata/htdocs.expected/summary/testpackage.html
@@ -15,7 +15,7 @@
<tr><td><p><span class="detail">description</span>:</p></td><td><p>A test
package (stuff & other stuff)</p></td></tr>
<tr><td><p><span
class="detail">categories</span>:</p></td><td><p>Devel</p></td></tr>
<tr><td><p><span class="detail">source package</span>:</p></td><td><p><a
href="testpackage-src.html">testpackage</a></p></td></tr>
-<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p>Blooey
McFooey
+<tr><td><p><span class="detail">maintainer(s)</span>:</p></td><td><p><a
href="../reports/maintainer_blooey_mcfooey.html">Blooey McFooey</a>
<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></p></td></tr>
</table><br>
diff --git a/test/testdata/process_arch/htdocs.expected
b/test/testdata/process_arch/htdocs.expected
index dfe67ea..e38d005 100644
--- a/test/testdata/process_arch/htdocs.expected
+++ b/test/testdata/process_arch/htdocs.expected
@@ -2,7 +2,73 @@
'doc': ['.htaccess'],
'doc/keychain': ['keychain.README'],
'reports': ['deprecated_so.html',
+ 'maintainer_aaron_schneider.html',
+ 'maintainer_achim_gratz.html',
'maintainer_activity.html',
+ 'maintainer_adam_dinwoodie.html',
+ 'maintainer_alexey_sokolov.html',
+ 'maintainer_andrew_schulman.html',
+ 'maintainer_blooey_mcfooey.html',
+ 'maintainer_bob_heckel.html',
+ 'maintainer_charles_wilson.html',
+ 'maintainer_chris_j__breisch.html',
+ 'maintainer_chris_leblanc.html',
+ 'maintainer_chris_sutcliffe.html',
+ 'maintainer_christian_franke.html',
+ 'maintainer_christian_kellermann.html',
+ 'maintainer_corinna_vinschen.html',
+ 'maintainer_damien_doligez.html',
+ 'maintainer_daniel_boland.html',
+ 'maintainer_dave_kilroy.html',
+ 'maintainer_david_levine.html',
+ 'maintainer_david_rothenberger.html',
+ 'maintainer_david_stacey.html',
+ 'maintainer_dean_scarff.html',
+ 'maintainer_dr__volker_zell.html',
+ 'maintainer_eric_blake.html',
+ 'maintainer_erwin_waterlander.html',
+ 'maintainer_federico_hernandez.html',
+ 'maintainer_frank_fesevur.html',
+ 'maintainer_gernot_hillier.html',
+ 'maintainer_harold_l_hunt_ii.html',
+ 'maintainer_jan_nijtmans.html',
+ 'maintainer_jari_aalto.html',
+ 'maintainer_joe_linoff.html',
+ 'maintainer_joel_johnson.html',
+ 'maintainer_jon_turney.html',
+ 'maintainer_jonathan_c__allen.html',
+ 'maintainer_jonathan_yong.html',
+ 'maintainer_jorge_diaz.html',
+ 'maintainer_ken_brown.html',
+ 'maintainer_klaus_grue.html',
+ 'maintainer_kostya_altukhov.html',
+ 'maintainer_marcel_telka.html',
+ 'maintainer_marco_atzeri.html',
+ 'maintainer_marcos_vives_del_sol.html',
+ 'maintainer_mark_hessling.html',
+ 'maintainer_michael_wild.html',
+ 'maintainer_mike_depaulo.html',
+ 'maintainer_mikhail_usenko.html',
+ 'maintainer_orphaned.html',
+ 'maintainer_pavel_fedin.html',
+ 'maintainer_peter_a__castro.html',
+ 'maintainer_peter_rosin.html',
+ 'maintainer_pierre_a__humblet.html',
+ 'maintainer_reini_urban.html',
+ 'maintainer_sam_robb.html',
+ 'maintainer_sebastien_helleu.html',
+ 'maintainer_serge_lamikhov-center.html',
+ 'maintainer_steven_monai.html',
+ 'maintainer_stuart_caie.html',
+ 'maintainer_teun_burgers.html',
+ 'maintainer_thomas_wolff.html',
+ 'maintainer_tony_kelman.html',
+ 'maintainer_warren_young.html',
+ 'maintainer_wei-ren_chen.html',
+ 'maintainer_william_a__hoffman.html',
+ 'maintainer_yaakov_selkowitz.html',
+ 'maintainer_yitzchak_scott-thoennes.html',
+ 'maintainer_yue_ren.html',
'perl_rebuilds.html',
'ruby_rebuilds.html',
'unmaintained.html',
[calm - Cygwin server-side packaging maintenance script] branch master, updated. 20250329-11-g4ec7285
Jon Turney via Cygwin-apps-cvs Sat, 07 Jun 2025 05:49:16 -0700
