public inbox for cygwin-apps-cvs@sourceware.org
help / color / mirror / Atom feed
* [calm - Cygwin server-side packaging maintenance script] branch master, updated. 20181020-18-g2424e77
@ 2019-05-28 18:05 jturney
  0 siblings, 0 replies; only message in thread
From: jturney @ 2019-05-28 18:05 UTC (permalink / raw)
  To: cygwin-apps-cvs

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 122408 bytes --]




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

commit 2424e774b56929f998f01a2f6d3f2178497badf7
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Fri Mar 2 22:23:30 2018 +0000

    Update hint parsing tests
    
    Use a separate expected file for each pvr.hint
    Add testing of override.hint parsing

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

commit 0e4848b3bbfeffad63bc4c29a5c5f05682911e59
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Thu Mar 1 16:13:01 2018 +0000

    Remove reading setup.hint files


Diff:
---
 calm/hint.py                                       |   53 ++++---------
 calm/package.py                                    |   51 +-----------
 calm/uploads.py                                    |    3 -
 test/test_calm.py                                  |   22 ++++--
 .../noarch/release/obs-a/obs-a-1.0-1.expected      |    1 +
 .../noarch/release/obs-b/obs-b-1.0-1.expected      |    1 +
 .../noarch/release/perl-Net-SMTP-SSL/expected      |    5 -
 .../perl-Net-SMTP-SSL-1.03-1.expected              |    5 +
 .../noarch/release/test-c/test-c-1.0-1.expected    |    4 +
 .../noarch/release/test-d/test-d-1.0-1.expected    |    1 +
 .../noarch/release/test-e/test-e-1.0-1.expected    |    1 +
 .../hints/x86/release/arc/arc-4.32.7-10.expected   |    8 ++
 test/testdata/hints/x86/release/arc/expected       |    8 --
 .../release/base-cygwin/base-cygwin-3.6-1.expected |    5 +
 .../release/base-cygwin/base-cygwin-3.8-1.expected |    5 +
 .../hints/x86/release/base-cygwin/expected         |    5 -
 .../x86/release/corrupt/corrupt-2.0.0-1.expected   |    3 +
 test/testdata/hints/x86/release/corrupt/expected   |    3 -
 .../x86/release/cygwin/cygwin-2.2.0-1.expected     |    4 +
 .../x86/release/cygwin/cygwin-2.2.1-1.expected     |    4 +
 .../x86/release/cygwin/cygwin-2.3.0-0.3.expected   |    6 ++
 .../cygwin-debuginfo-2.2.0-1.expected              |    5 +
 .../cygwin-debuginfo-2.2.1-1.expected              |    5 +
 .../cygwin-debuginfo-2.3.0-0.3.expected            |    5 +
 .../x86/release/cygwin/cygwin-debuginfo/expected   |    8 --
 .../cygwin/cygwin-debuginfo/override.expected      |    1 +
 .../cygwin-devel/cygwin-devel-2.2.0-1.expected     |    5 +
 .../cygwin-devel/cygwin-devel-2.2.1-1.expected     |    5 +
 .../cygwin-devel/cygwin-devel-2.3.0-0.3.expected   |    5 +
 .../hints/x86/release/cygwin/cygwin-devel/expected |    8 --
 .../release/cygwin/cygwin-devel/override.expected  |    1 +
 test/testdata/hints/x86/release/cygwin/expected    |    7 --
 .../hints/x86/release/cygwin/override.expected     |    1 +
 test/testdata/hints/x86/release/invalid/expected   |    4 -
 .../hints/x86/release/invalid/invalid-0.expected   |    4 +
 test/testdata/hints/x86/release/keychain/expected  |   12 ---
 .../x86/release/keychain/keychain-2.6.8-1.expected |   12 +++
 .../x86/release/keychain/keychain-2.7.1-1.expected |   12 +++
 test/testdata/hints/x86/release/libspiro/expected  |    1 -
 .../release/libspiro/libspiro-20071029-1.expected  |    1 +
 .../x86/release/libspiro/libspiro-devel/expected   |    1 -
 .../libspiro-devel-20071029-1.expected             |    1 +
 .../hints/x86/release/libspiro/libspiro0/expected  |    1 -
 .../libspiro0/libspiro0-20071029-1.expected        |    1 +
 .../testdata/hints/x86/release/libtextcat/expected |   11 ---
 .../release/libtextcat/libtextcat-2.2-2.expected   |   11 +++
 .../release/libtextcat/libtextcat-devel/expected   |   12 ---
 .../libtextcat-devel-2.2-2.expected                |   12 +++
 .../x86/release/libtextcat/libtextcat0/expected    |   12 ---
 .../libtextcat0/libtextcat0-2.2-2.expected         |   12 +++
 .../hints/x86/release/mDNSResponder/expected       |   10 ---
 .../release/mDNSResponder/libdns_sd-devel/expected |    7 --
 .../libdns_sd-devel-379.32.1-1.expected            |    7 ++
 .../x86/release/mDNSResponder/libdns_sd1/expected  |    7 --
 .../libdns_sd1/libdns_sd1-379.32.1-1.expected      |    7 ++
 .../mDNSResponder-379.32.1-1.expected              |   10 +++
 .../x86/release/mingw64-i686-binutils/expected     |    6 --
 ...ingw64-i686-binutils-2.29.1.787c9873-1.expected |    6 ++
 .../mingw64-i686-binutils-debuginfo/expected       |    7 --
 ...6-binutils-debuginfo-2.29.1.787c9873-1.expected |    7 ++
 test/testdata/hints/x86/release/openssh/expected   |    5 -
 .../x86/release/openssh/openssh-7.2p2-1.expected   |    5 +
 .../per-version-incomplete/override.expected       |    1 +
 .../per-version-incomplete-36-1.expected           |    3 +
 ...er-version-replacement-hint-only-1.0-1.expected |    4 +
 .../x86/release/per-version/override.expected      |    1 +
 .../release/per-version/per-version-4.0-1.expected |    4 +
 .../release/per-version/per-version-4.8-1.expected |    4 +
 test/testdata/hints/x86/release/proj/expected      |    5 -
 .../hints/x86/release/proj/libproj-devel/expected  |    6 --
 .../libproj-devel/libproj-devel-4.8.0-1.expected   |    6 ++
 .../hints/x86/release/proj/libproj1/expected       |    6 --
 .../proj/libproj1/libproj1-4.8.0-1.expected        |    6 ++
 .../hints/x86/release/proj/proj-4.8.0-1.expected   |    5 +
 test/testdata/hints/x86/release/rpm-doc/expected   |    2 -
 .../x86/release/rpm-doc/rpm-doc-4.1-2.expected     |    2 +
 .../x86/release/rpm-doc/rpm-doc-999-1.expected     |    2 +
 test/testdata/hints/x86/release/splint/expected    |   15 ----
 .../x86/release/splint/splint-3.1.2-1.expected     |   15 ++++
 .../hints/x86/release/staleversion/expected        |    4 -
 .../x86/release/staleversion/override.expected     |    1 +
 .../staleversion/staleversion-240-1.expected       |    4 +
 .../staleversion/staleversion-242-0.expected       |    4 +
 .../staleversion/staleversion-243-0.expected       |    4 +
 .../staleversion/staleversion-250-0.expected       |    4 +
 .../staleversion/staleversion-251-0.expected       |    4 +
 .../staleversion/staleversion-260-0.expected       |    4 +
 .../hints/x86/release/testpackage/expected         |    3 -
 .../release/testpackage/testpackage-0.1-1.expected |    3 +
 test/testdata/process_arch/rel_area.expected       |   85 ++++++++++++-------
 test/testdata/process_arch/vault.expected          |    5 +-
 .../perl-Net-SMTP-SSL-1.03-1.hint                  |    5 +
 .../noarch/release/perl-Net-SMTP-SSL/setup.hint    |    5 -
 .../relarea/x86/release/arc/arc-4.32.7-10.hint     |    8 ++
 test/testdata/relarea/x86/release/arc/setup.hint   |    8 --
 .../x86/release/base-cygwin/base-cygwin-3.6-1.hint |    4 +
 .../x86/release/base-cygwin/base-cygwin-3.8-1.hint |    4 +
 .../relarea/x86/release/base-cygwin/setup.hint     |    4 -
 .../x86/release/corrupt/corrupt-2.0.0-1.hint       |    3 +
 .../relarea/x86/release/corrupt/setup.hint         |    3 -
 .../relarea/x86/release/cygwin/cygwin-2.2.0-1.hint |    4 +
 .../relarea/x86/release/cygwin/cygwin-2.2.1-1.hint |    4 +
 .../cygwin-debuginfo/cygwin-debuginfo-2.2.0-1.hint |    6 ++
 .../cygwin-debuginfo/cygwin-debuginfo-2.2.1-1.hint |    6 ++
 .../cygwin-debuginfo-2.3.0-0.3.hint                |    6 ++
 .../release/cygwin/cygwin-debuginfo/override.hint  |    3 +
 .../x86/release/cygwin/cygwin-debuginfo/setup.hint |    9 --
 .../cygwin/cygwin-devel/cygwin-devel-2.2.0-1.hint  |    5 +
 .../cygwin/cygwin-devel/cygwin-devel-2.2.1-1.hint  |    5 +
 .../cygwin-devel/cygwin-devel-2.3.0-0.3.hint       |    5 +
 .../x86/release/cygwin/cygwin-devel/override.hint  |    3 +
 .../x86/release/cygwin/cygwin-devel/setup.hint     |    8 --
 .../relarea/x86/release/cygwin/override.hint       |    3 +
 .../testdata/relarea/x86/release/cygwin/setup.hint |    7 --
 .../relarea/x86/release/invalid/invalid-0.hint     |    2 +
 .../relarea/x86/release/invalid/setup.hint         |    2 -
 .../x86/release/keychain/keychain-2.6.8-1.hint     |   12 +++
 .../x86/release/keychain/keychain-2.7.1-1.hint     |   12 +++
 .../relarea/x86/release/keychain/setup.hint        |   12 ---
 .../x86/release/libspiro/libspiro-20071029-1.hint  |    9 ++
 .../libspiro-devel/libspiro-devel-20071029-1.hint  |   11 +++
 .../x86/release/libspiro/libspiro-devel/setup.hint |   11 ---
 .../libspiro/libspiro0/libspiro0-20071029-1.hint   |   11 +++
 .../x86/release/libspiro/libspiro0/setup.hint      |   11 ---
 .../relarea/x86/release/libspiro/setup.hint        |    9 --
 .../x86/release/libtextcat/libtextcat-2.2-2.hint   |   10 +++
 .../libtextcat-devel/libtextcat-devel-2.2-2.hint   |   11 +++
 .../release/libtextcat/libtextcat-devel/setup.hint |   11 ---
 .../libtextcat/libtextcat0/libtextcat0-2.2-2.hint  |   11 +++
 .../x86/release/libtextcat/libtextcat0/setup.hint  |   11 ---
 .../relarea/x86/release/libtextcat/setup.hint      |   10 ---
 .../libdns_sd-devel-379.32.1-1.hint                |    7 ++
 .../mDNSResponder/libdns_sd-devel/setup.hint       |    7 --
 .../libdns_sd1/libdns_sd1-379.32.1-1.hint          |    7 ++
 .../release/mDNSResponder/libdns_sd1/setup.hint    |    7 --
 .../mDNSResponder/mDNSResponder-379.32.1-1.hint    |   11 +++
 .../relarea/x86/release/mDNSResponder/setup.hint   |   11 ---
 .../mingw64-i686-binutils-2.29.1.787c9873-1.hint   |    5 +
 ...-i686-binutils-debuginfo-2.29.1.787c9873-1.hint |    6 ++
 .../mingw64-i686-binutils-debuginfo/setup.hint     |    6 --
 .../x86/release/mingw64-i686-binutils/setup.hint   |    5 -
 .../x86/release/openssh/openssh-7.2p2-1.hint       |    5 +
 .../relarea/x86/release/openssh/setup.hint         |    5 -
 .../proj/libproj-devel/libproj-devel-4.8.0-1.hint  |    5 +
 .../x86/release/proj/libproj-devel/setup.hint      |    5 -
 .../release/proj/libproj1/libproj1-4.8.0-1.hint    |    5 +
 .../relarea/x86/release/proj/libproj1/setup.hint   |    5 -
 .../relarea/x86/release/proj/proj-4.8.0-1.hint     |    4 +
 test/testdata/relarea/x86/release/proj/setup.hint  |    4 -
 .../relarea/x86/release/rpm-doc/rpm-doc-4.1-2.hint |    2 +
 .../relarea/x86/release/rpm-doc/rpm-doc-999-1.hint |    2 +
 .../relarea/x86/release/rpm-doc/setup.hint         |    2 -
 .../testdata/relarea/x86/release/splint/setup.hint |   14 ---
 .../relarea/x86/release/splint/splint-3.1.2-1.hint |   14 +++
 .../relarea/x86/release/staleversion/setup.hint    |    4 -
 .../release/staleversion/staleversion-240-1.hint   |    4 +
 .../release/staleversion/staleversion-242-0.hint   |    4 +
 .../release/staleversion/staleversion-243-0.hint   |    4 +
 .../release/staleversion/staleversion-250-0.hint   |    4 +
 .../release/staleversion/staleversion-251-0.hint   |    4 +
 .../release/staleversion/staleversion-260-0.hint   |    4 +
 .../relarea/x86/release/testpackage/setup.hint     |    3 -
 .../x86/release/testpackage/testpackage-0.1-1.hint |    3 +
 163 files changed, 625 insertions(+), 507 deletions(-)

diff --git a/calm/hint.py b/calm/hint.py
index e32d095..6e1a948 100755
--- a/calm/hint.py
+++ b/calm/hint.py
@@ -29,15 +29,6 @@ from collections import OrderedDict
 import re
 import argparse
 
-
-# helper function to merge dicts
-def merge_dicts(x, *y):
-    z = x.copy()
-    for i in y:
-        z.update(i)
-    return z
-
-
 # types of key:
 # 'multilineval' - always have a value, which may be multiline
 # 'val'          - always have a value
@@ -46,24 +37,32 @@ def merge_dicts(x, *y):
 keytypes = ['multilineval', 'val', 'optval', 'noval']
 
 # kinds of hint file, and their allowed keys
-setup, pvr, override = range(3)
+pvr, override = range(2)
+
+hintkeys = {}
 
-commonkeys = {
+hintkeys[pvr] = {
     'ldesc': 'multilineval',
     'message': 'multilineval',
     'category': 'val',
     'external-source': 'val',
     'sdesc': 'val',
     'skip': 'noval',
+    'requires': 'optval',
+    'depends': 'optval',
+    'build-depends': 'optval',
+    'obsoletes': 'optval',
+    'test': 'noval',   # mark the package as a test version
+    'version': 'val',  # version override
+    'disable-check': 'val',
+    'provides': 'val',
+    'conflicts': 'val',
 }
 
-versionkeys = {
+hintkeys[override] = {
     'curr': 'val',
     'prev': 'val',
     'test': 'val',
-}
-
-overridekeys = {
     'keep': 'val',
     'keep-count': 'val',
     'keep-days': 'val',
@@ -71,26 +70,6 @@ overridekeys = {
     'replace-versions': 'val',
 }
 
-hintkeys = {}
-
-hintkeys[setup] = merge_dicts(commonkeys, versionkeys, {
-    'requires': 'optval',
-})
-
-hintkeys[pvr] = merge_dicts(commonkeys, {
-    'requires': 'optval',
-    'depends': 'optval',
-    'build-depends': 'optval',
-    'obsoletes': 'optval',
-    'test': 'noval',   # mark the package as a test version
-    'version': 'val',  # version override
-    'disable-check': 'val',
-    'provides': 'val',
-    'conflicts': 'val',
-})
-
-hintkeys[override] = merge_dicts(versionkeys, overridekeys)
-
 # valid categories
 categories = ['accessibility',
               'admin',
@@ -291,10 +270,10 @@ def hint_file_parse(fn, kind):
                 else:
                     errors.append("unknown construct '%s' at line %d" % (item, i))
 
-            # for setup and pvr kinds, if 'skip' isn't present, 'category' and
+            # for the pvr kind, if 'skip' isn't present, 'category' and
             # 'sdesc' must be
             # XXX: genini also requires 'requires' but that seems wrong
-            if 'skip' not in hints and kind != override:
+            if 'skip' not in hints and kind == pvr:
                 mandatory = ['category', 'sdesc']
                 for k in mandatory:
                     if k not in hints:
diff --git a/calm/package.py b/calm/package.py
index 5710185..ebec84a 100755
--- a/calm/package.py
+++ b/calm/package.py
@@ -180,21 +180,8 @@ def read_package(packages, basedir, dirpath, files, remove=[], upload=False):
                           (dirpath, packages[p].path))
             return True
 
-        # read setup.hint
-        legacy = 'setup.hint' in files
-        legacy_used = False
-        if legacy:
-            hints = read_hints(p, os.path.join(dirpath, 'setup.hint'), hint.setup)
-            if not hints:
-                logging.error("error parsing %s" % (os.path.join(dirpath, 'setup.hint')))
-                return True
-            warnings = clean_hints(p, hints, warnings)
-            files.remove('setup.hint')
-        else:
-            hints = {}
-
         # determine version overrides
-        note_absent = ('override.hint' in remove) or ('override.hint' in files) or legacy
+        note_absent = ('override.hint' in remove) or ('override.hint' in files)
 
         if 'override.hint' in files:
             # read override.hint
@@ -206,12 +193,6 @@ def read_package(packages, basedir, dirpath, files, remove=[], upload=False):
         else:
             override_hints = {}
 
-            # if we didn't have a version override hint, extract any version
-            # override from legacy hints
-            for level in ['test', 'curr', 'prev']:
-                if level in hints:
-                    override_hints[level] = hints[level]
-
         # if override.hint exists or is being removed, explicitly note absent
         # stability level hints
         if note_absent:
@@ -219,12 +200,6 @@ def read_package(packages, basedir, dirpath, files, remove=[], upload=False):
                 if level not in override_hints:
                     override_hints[level] = None
 
-        # after we have migrated them to override hints, remove stability
-        # level hints from legacy hints
-        for level in ['test', 'curr', 'prev']:
-            if level in hints:
-                del hints[level]
-
         # read sha512.sum
         sha512 = {}
         if 'sha512.sum' not in files:
@@ -318,14 +293,9 @@ def read_package(packages, basedir, dirpath, files, remove=[], upload=False):
                     return True
                 warnings = clean_hints(p, pvr_hint, warnings)
                 files.remove(hint_fn)
-            elif legacy:
-                # otherwise, use setup.hint
-                pvr_hint = hints.copy()
-                legacy_used = True
-                hint_fn = None
             else:
-                # it's an error to not have either a setup.hint or a pvr.hint
-                logging.error("package %s has packages for version %s, but no %s or setup.hint" % (p, vr, hint_fn))
+                # it's an error to not have a pvr.hint
+                logging.error("package %s has packages for version %s, but no %s" % (p, vr, hint_fn))
                 return True
 
             # apply a version override
@@ -350,13 +320,8 @@ def read_package(packages, basedir, dirpath, files, remove=[], upload=False):
             logging.error("unexpected files in %s: %s" % (p, ', '.join(files)))
             warnings = True
 
-        if not upload and legacy and not legacy_used:
-            logging.warning("package '%s' has a setup.hint which no version uses, removing it" % (p))
-            os.unlink(os.path.join(dirpath, 'setup.hint'))
-
         packages[p].version_hints = version_hints
         packages[p].override_hints = override_hints
-        packages[p].legacy_hints = hints
         packages[p].tars = actual_tars
         packages[p].hint_files = hint_files
         packages[p].path = relpath
@@ -1129,16 +1094,6 @@ def merge(a, *l):
 
                                 logging.warning("package '%s' version '%s' hints changed\n%s" % (p, vr, diff))
 
-                    # XXX: we should really do something complex here, like
-                    # assign the legacy hints from b to all vr in a which didn't
-                    # have a pvr.hint.  Instead, just report if it's going to
-                    # change and let things get sorted out later on...
-                    if a[p].legacy_hints and b[p].legacy_hints and a[p].legacy_hints != b[p].legacy_hints:
-                        diff = '\n'.join(difflib.ndiff(
-                            pprint.pformat(a[p].legacy_hints).splitlines(),
-                            pprint.pformat(b[p].legacy_hints).splitlines()))
-                        logging.warning("package '%s' hints changed\n%s" % (p, diff))
-
                     # overrides from b take precedence
                     c[p].override_hints.update(b[p].override_hints)
 
diff --git a/calm/uploads.py b/calm/uploads.py
index 1d8c1bf..2f84911 100644
--- a/calm/uploads.py
+++ b/calm/uploads.py
@@ -197,9 +197,6 @@ def scan(m, all_packages, arch, args):
                 elif os.path.getsize(fn) != 0:
                     logging.error("remove file %s is not empty" % fn)
                     error = True
-                elif f == '-setup.hint':
-                    logging.error("remove file %s is not permitted" % fn)
-                    error = True
                 else:
                     vault[relpath].append(f[1:])
                     remove_success.append(fn)
diff --git a/test/test_calm.py b/test/test_calm.py
index 80b8e4e..48a6020 100755
--- a/test/test_calm.py
+++ b/test/test_calm.py
@@ -130,17 +130,25 @@ class CalmTest(unittest.TestCase):
         basedir = 'testdata/relarea'
         for (dirpath, subdirs, files) in os.walk(basedir):
             relpath = os.path.relpath(dirpath, basedir)
-            if 'setup.hint' in files:
-                with self.subTest(package=os.path.basename(dirpath)):
-                    logging.info('Reading %s' % os.path.join(dirpath, 'setup.hint'))
-                    results = hint.hint_file_parse(os.path.join(dirpath, 'setup.hint'), hint.setup)
-                    with pprint_patch():
-                        compare_with_expected_file(self, os.path.join('testdata/hints', relpath), results)
+            for f in files:
+                expected = os.path.join('testdata/hints', relpath)
+                if f.endswith('.hint'):
+                    if f == 'override.hint':
+                        kind = hint.override
+                        name = 'override'
+                    else:
+                        kind = hint.pvr
+                        name = f[:-5]
+                    with self.subTest(package=os.path.basename(dirpath)):
+                        logging.info('Reading %s' % os.path.join(dirpath, f))
+                        results = hint.hint_file_parse(os.path.join(dirpath, f), kind)
+                        with pprint_patch():
+                            compare_with_expected_file(self, expected, results, name)
 
 #
 # something like "find -name results -exec sh -c 'cd `dirname {}` ; cp results
 # expected' \;" can be used to update the expected output (after you have
-# checking it to make sure it is really correct, of course :) )
+# checked it to make sure it is really correct, of course :) )
 #
 
     def test_html_writer(self):
diff --git a/test/testdata/hints/noarch/release/obs-a/obs-a-1.0-1.expected b/test/testdata/hints/noarch/release/obs-a/obs-a-1.0-1.expected
new file mode 100644
index 0000000..250a5fe
--- /dev/null
+++ b/test/testdata/hints/noarch/release/obs-a/obs-a-1.0-1.expected
@@ -0,0 +1 @@
+OrderedDict([('category', 'Devel'), ('sdesc', '"obsolete package A"')])
diff --git a/test/testdata/hints/noarch/release/obs-b/obs-b-1.0-1.expected b/test/testdata/hints/noarch/release/obs-b/obs-b-1.0-1.expected
new file mode 100644
index 0000000..f1c61cd
--- /dev/null
+++ b/test/testdata/hints/noarch/release/obs-b/obs-b-1.0-1.expected
@@ -0,0 +1 @@
+OrderedDict([('category', 'Devel'), ('sdesc', '"obsolete package B"')])
diff --git a/test/testdata/hints/noarch/release/perl-Net-SMTP-SSL/expected b/test/testdata/hints/noarch/release/perl-Net-SMTP-SSL/expected
deleted file mode 100644
index 9516e05..0000000
--- a/test/testdata/hints/noarch/release/perl-Net-SMTP-SSL/expected
+++ /dev/null
@@ -1,5 +0,0 @@
-{'category': 'Perl',
- 'requires': '',
- 'sdesc': '"Perl distribution Net-SMTP-SSL"',
- 'ldesc': '"Implements the same API as Net::SMTP, but uses IO::Socket::SSL for\n'
-          'its network operations in order to support encrypted connections."'}
diff --git a/test/testdata/hints/noarch/release/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-1.expected b/test/testdata/hints/noarch/release/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-1.expected
new file mode 100644
index 0000000..9516e05
--- /dev/null
+++ b/test/testdata/hints/noarch/release/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-1.expected
@@ -0,0 +1,5 @@
+{'category': 'Perl',
+ 'requires': '',
+ 'sdesc': '"Perl distribution Net-SMTP-SSL"',
+ 'ldesc': '"Implements the same API as Net::SMTP, but uses IO::Socket::SSL for\n'
+          'its network operations in order to support encrypted connections."'}
diff --git a/test/testdata/hints/noarch/release/test-c/test-c-1.0-1.expected b/test/testdata/hints/noarch/release/test-c/test-c-1.0-1.expected
new file mode 100644
index 0000000..c8024d7
--- /dev/null
+++ b/test/testdata/hints/noarch/release/test-c/test-c-1.0-1.expected
@@ -0,0 +1,4 @@
+{'category': 'Devel',
+ 'sdesc': '"test package C"',
+ 'obsoletes': 'obs-a, obs-b',
+ 'depends': 'test-d (>= 1.0), test-e'}
diff --git a/test/testdata/hints/noarch/release/test-d/test-d-1.0-1.expected b/test/testdata/hints/noarch/release/test-d/test-d-1.0-1.expected
new file mode 100644
index 0000000..584681a
--- /dev/null
+++ b/test/testdata/hints/noarch/release/test-d/test-d-1.0-1.expected
@@ -0,0 +1 @@
+OrderedDict([('category', 'Devel'), ('sdesc', '"test package D"'), ('version', '1.0.42590-1')])
diff --git a/test/testdata/hints/noarch/release/test-e/test-e-1.0-1.expected b/test/testdata/hints/noarch/release/test-e/test-e-1.0-1.expected
new file mode 100644
index 0000000..e7414e7
--- /dev/null
+++ b/test/testdata/hints/noarch/release/test-e/test-e-1.0-1.expected
@@ -0,0 +1 @@
+OrderedDict([('category', 'Devel'), ('sdesc', '"test package E"'), ('build-depends', 'libtextcat-devel')])
diff --git a/test/testdata/hints/x86/release/arc/arc-4.32.7-10.expected b/test/testdata/hints/x86/release/arc/arc-4.32.7-10.expected
new file mode 100644
index 0000000..d0cd27b
--- /dev/null
+++ b/test/testdata/hints/x86/release/arc/arc-4.32.7-10.expected
@@ -0,0 +1,8 @@
+{'sdesc': '"The ARC archive utility"',
+ 'ldesc': '"This program is based on the MSDOS ARC program, version 5.21, plus a\n'
+          'few enhancements. ARC performs Huffman Squeezing on data. The Huffman\n'
+          'Squeeze algorithm was removed from MSDOS ARC after version 5.12. It\n'
+          'turns out to be more efficient than Lempel-Ziv style compression when\n'
+          'compressing graphic images. Squeeze analysis is always done now, and\n'
+          'the best of packing, squeezing, or crunching is used."',
+ 'category': 'Archive'}
diff --git a/test/testdata/hints/x86/release/arc/expected b/test/testdata/hints/x86/release/arc/expected
deleted file mode 100644
index d0cd27b..0000000
--- a/test/testdata/hints/x86/release/arc/expected
+++ /dev/null
@@ -1,8 +0,0 @@
-{'sdesc': '"The ARC archive utility"',
- 'ldesc': '"This program is based on the MSDOS ARC program, version 5.21, plus a\n'
-          'few enhancements. ARC performs Huffman Squeezing on data. The Huffman\n'
-          'Squeeze algorithm was removed from MSDOS ARC after version 5.12. It\n'
-          'turns out to be more efficient than Lempel-Ziv style compression when\n'
-          'compressing graphic images. Squeeze analysis is always done now, and\n'
-          'the best of packing, squeezing, or crunching is used."',
- 'category': 'Archive'}
diff --git a/test/testdata/hints/x86/release/base-cygwin/base-cygwin-3.6-1.expected b/test/testdata/hints/x86/release/base-cygwin/base-cygwin-3.6-1.expected
new file mode 100644
index 0000000..7505632
--- /dev/null
+++ b/test/testdata/hints/x86/release/base-cygwin/base-cygwin-3.6-1.expected
@@ -0,0 +1,5 @@
+{'sdesc': '"Initial base installation helper script"',
+ 'ldesc': '"Initial base installation helper script."',
+ 'category': 'Base',
+ 'requires': '',
+ 'parse-warnings': ["sdesc ends with '.'"]}
diff --git a/test/testdata/hints/x86/release/base-cygwin/base-cygwin-3.8-1.expected b/test/testdata/hints/x86/release/base-cygwin/base-cygwin-3.8-1.expected
new file mode 100644
index 0000000..7505632
--- /dev/null
+++ b/test/testdata/hints/x86/release/base-cygwin/base-cygwin-3.8-1.expected
@@ -0,0 +1,5 @@
+{'sdesc': '"Initial base installation helper script"',
+ 'ldesc': '"Initial base installation helper script."',
+ 'category': 'Base',
+ 'requires': '',
+ 'parse-warnings': ["sdesc ends with '.'"]}
diff --git a/test/testdata/hints/x86/release/base-cygwin/expected b/test/testdata/hints/x86/release/base-cygwin/expected
deleted file mode 100644
index 7505632..0000000
--- a/test/testdata/hints/x86/release/base-cygwin/expected
+++ /dev/null
@@ -1,5 +0,0 @@
-{'sdesc': '"Initial base installation helper script"',
- 'ldesc': '"Initial base installation helper script."',
- 'category': 'Base',
- 'requires': '',
- 'parse-warnings': ["sdesc ends with '.'"]}
diff --git a/test/testdata/hints/x86/release/corrupt/corrupt-2.0.0-1.expected b/test/testdata/hints/x86/release/corrupt/corrupt-2.0.0-1.expected
new file mode 100644
index 0000000..945213b
--- /dev/null
+++ b/test/testdata/hints/x86/release/corrupt/corrupt-2.0.0-1.expected
@@ -0,0 +1,3 @@
+{'sdesc': '"A corrupt package"',
+ 'ldesc': '"A package containing corrupt archives"',
+ 'category': 'Devel'}
diff --git a/test/testdata/hints/x86/release/corrupt/expected b/test/testdata/hints/x86/release/corrupt/expected
deleted file mode 100644
index 945213b..0000000
--- a/test/testdata/hints/x86/release/corrupt/expected
+++ /dev/null
@@ -1,3 +0,0 @@
-{'sdesc': '"A corrupt package"',
- 'ldesc': '"A package containing corrupt archives"',
- 'category': 'Devel'}
diff --git a/test/testdata/hints/x86/release/cygwin/cygwin-2.2.0-1.expected b/test/testdata/hints/x86/release/cygwin/cygwin-2.2.0-1.expected
new file mode 100644
index 0000000..24a09e5
--- /dev/null
+++ b/test/testdata/hints/x86/release/cygwin/cygwin-2.2.0-1.expected
@@ -0,0 +1,4 @@
+{'sdesc': '"The UNIX emulation engine"',
+ 'ldesc': '"The UNIX emulation engine"',
+ 'category': 'Base',
+ 'requires': 'base-cygwin'}
diff --git a/test/testdata/hints/x86/release/cygwin/cygwin-2.2.1-1.expected b/test/testdata/hints/x86/release/cygwin/cygwin-2.2.1-1.expected
new file mode 100644
index 0000000..24a09e5
--- /dev/null
+++ b/test/testdata/hints/x86/release/cygwin/cygwin-2.2.1-1.expected
@@ -0,0 +1,4 @@
+{'sdesc': '"The UNIX emulation engine"',
+ 'ldesc': '"The UNIX emulation engine"',
+ 'category': 'Base',
+ 'requires': 'base-cygwin'}
diff --git a/test/testdata/hints/x86/release/cygwin/cygwin-2.3.0-0.3.expected b/test/testdata/hints/x86/release/cygwin/cygwin-2.3.0-0.3.expected
new file mode 100644
index 0000000..6658b1e
--- /dev/null
+++ b/test/testdata/hints/x86/release/cygwin/cygwin-2.3.0-0.3.expected
@@ -0,0 +1,6 @@
+{'sdesc': '"The UNIX emulation engine"',
+ 'ldesc': '"The UNIX emulation engine"',
+ 'category': 'Base',
+ 'requires': 'base-cygwin',
+ 'provides': 'cygwin-api0_291',
+ 'conflicts': 'fruit-juice'}
diff --git a/test/testdata/hints/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1.expected b/test/testdata/hints/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1.expected
new file mode 100644
index 0000000..a9b0d70
--- /dev/null
+++ b/test/testdata/hints/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1.expected
@@ -0,0 +1,5 @@
+{'category': 'Debug',
+ 'requires': 'cygwin-debuginfo',
+ 'external-source': 'cygwin',
+ 'sdesc': '"Debug info for cygwin"',
+ 'ldesc': '"This package contains files necessary for debugging the\ncygwin package with gdb."'}
diff --git a/test/testdata/hints/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1.expected b/test/testdata/hints/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1.expected
new file mode 100644
index 0000000..a9b0d70
--- /dev/null
+++ b/test/testdata/hints/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1.expected
@@ -0,0 +1,5 @@
+{'category': 'Debug',
+ 'requires': 'cygwin-debuginfo',
+ 'external-source': 'cygwin',
+ 'sdesc': '"Debug info for cygwin"',
+ 'ldesc': '"This package contains files necessary for debugging the\ncygwin package with gdb."'}
diff --git a/test/testdata/hints/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3.expected b/test/testdata/hints/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3.expected
new file mode 100644
index 0000000..a9b0d70
--- /dev/null
+++ b/test/testdata/hints/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3.expected
@@ -0,0 +1,5 @@
+{'category': 'Debug',
+ 'requires': 'cygwin-debuginfo',
+ 'external-source': 'cygwin',
+ 'sdesc': '"Debug info for cygwin"',
+ 'ldesc': '"This package contains files necessary for debugging the\ncygwin package with gdb."'}
diff --git a/test/testdata/hints/x86/release/cygwin/cygwin-debuginfo/expected b/test/testdata/hints/x86/release/cygwin/cygwin-debuginfo/expected
deleted file mode 100644
index 7359321..0000000
--- a/test/testdata/hints/x86/release/cygwin/cygwin-debuginfo/expected
+++ /dev/null
@@ -1,8 +0,0 @@
-{'category': 'Debug',
- 'requires': 'cygwin-debuginfo',
- 'external-source': 'cygwin',
- 'sdesc': '"Debug info for cygwin"',
- 'ldesc': '"This package contains files necessary for debugging the\ncygwin package with gdb."',
- 'prev': '2.2.0-1',
- 'curr': '2.2.1-1',
- 'test': '2.3.0-0.3'}
diff --git a/test/testdata/hints/x86/release/cygwin/cygwin-debuginfo/override.expected b/test/testdata/hints/x86/release/cygwin/cygwin-debuginfo/override.expected
new file mode 100644
index 0000000..5c3039e
--- /dev/null
+++ b/test/testdata/hints/x86/release/cygwin/cygwin-debuginfo/override.expected
@@ -0,0 +1 @@
+OrderedDict([('prev', '2.2.0-1'), ('curr', '2.2.1-1'), ('test', '2.3.0-0.3')])
diff --git a/test/testdata/hints/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.0-1.expected b/test/testdata/hints/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.0-1.expected
new file mode 100644
index 0000000..7a8bc17
--- /dev/null
+++ b/test/testdata/hints/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.0-1.expected
@@ -0,0 +1,5 @@
+{'category': 'Devel',
+ 'requires': '',
+ 'sdesc': '"Core development files"',
+ 'ldesc': '"Core development files required to build Cygwin packages"',
+ 'external-source': 'cygwin'}
diff --git a/test/testdata/hints/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.1-1.expected b/test/testdata/hints/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.1-1.expected
new file mode 100644
index 0000000..7a8bc17
--- /dev/null
+++ b/test/testdata/hints/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.1-1.expected
@@ -0,0 +1,5 @@
+{'category': 'Devel',
+ 'requires': '',
+ 'sdesc': '"Core development files"',
+ 'ldesc': '"Core development files required to build Cygwin packages"',
+ 'external-source': 'cygwin'}
diff --git a/test/testdata/hints/x86/release/cygwin/cygwin-devel/cygwin-devel-2.3.0-0.3.expected b/test/testdata/hints/x86/release/cygwin/cygwin-devel/cygwin-devel-2.3.0-0.3.expected
new file mode 100644
index 0000000..7a8bc17
--- /dev/null
+++ b/test/testdata/hints/x86/release/cygwin/cygwin-devel/cygwin-devel-2.3.0-0.3.expected
@@ -0,0 +1,5 @@
+{'category': 'Devel',
+ 'requires': '',
+ 'sdesc': '"Core development files"',
+ 'ldesc': '"Core development files required to build Cygwin packages"',
+ 'external-source': 'cygwin'}
diff --git a/test/testdata/hints/x86/release/cygwin/cygwin-devel/expected b/test/testdata/hints/x86/release/cygwin/cygwin-devel/expected
deleted file mode 100644
index 19c0b1e..0000000
--- a/test/testdata/hints/x86/release/cygwin/cygwin-devel/expected
+++ /dev/null
@@ -1,8 +0,0 @@
-{'category': 'Devel',
- 'requires': '',
- 'sdesc': '"Core development files"',
- 'ldesc': '"Core development files required to build Cygwin packages"',
- 'external-source': 'cygwin',
- 'prev': '2.2.0-1',
- 'curr': '2.2.1-1',
- 'test': '2.3.0-0.3'}
diff --git a/test/testdata/hints/x86/release/cygwin/cygwin-devel/override.expected b/test/testdata/hints/x86/release/cygwin/cygwin-devel/override.expected
new file mode 100644
index 0000000..5c3039e
--- /dev/null
+++ b/test/testdata/hints/x86/release/cygwin/cygwin-devel/override.expected
@@ -0,0 +1 @@
+OrderedDict([('prev', '2.2.0-1'), ('curr', '2.2.1-1'), ('test', '2.3.0-0.3')])
diff --git a/test/testdata/hints/x86/release/cygwin/expected b/test/testdata/hints/x86/release/cygwin/expected
deleted file mode 100644
index e2f3476..0000000
--- a/test/testdata/hints/x86/release/cygwin/expected
+++ /dev/null
@@ -1,7 +0,0 @@
-{'sdesc': '"The UNIX emulation engine"',
- 'ldesc': '"The UNIX emulation engine"',
- 'category': 'Base',
- 'requires': 'base-cygwin',
- 'prev': '2.2.0-1',
- 'curr': '2.2.1-1',
- 'test': '2.3.0-0.3'}
diff --git a/test/testdata/hints/x86/release/cygwin/override.expected b/test/testdata/hints/x86/release/cygwin/override.expected
new file mode 100644
index 0000000..5c3039e
--- /dev/null
+++ b/test/testdata/hints/x86/release/cygwin/override.expected
@@ -0,0 +1 @@
+OrderedDict([('prev', '2.2.0-1'), ('curr', '2.2.1-1'), ('test', '2.3.0-0.3')])
diff --git a/test/testdata/hints/x86/release/invalid/expected b/test/testdata/hints/x86/release/invalid/expected
deleted file mode 100644
index 70f37d7..0000000
--- a/test/testdata/hints/x86/release/invalid/expected
+++ /dev/null
@@ -1,4 +0,0 @@
-{'parse-errors': ['unknown key unknown-key at line 0',
-                  "unknown construct 'invalid-construct' at line 1",
-                  "required key 'category' missing",
-                  "required key 'sdesc' missing"]}
diff --git a/test/testdata/hints/x86/release/invalid/invalid-0.expected b/test/testdata/hints/x86/release/invalid/invalid-0.expected
new file mode 100644
index 0000000..70f37d7
--- /dev/null
+++ b/test/testdata/hints/x86/release/invalid/invalid-0.expected
@@ -0,0 +1,4 @@
+{'parse-errors': ['unknown key unknown-key at line 0',
+                  "unknown construct 'invalid-construct' at line 1",
+                  "required key 'category' missing",
+                  "required key 'sdesc' missing"]}
diff --git a/test/testdata/hints/x86/release/keychain/expected b/test/testdata/hints/x86/release/keychain/expected
deleted file mode 100644
index 4113a2d..0000000
--- a/test/testdata/hints/x86/release/keychain/expected
+++ /dev/null
@@ -1,12 +0,0 @@
-{'sdesc': '"Key manager for OpenSSH"',
- 'ldesc': '"Keychain is an OpenSSH key manager, typically run from\n'
-          '~/.bash_profile. When keychain is run, it checks for a running\n'
-          'ssh-agent, otherwise it starts one. It saves the ssh-agent environment\n'
-          'variables to ~/.keychain/$HOSTNAME-sh, so that subsequent logins\n'
-          'and non-interactive shells such as cron jobs can source the file and\n'
-          'make passwordless ssh connections. In addition, when keychain runs, it\n'
-          'verifies that the key files specified on the command-line are known to\n'
-          'ssh-agent, otherwise it loads them, prompting you for a password if\n'
-          'necessary"',
- 'category': 'Utils',
- 'requires': 'openssh'}
diff --git a/test/testdata/hints/x86/release/keychain/keychain-2.6.8-1.expected b/test/testdata/hints/x86/release/keychain/keychain-2.6.8-1.expected
new file mode 100644
index 0000000..4113a2d
--- /dev/null
+++ b/test/testdata/hints/x86/release/keychain/keychain-2.6.8-1.expected
@@ -0,0 +1,12 @@
+{'sdesc': '"Key manager for OpenSSH"',
+ 'ldesc': '"Keychain is an OpenSSH key manager, typically run from\n'
+          '~/.bash_profile. When keychain is run, it checks for a running\n'
+          'ssh-agent, otherwise it starts one. It saves the ssh-agent environment\n'
+          'variables to ~/.keychain/$HOSTNAME-sh, so that subsequent logins\n'
+          'and non-interactive shells such as cron jobs can source the file and\n'
+          'make passwordless ssh connections. In addition, when keychain runs, it\n'
+          'verifies that the key files specified on the command-line are known to\n'
+          'ssh-agent, otherwise it loads them, prompting you for a password if\n'
+          'necessary"',
+ 'category': 'Utils',
+ 'requires': 'openssh'}
diff --git a/test/testdata/hints/x86/release/keychain/keychain-2.7.1-1.expected b/test/testdata/hints/x86/release/keychain/keychain-2.7.1-1.expected
new file mode 100644
index 0000000..4113a2d
--- /dev/null
+++ b/test/testdata/hints/x86/release/keychain/keychain-2.7.1-1.expected
@@ -0,0 +1,12 @@
+{'sdesc': '"Key manager for OpenSSH"',
+ 'ldesc': '"Keychain is an OpenSSH key manager, typically run from\n'
+          '~/.bash_profile. When keychain is run, it checks for a running\n'
+          'ssh-agent, otherwise it starts one. It saves the ssh-agent environment\n'
+          'variables to ~/.keychain/$HOSTNAME-sh, so that subsequent logins\n'
+          'and non-interactive shells such as cron jobs can source the file and\n'
+          'make passwordless ssh connections. In addition, when keychain runs, it\n'
+          'verifies that the key files specified on the command-line are known to\n'
+          'ssh-agent, otherwise it loads them, prompting you for a password if\n'
+          'necessary"',
+ 'category': 'Utils',
+ 'requires': 'openssh'}
diff --git a/test/testdata/hints/x86/release/libspiro/expected b/test/testdata/hints/x86/release/libspiro/expected
deleted file mode 100644
index b16efe0..0000000
--- a/test/testdata/hints/x86/release/libspiro/expected
+++ /dev/null
@@ -1 +0,0 @@
-OrderedDict([('parse-errors', ['invalid UTF-8'])])
diff --git a/test/testdata/hints/x86/release/libspiro/libspiro-20071029-1.expected b/test/testdata/hints/x86/release/libspiro/libspiro-20071029-1.expected
new file mode 100644
index 0000000..b16efe0
--- /dev/null
+++ b/test/testdata/hints/x86/release/libspiro/libspiro-20071029-1.expected
@@ -0,0 +1 @@
+OrderedDict([('parse-errors', ['invalid UTF-8'])])
diff --git a/test/testdata/hints/x86/release/libspiro/libspiro-devel/expected b/test/testdata/hints/x86/release/libspiro/libspiro-devel/expected
deleted file mode 100644
index b16efe0..0000000
--- a/test/testdata/hints/x86/release/libspiro/libspiro-devel/expected
+++ /dev/null
@@ -1 +0,0 @@
-OrderedDict([('parse-errors', ['invalid UTF-8'])])
diff --git a/test/testdata/hints/x86/release/libspiro/libspiro-devel/libspiro-devel-20071029-1.expected b/test/testdata/hints/x86/release/libspiro/libspiro-devel/libspiro-devel-20071029-1.expected
new file mode 100644
index 0000000..b16efe0
--- /dev/null
+++ b/test/testdata/hints/x86/release/libspiro/libspiro-devel/libspiro-devel-20071029-1.expected
@@ -0,0 +1 @@
+OrderedDict([('parse-errors', ['invalid UTF-8'])])
diff --git a/test/testdata/hints/x86/release/libspiro/libspiro0/expected b/test/testdata/hints/x86/release/libspiro/libspiro0/expected
deleted file mode 100644
index b16efe0..0000000
--- a/test/testdata/hints/x86/release/libspiro/libspiro0/expected
+++ /dev/null
@@ -1 +0,0 @@
-OrderedDict([('parse-errors', ['invalid UTF-8'])])
diff --git a/test/testdata/hints/x86/release/libspiro/libspiro0/libspiro0-20071029-1.expected b/test/testdata/hints/x86/release/libspiro/libspiro0/libspiro0-20071029-1.expected
new file mode 100644
index 0000000..b16efe0
--- /dev/null
+++ b/test/testdata/hints/x86/release/libspiro/libspiro0/libspiro0-20071029-1.expected
@@ -0,0 +1 @@
+OrderedDict([('parse-errors', ['invalid UTF-8'])])
diff --git a/test/testdata/hints/x86/release/libtextcat/expected b/test/testdata/hints/x86/release/libtextcat/expected
deleted file mode 100644
index 498e7e5..0000000
--- a/test/testdata/hints/x86/release/libtextcat/expected
+++ /dev/null
@@ -1,11 +0,0 @@
-{'sdesc': '"Text Classification Library (language guessing in C)"',
- 'ldesc': '"Libtextcat is a library with functions that implement the\n'
-          'classification technique described in Cavnar & Trenkle, "N-Gram-Based\n'
-          'Text Categorization". It was primarily developed for language\n'
-          'guessing, a task on which it is known to perform with near-perfect\n'
-          'accuracy.\n'
-          'BSD License.\n'
-          'http://software.wise-guys.nl/libtextcat/"',
- 'category': 'Text',
- 'requires': 'libtextcat0',
- 'parse-errors': ['embedded quote at line 7']}
diff --git a/test/testdata/hints/x86/release/libtextcat/libtextcat-2.2-2.expected b/test/testdata/hints/x86/release/libtextcat/libtextcat-2.2-2.expected
new file mode 100644
index 0000000..498e7e5
--- /dev/null
+++ b/test/testdata/hints/x86/release/libtextcat/libtextcat-2.2-2.expected
@@ -0,0 +1,11 @@
+{'sdesc': '"Text Classification Library (language guessing in C)"',
+ 'ldesc': '"Libtextcat is a library with functions that implement the\n'
+          'classification technique described in Cavnar & Trenkle, "N-Gram-Based\n'
+          'Text Categorization". It was primarily developed for language\n'
+          'guessing, a task on which it is known to perform with near-perfect\n'
+          'accuracy.\n'
+          'BSD License.\n'
+          'http://software.wise-guys.nl/libtextcat/"',
+ 'category': 'Text',
+ 'requires': 'libtextcat0',
+ 'parse-errors': ['embedded quote at line 7']}
diff --git a/test/testdata/hints/x86/release/libtextcat/libtextcat-devel/expected b/test/testdata/hints/x86/release/libtextcat/libtextcat-devel/expected
deleted file mode 100644
index aca0db6..0000000
--- a/test/testdata/hints/x86/release/libtextcat/libtextcat-devel/expected
+++ /dev/null
@@ -1,12 +0,0 @@
-{'sdesc': '"Helper, header and library for libtextcat"',
- 'ldesc': '"Libtextcat is a library with functions that implement the\n'
-          'classification technique described in Cavnar & Trenkle, "N-Gram-Based\n'
-          'Text Categorization". It was primarily developed for language\n'
-          'guessing, a task on which it is known to perform with near-perfect\n'
-          'accuracy.\n'
-          'BSD License.\n'
-          'http://software.wise-guys.nl/libtextcat/"',
- 'category': 'Devel Text',
- 'requires': 'libtextcat libtextcat0',
- 'external-source': 'libtextcat',
- 'parse-errors': ['embedded quote at line 7']}
diff --git a/test/testdata/hints/x86/release/libtextcat/libtextcat-devel/libtextcat-devel-2.2-2.expected b/test/testdata/hints/x86/release/libtextcat/libtextcat-devel/libtextcat-devel-2.2-2.expected
new file mode 100644
index 0000000..aca0db6
--- /dev/null
+++ b/test/testdata/hints/x86/release/libtextcat/libtextcat-devel/libtextcat-devel-2.2-2.expected
@@ -0,0 +1,12 @@
+{'sdesc': '"Helper, header and library for libtextcat"',
+ 'ldesc': '"Libtextcat is a library with functions that implement the\n'
+          'classification technique described in Cavnar & Trenkle, "N-Gram-Based\n'
+          'Text Categorization". It was primarily developed for language\n'
+          'guessing, a task on which it is known to perform with near-perfect\n'
+          'accuracy.\n'
+          'BSD License.\n'
+          'http://software.wise-guys.nl/libtextcat/"',
+ 'category': 'Devel Text',
+ 'requires': 'libtextcat libtextcat0',
+ 'external-source': 'libtextcat',
+ 'parse-errors': ['embedded quote at line 7']}
diff --git a/test/testdata/hints/x86/release/libtextcat/libtextcat0/expected b/test/testdata/hints/x86/release/libtextcat/libtextcat0/expected
deleted file mode 100644
index 7f186d6..0000000
--- a/test/testdata/hints/x86/release/libtextcat/libtextcat0/expected
+++ /dev/null
@@ -1,12 +0,0 @@
-{'sdesc': '"Text Classification Library dll"',
- 'ldesc': '"Libtextcat is a library with functions that implement the\n'
-          'classification technique described in Cavnar & Trenkle, "N-Gram-Based\n'
-          'Text Categorization". It was primarily developed for language\n'
-          'guessing, a task on which it is known to perform with near-perfect\n'
-          'accuracy.\n'
-          'BSD License.\n'
-          'http://software.wise-guys.nl/libtextcat/"',
- 'category': 'Text',
- 'requires': 'cygwin',
- 'external-source': 'libtextcat',
- 'parse-errors': ['embedded quote at line 7']}
diff --git a/test/testdata/hints/x86/release/libtextcat/libtextcat0/libtextcat0-2.2-2.expected b/test/testdata/hints/x86/release/libtextcat/libtextcat0/libtextcat0-2.2-2.expected
new file mode 100644
index 0000000..7f186d6
--- /dev/null
+++ b/test/testdata/hints/x86/release/libtextcat/libtextcat0/libtextcat0-2.2-2.expected
@@ -0,0 +1,12 @@
+{'sdesc': '"Text Classification Library dll"',
+ 'ldesc': '"Libtextcat is a library with functions that implement the\n'
+          'classification technique described in Cavnar & Trenkle, "N-Gram-Based\n'
+          'Text Categorization". It was primarily developed for language\n'
+          'guessing, a task on which it is known to perform with near-perfect\n'
+          'accuracy.\n'
+          'BSD License.\n'
+          'http://software.wise-guys.nl/libtextcat/"',
+ 'category': 'Text',
+ 'requires': 'cygwin',
+ 'external-source': 'libtextcat',
+ 'parse-errors': ['embedded quote at line 7']}
diff --git a/test/testdata/hints/x86/release/mDNSResponder/expected b/test/testdata/hints/x86/release/mDNSResponder/expected
deleted file mode 100644
index f02a324..0000000
--- a/test/testdata/hints/x86/release/mDNSResponder/expected
+++ /dev/null
@@ -1,10 +0,0 @@
-{'category': 'Net',
- 'requires': 'libdns_sd1',
- 'sdesc': '"Bonjour Zeroconf implementation"',
- 'ldesc': '"Bonjour, also known as zero-configuration networking, enables\n'
-          'automatic discovery of computers, devices, and services on IP networks using\n'
-          'industry standard IP protocols."',
- 'message': 'mDNSResponder "The Cygwin mDNSResponder package contains only clients.\n'
-            "If you do not already have the 'Bonjour Service' installed (it comes with\n"
-            'a number of popular Windows programs), then you can download it at\n'
-            'http://support.apple.com/kb/DL999"'}
diff --git a/test/testdata/hints/x86/release/mDNSResponder/libdns_sd-devel/expected b/test/testdata/hints/x86/release/mDNSResponder/libdns_sd-devel/expected
deleted file mode 100644
index 8e93797..0000000
--- a/test/testdata/hints/x86/release/mDNSResponder/libdns_sd-devel/expected
+++ /dev/null
@@ -1,7 +0,0 @@
-{'category': 'Net',
- 'requires': 'libdns_sd1',
- 'sdesc': '"Bonjour Zeroconf implementation"',
- 'ldesc': '"Bonjour, also known as zero-configuration networking, enables\n'
-          'automatic discovery of computers, devices, and services on IP networks using\n'
-          'industry standard IP protocols."',
- 'external-source': 'mDNSResponder'}
diff --git a/test/testdata/hints/x86/release/mDNSResponder/libdns_sd-devel/libdns_sd-devel-379.32.1-1.expected b/test/testdata/hints/x86/release/mDNSResponder/libdns_sd-devel/libdns_sd-devel-379.32.1-1.expected
new file mode 100644
index 0000000..8e93797
--- /dev/null
+++ b/test/testdata/hints/x86/release/mDNSResponder/libdns_sd-devel/libdns_sd-devel-379.32.1-1.expected
@@ -0,0 +1,7 @@
+{'category': 'Net',
+ 'requires': 'libdns_sd1',
+ 'sdesc': '"Bonjour Zeroconf implementation"',
+ 'ldesc': '"Bonjour, also known as zero-configuration networking, enables\n'
+          'automatic discovery of computers, devices, and services on IP networks using\n'
+          'industry standard IP protocols."',
+ 'external-source': 'mDNSResponder'}
diff --git a/test/testdata/hints/x86/release/mDNSResponder/libdns_sd1/expected b/test/testdata/hints/x86/release/mDNSResponder/libdns_sd1/expected
deleted file mode 100644
index 45d0032..0000000
--- a/test/testdata/hints/x86/release/mDNSResponder/libdns_sd1/expected
+++ /dev/null
@@ -1,7 +0,0 @@
-{'category': 'Net',
- 'requires': '',
- 'sdesc': '"Bonjour Zeroconf implementation"',
- 'ldesc': '"Bonjour, also known as zero-configuration networking, enables\n'
-          'automatic discovery of computers, devices, and services on IP networks using\n'
-          'industry standard IP protocols."',
- 'external-source': 'mDNSResponder'}
diff --git a/test/testdata/hints/x86/release/mDNSResponder/libdns_sd1/libdns_sd1-379.32.1-1.expected b/test/testdata/hints/x86/release/mDNSResponder/libdns_sd1/libdns_sd1-379.32.1-1.expected
new file mode 100644
index 0000000..45d0032
--- /dev/null
+++ b/test/testdata/hints/x86/release/mDNSResponder/libdns_sd1/libdns_sd1-379.32.1-1.expected
@@ -0,0 +1,7 @@
+{'category': 'Net',
+ 'requires': '',
+ 'sdesc': '"Bonjour Zeroconf implementation"',
+ 'ldesc': '"Bonjour, also known as zero-configuration networking, enables\n'
+          'automatic discovery of computers, devices, and services on IP networks using\n'
+          'industry standard IP protocols."',
+ 'external-source': 'mDNSResponder'}
diff --git a/test/testdata/hints/x86/release/mDNSResponder/mDNSResponder-379.32.1-1.expected b/test/testdata/hints/x86/release/mDNSResponder/mDNSResponder-379.32.1-1.expected
new file mode 100644
index 0000000..f02a324
--- /dev/null
+++ b/test/testdata/hints/x86/release/mDNSResponder/mDNSResponder-379.32.1-1.expected
@@ -0,0 +1,10 @@
+{'category': 'Net',
+ 'requires': 'libdns_sd1',
+ 'sdesc': '"Bonjour Zeroconf implementation"',
+ 'ldesc': '"Bonjour, also known as zero-configuration networking, enables\n'
+          'automatic discovery of computers, devices, and services on IP networks using\n'
+          'industry standard IP protocols."',
+ 'message': 'mDNSResponder "The Cygwin mDNSResponder package contains only clients.\n'
+            "If you do not already have the 'Bonjour Service' installed (it comes with\n"
+            'a number of popular Windows programs), then you can download it at\n'
+            'http://support.apple.com/kb/DL999"'}
diff --git a/test/testdata/hints/x86/release/mingw64-i686-binutils/expected b/test/testdata/hints/x86/release/mingw64-i686-binutils/expected
deleted file mode 100644
index 114e53c..0000000
--- a/test/testdata/hints/x86/release/mingw64-i686-binutils/expected
+++ /dev/null
@@ -1,6 +0,0 @@
-{'category': 'Devel',
- 'requires': 'cygwin libintl8 zlib0',
- 'sdesc': '"The GNU Binutils are a collection of binary tools. This package\n is capable of targeting win32"',
- 'ldesc': '"Binutils for MinGW-w64 Win32 toolchain"',
- 'parse-errors': ['key sdesc has multi-line value'],
- 'parse-warnings': ["sdesc ends with '.'", 'sdesc is much longer than ldesc']}
diff --git a/test/testdata/hints/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-2.29.1.787c9873-1.expected b/test/testdata/hints/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-2.29.1.787c9873-1.expected
new file mode 100644
index 0000000..114e53c
--- /dev/null
+++ b/test/testdata/hints/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-2.29.1.787c9873-1.expected
@@ -0,0 +1,6 @@
+{'category': 'Devel',
+ 'requires': 'cygwin libintl8 zlib0',
+ 'sdesc': '"The GNU Binutils are a collection of binary tools. This package\n is capable of targeting win32"',
+ 'ldesc': '"Binutils for MinGW-w64 Win32 toolchain"',
+ 'parse-errors': ['key sdesc has multi-line value'],
+ 'parse-warnings': ["sdesc ends with '.'", 'sdesc is much longer than ldesc']}
diff --git a/test/testdata/hints/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/expected b/test/testdata/hints/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/expected
deleted file mode 100644
index c936ff6..0000000
--- a/test/testdata/hints/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/expected
+++ /dev/null
@@ -1,7 +0,0 @@
-{'category': 'Debug',
- 'requires': 'cygwin-debuginfo',
- 'external-source': 'mingw64-i686-binutils',
- 'ldesc': '"Debug info for mingw64-i686-binutils"',
- 'sdesc': '"This package contains files necessary for debugging the\nmingw64-i686-binutils package with gdb"',
- 'parse-errors': ['key sdesc has multi-line value'],
- 'parse-warnings': ["sdesc ends with '.'", 'sdesc is much longer than ldesc']}
diff --git a/test/testdata/hints/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/mingw64-i686-binutils-debuginfo-2.29.1.787c9873-1.expected b/test/testdata/hints/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/mingw64-i686-binutils-debuginfo-2.29.1.787c9873-1.expected
new file mode 100644
index 0000000..c936ff6
--- /dev/null
+++ b/test/testdata/hints/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/mingw64-i686-binutils-debuginfo-2.29.1.787c9873-1.expected
@@ -0,0 +1,7 @@
+{'category': 'Debug',
+ 'requires': 'cygwin-debuginfo',
+ 'external-source': 'mingw64-i686-binutils',
+ 'ldesc': '"Debug info for mingw64-i686-binutils"',
+ 'sdesc': '"This package contains files necessary for debugging the\nmingw64-i686-binutils package with gdb"',
+ 'parse-errors': ['key sdesc has multi-line value'],
+ 'parse-warnings': ["sdesc ends with '.'", 'sdesc is much longer than ldesc']}
diff --git a/test/testdata/hints/x86/release/openssh/expected b/test/testdata/hints/x86/release/openssh/expected
deleted file mode 100644
index 8eeefad..0000000
--- a/test/testdata/hints/x86/release/openssh/expected
+++ /dev/null
@@ -1,5 +0,0 @@
-{'category': 'Net',
- 'sdesc': '"The OpenSSH server and client programs"',
- 'ldesc': '"OpenSSH is a program for logging into a remote machine and for\n'
-          '\texecuting commands on a remote machine.  It can replace rlogin and rsh,\n'
-          '\tproviding encrypted communication between two machines."'}
diff --git a/test/testdata/hints/x86/release/openssh/openssh-7.2p2-1.expected b/test/testdata/hints/x86/release/openssh/openssh-7.2p2-1.expected
new file mode 100644
index 0000000..8eeefad
--- /dev/null
+++ b/test/testdata/hints/x86/release/openssh/openssh-7.2p2-1.expected
@@ -0,0 +1,5 @@
+{'category': 'Net',
+ 'sdesc': '"The OpenSSH server and client programs"',
+ 'ldesc': '"OpenSSH is a program for logging into a remote machine and for\n'
+          '\texecuting commands on a remote machine.  It can replace rlogin and rsh,\n'
+          '\tproviding encrypted communication between two machines."'}
diff --git a/test/testdata/hints/x86/release/per-version-incomplete/override.expected b/test/testdata/hints/x86/release/per-version-incomplete/override.expected
new file mode 100644
index 0000000..75890e5
--- /dev/null
+++ b/test/testdata/hints/x86/release/per-version-incomplete/override.expected
@@ -0,0 +1 @@
+OrderedDict()
diff --git a/test/testdata/hints/x86/release/per-version-incomplete/per-version-incomplete-36-1.expected b/test/testdata/hints/x86/release/per-version-incomplete/per-version-incomplete-36-1.expected
new file mode 100644
index 0000000..e59d0d2
--- /dev/null
+++ b/test/testdata/hints/x86/release/per-version-incomplete/per-version-incomplete-36-1.expected
@@ -0,0 +1,3 @@
+{'sdesc': '"Per-version hint test package"',
+ 'ldesc': '"Per-version hint test package with missing hint data for some versions"',
+ 'category': 'Base'}
diff --git a/test/testdata/hints/x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1.expected b/test/testdata/hints/x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1.expected
new file mode 100644
index 0000000..d6a1e1f
--- /dev/null
+++ b/test/testdata/hints/x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1.expected
@@ -0,0 +1,4 @@
+{'sdesc': '"Per-version hint test package"',
+ 'ldesc': '"Per-version hint test package"',
+ 'category': 'Base',
+ 'requires': 'cygwin'}
diff --git a/test/testdata/hints/x86/release/per-version/override.expected b/test/testdata/hints/x86/release/per-version/override.expected
new file mode 100644
index 0000000..73d138e
--- /dev/null
+++ b/test/testdata/hints/x86/release/per-version/override.expected
@@ -0,0 +1 @@
+OrderedDict([('curr', '4.8-1')])
diff --git a/test/testdata/hints/x86/release/per-version/per-version-4.0-1.expected b/test/testdata/hints/x86/release/per-version/per-version-4.0-1.expected
new file mode 100644
index 0000000..d6a1e1f
--- /dev/null
+++ b/test/testdata/hints/x86/release/per-version/per-version-4.0-1.expected
@@ -0,0 +1,4 @@
+{'sdesc': '"Per-version hint test package"',
+ 'ldesc': '"Per-version hint test package"',
+ 'category': 'Base',
+ 'requires': 'cygwin'}
diff --git a/test/testdata/hints/x86/release/per-version/per-version-4.8-1.expected b/test/testdata/hints/x86/release/per-version/per-version-4.8-1.expected
new file mode 100644
index 0000000..40a138b
--- /dev/null
+++ b/test/testdata/hints/x86/release/per-version/per-version-4.8-1.expected
@@ -0,0 +1,4 @@
+{'sdesc': '"Per-version hint test package"',
+ 'ldesc': '"Per-version hint test package"',
+ 'category': 'Base',
+ 'requires': 'base-cygwin'}
diff --git a/test/testdata/hints/x86/release/proj/expected b/test/testdata/hints/x86/release/proj/expected
deleted file mode 100644
index 40db455..0000000
--- a/test/testdata/hints/x86/release/proj/expected
+++ /dev/null
@@ -1,5 +0,0 @@
-{'category': 'Graphics Libs',
- 'requires': 'libproj1',
- 'sdesc': '""The PROJ Cartographic Projections Software (utilities)"\n'
-          'ldesc: "Cartographic projection library and utilities"',
- 'parse-errors': ['embedded quote at line 3', 'key sdesc has multi-line value']}
diff --git a/test/testdata/hints/x86/release/proj/libproj-devel/expected b/test/testdata/hints/x86/release/proj/libproj-devel/expected
deleted file mode 100644
index 620f019..0000000
--- a/test/testdata/hints/x86/release/proj/libproj-devel/expected
+++ /dev/null
@@ -1,6 +0,0 @@
-{'category': 'Graphics Libs',
- 'requires': 'libproj1',
- 'sdesc': '""The PROJ Cartographic Projections Software (devel)"\n'
-          'ldesc: "Cartographic projection library and utilities"',
- 'external-source': 'proj',
- 'parse-errors': ['embedded quote at line 3', 'key sdesc has multi-line value']}
diff --git a/test/testdata/hints/x86/release/proj/libproj-devel/libproj-devel-4.8.0-1.expected b/test/testdata/hints/x86/release/proj/libproj-devel/libproj-devel-4.8.0-1.expected
new file mode 100644
index 0000000..620f019
--- /dev/null
+++ b/test/testdata/hints/x86/release/proj/libproj-devel/libproj-devel-4.8.0-1.expected
@@ -0,0 +1,6 @@
+{'category': 'Graphics Libs',
+ 'requires': 'libproj1',
+ 'sdesc': '""The PROJ Cartographic Projections Software (devel)"\n'
+          'ldesc: "Cartographic projection library and utilities"',
+ 'external-source': 'proj',
+ 'parse-errors': ['embedded quote at line 3', 'key sdesc has multi-line value']}
diff --git a/test/testdata/hints/x86/release/proj/libproj1/expected b/test/testdata/hints/x86/release/proj/libproj1/expected
deleted file mode 100644
index cc05b73..0000000
--- a/test/testdata/hints/x86/release/proj/libproj1/expected
+++ /dev/null
@@ -1,6 +0,0 @@
-{'category': 'Graphics Libs',
- 'requires': '',
- 'sdesc': '""The PROJ Cartographic Projections Software (runtime)"\n'
-          'ldesc: "Cartographic projection library and utilities"',
- 'external-source': 'proj',
- 'parse-errors': ['embedded quote at line 3', 'key sdesc has multi-line value']}
diff --git a/test/testdata/hints/x86/release/proj/libproj1/libproj1-4.8.0-1.expected b/test/testdata/hints/x86/release/proj/libproj1/libproj1-4.8.0-1.expected
new file mode 100644
index 0000000..cc05b73
--- /dev/null
+++ b/test/testdata/hints/x86/release/proj/libproj1/libproj1-4.8.0-1.expected
@@ -0,0 +1,6 @@
+{'category': 'Graphics Libs',
+ 'requires': '',
+ 'sdesc': '""The PROJ Cartographic Projections Software (runtime)"\n'
+          'ldesc: "Cartographic projection library and utilities"',
+ 'external-source': 'proj',
+ 'parse-errors': ['embedded quote at line 3', 'key sdesc has multi-line value']}
diff --git a/test/testdata/hints/x86/release/proj/proj-4.8.0-1.expected b/test/testdata/hints/x86/release/proj/proj-4.8.0-1.expected
new file mode 100644
index 0000000..40db455
--- /dev/null
+++ b/test/testdata/hints/x86/release/proj/proj-4.8.0-1.expected
@@ -0,0 +1,5 @@
+{'category': 'Graphics Libs',
+ 'requires': 'libproj1',
+ 'sdesc': '""The PROJ Cartographic Projections Software (utilities)"\n'
+          'ldesc: "Cartographic projection library and utilities"',
+ 'parse-errors': ['embedded quote at line 3', 'key sdesc has multi-line value']}
diff --git a/test/testdata/hints/x86/release/rpm-doc/expected b/test/testdata/hints/x86/release/rpm-doc/expected
deleted file mode 100644
index a47a381..0000000
--- a/test/testdata/hints/x86/release/rpm-doc/expected
+++ /dev/null
@@ -1,2 +0,0 @@
-{'sdesc': '"Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)"',
- 'category': '_obsolete'}
diff --git a/test/testdata/hints/x86/release/rpm-doc/rpm-doc-4.1-2.expected b/test/testdata/hints/x86/release/rpm-doc/rpm-doc-4.1-2.expected
new file mode 100644
index 0000000..a47a381
--- /dev/null
+++ b/test/testdata/hints/x86/release/rpm-doc/rpm-doc-4.1-2.expected
@@ -0,0 +1,2 @@
+{'sdesc': '"Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)"',
+ 'category': '_obsolete'}
diff --git a/test/testdata/hints/x86/release/rpm-doc/rpm-doc-999-1.expected b/test/testdata/hints/x86/release/rpm-doc/rpm-doc-999-1.expected
new file mode 100644
index 0000000..a47a381
--- /dev/null
+++ b/test/testdata/hints/x86/release/rpm-doc/rpm-doc-999-1.expected
@@ -0,0 +1,2 @@
+{'sdesc': '"Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)"',
+ 'category': '_obsolete'}
diff --git a/test/testdata/hints/x86/release/splint/expected b/test/testdata/hints/x86/release/splint/expected
deleted file mode 100644
index 5667e4b..0000000
--- a/test/testdata/hints/x86/release/splint/expected
+++ /dev/null
@@ -1,15 +0,0 @@
-{'sdesc': '"Check C programs for security vulnerabilities and programming\nmistakes"',
- 'ldesc': '"Program does many of the traditional lint checks including\n'
-          'unused declarations, type inconsistencies, use before definition,\n'
-          'unreachable code, ignored return values, execution paths with no\n'
-          'return, likely infinite loops, and fall through cases. More powerful\n'
-          'checks are made possible by additional information given in source\n'
-          'code annotations. Annotations are stylized comments that document\n'
-          'assumptions about functions, variables, parameters and types. In\n'
-          'addition to the checks specifically enabled by annotations, many of\n'
-          'the traditional lint checks are improved by exploiting this additional\n'
-          'setinformation."',
- 'category': 'Devel',
- 'requires': 'cygwin',
- 'parse-errors': ['key sdesc has multi-line value'],
- 'parse-warnings': ["sdesc ends with '.'"]}
diff --git a/test/testdata/hints/x86/release/splint/splint-3.1.2-1.expected b/test/testdata/hints/x86/release/splint/splint-3.1.2-1.expected
new file mode 100644
index 0000000..5667e4b
--- /dev/null
+++ b/test/testdata/hints/x86/release/splint/splint-3.1.2-1.expected
@@ -0,0 +1,15 @@
+{'sdesc': '"Check C programs for security vulnerabilities and programming\nmistakes"',
+ 'ldesc': '"Program does many of the traditional lint checks including\n'
+          'unused declarations, type inconsistencies, use before definition,\n'
+          'unreachable code, ignored return values, execution paths with no\n'
+          'return, likely infinite loops, and fall through cases. More powerful\n'
+          'checks are made possible by additional information given in source\n'
+          'code annotations. Annotations are stylized comments that document\n'
+          'assumptions about functions, variables, parameters and types. In\n'
+          'addition to the checks specifically enabled by annotations, many of\n'
+          'the traditional lint checks are improved by exploiting this additional\n'
+          'setinformation."',
+ 'category': 'Devel',
+ 'requires': 'cygwin',
+ 'parse-errors': ['key sdesc has multi-line value'],
+ 'parse-warnings': ["sdesc ends with '.'"]}
diff --git a/test/testdata/hints/x86/release/staleversion/expected b/test/testdata/hints/x86/release/staleversion/expected
deleted file mode 100644
index f7cc4fd..0000000
--- a/test/testdata/hints/x86/release/staleversion/expected
+++ /dev/null
@@ -1,4 +0,0 @@
-{'sdesc': '"Test package for stale version removal"',
- 'ldesc': '"Test package for stale version removal"',
- 'category': 'Shells Base',
- 'requires': ''}
diff --git a/test/testdata/hints/x86/release/staleversion/override.expected b/test/testdata/hints/x86/release/staleversion/override.expected
new file mode 100644
index 0000000..a0e7bdc
--- /dev/null
+++ b/test/testdata/hints/x86/release/staleversion/override.expected
@@ -0,0 +1 @@
+OrderedDict([('test', '260-0'), ('curr', '250-0'), ('prev', '243-0'), ('keep-count', '0')])
diff --git a/test/testdata/hints/x86/release/staleversion/staleversion-240-1.expected b/test/testdata/hints/x86/release/staleversion/staleversion-240-1.expected
new file mode 100644
index 0000000..f7cc4fd
--- /dev/null
+++ b/test/testdata/hints/x86/release/staleversion/staleversion-240-1.expected
@@ -0,0 +1,4 @@
+{'sdesc': '"Test package for stale version removal"',
+ 'ldesc': '"Test package for stale version removal"',
+ 'category': 'Shells Base',
+ 'requires': ''}
diff --git a/test/testdata/hints/x86/release/staleversion/staleversion-242-0.expected b/test/testdata/hints/x86/release/staleversion/staleversion-242-0.expected
new file mode 100644
index 0000000..f7cc4fd
--- /dev/null
+++ b/test/testdata/hints/x86/release/staleversion/staleversion-242-0.expected
@@ -0,0 +1,4 @@
+{'sdesc': '"Test package for stale version removal"',
+ 'ldesc': '"Test package for stale version removal"',
+ 'category': 'Shells Base',
+ 'requires': ''}
diff --git a/test/testdata/hints/x86/release/staleversion/staleversion-243-0.expected b/test/testdata/hints/x86/release/staleversion/staleversion-243-0.expected
new file mode 100644
index 0000000..f7cc4fd
--- /dev/null
+++ b/test/testdata/hints/x86/release/staleversion/staleversion-243-0.expected
@@ -0,0 +1,4 @@
+{'sdesc': '"Test package for stale version removal"',
+ 'ldesc': '"Test package for stale version removal"',
+ 'category': 'Shells Base',
+ 'requires': ''}
diff --git a/test/testdata/hints/x86/release/staleversion/staleversion-250-0.expected b/test/testdata/hints/x86/release/staleversion/staleversion-250-0.expected
new file mode 100644
index 0000000..f7cc4fd
--- /dev/null
+++ b/test/testdata/hints/x86/release/staleversion/staleversion-250-0.expected
@@ -0,0 +1,4 @@
+{'sdesc': '"Test package for stale version removal"',
+ 'ldesc': '"Test package for stale version removal"',
+ 'category': 'Shells Base',
+ 'requires': ''}
diff --git a/test/testdata/hints/x86/release/staleversion/staleversion-251-0.expected b/test/testdata/hints/x86/release/staleversion/staleversion-251-0.expected
new file mode 100644
index 0000000..f7cc4fd
--- /dev/null
+++ b/test/testdata/hints/x86/release/staleversion/staleversion-251-0.expected
@@ -0,0 +1,4 @@
+{'sdesc': '"Test package for stale version removal"',
+ 'ldesc': '"Test package for stale version removal"',
+ 'category': 'Shells Base',
+ 'requires': ''}
diff --git a/test/testdata/hints/x86/release/staleversion/staleversion-260-0.expected b/test/testdata/hints/x86/release/staleversion/staleversion-260-0.expected
new file mode 100644
index 0000000..f7cc4fd
--- /dev/null
+++ b/test/testdata/hints/x86/release/staleversion/staleversion-260-0.expected
@@ -0,0 +1,4 @@
+{'sdesc': '"Test package for stale version removal"',
+ 'ldesc': '"Test package for stale version removal"',
+ 'category': 'Shells Base',
+ 'requires': ''}
diff --git a/test/testdata/hints/x86/release/testpackage/expected b/test/testdata/hints/x86/release/testpackage/expected
deleted file mode 100644
index aa3c772..0000000
--- a/test/testdata/hints/x86/release/testpackage/expected
+++ /dev/null
@@ -1,3 +0,0 @@
-{'sdesc': '"A test package (stuff & other stuff)"',
- 'ldesc': '"A test package (stuff & other stuff)"',
- 'category': 'Devel'}
diff --git a/test/testdata/hints/x86/release/testpackage/testpackage-0.1-1.expected b/test/testdata/hints/x86/release/testpackage/testpackage-0.1-1.expected
new file mode 100644
index 0000000..aa3c772
--- /dev/null
+++ b/test/testdata/hints/x86/release/testpackage/testpackage-0.1-1.expected
@@ -0,0 +1,3 @@
+{'sdesc': '"A test package (stuff & other stuff)"',
+ 'ldesc': '"A test package (stuff & other stuff)"',
+ 'category': 'Devel'}
diff --git a/test/testdata/process_arch/rel_area.expected b/test/testdata/process_arch/rel_area.expected
index fd14f14..4b3b3ea 100644
--- a/test/testdata/process_arch/rel_area.expected
+++ b/test/testdata/process_arch/rel_area.expected
@@ -4,62 +4,83 @@
  'noarch/release/obs-a': ['obs-a-1.0-1-src.tar.xz', 'obs-a-1.0-1.hint', 'obs-a-1.0-1.tar.xz', 'sha512.sum'],
  'noarch/release/obs-b': ['obs-b-1.0-1-src.tar.xz', 'obs-b-1.0-1.hint', 'obs-b-1.0-1.tar.xz', 'sha512.sum'],
  'noarch/release/perl-Net-SMTP-SSL': ['perl-Net-SMTP-SSL-1.03-1-src.tar.xz',
+                                      'perl-Net-SMTP-SSL-1.03-1.hint',
                                       'perl-Net-SMTP-SSL-1.03-1.tar.xz',
                                       'perl-Net-SMTP-SSL-1.03-2-src.tar.xz',
                                       'perl-Net-SMTP-SSL-1.03-2.hint',
                                       'perl-Net-SMTP-SSL-1.03-2.tar.xz',
-                                      'setup.hint',
                                       'sha512.sum'],
  'noarch/release/test-c': ['sha512.sum', 'test-c-1.0-1-src.tar.xz', 'test-c-1.0-1.hint', 'test-c-1.0-1.tar.xz'],
  'noarch/release/test-d': ['sha512.sum', 'test-d-1.0-1-src.tar.xz', 'test-d-1.0-1.hint', 'test-d-1.0-1.tar.xz'],
  'noarch/release/test-e': ['sha512.sum', 'test-e-1.0-1-src.tar.xz', 'test-e-1.0-1.hint', 'test-e-1.0-1.tar.xz'],
  'x86': ['sha512.sum'],
  'x86/release': ['sha512.sum'],
- 'x86/release/arc': ['arc-4.32.7-10-src.tar.bz2', 'arc-4.32.7-10.tar.bz2', 'setup.hint'],
- 'x86/release/base-cygwin': ['base-cygwin-3.6-1.tar.xz', 'base-cygwin-3.8-1.tar.xz', 'setup.hint', 'sha512.sum'],
- 'x86/release/corrupt': ['corrupt-2.0.0-1-src.tar.xz', 'corrupt-2.0.0-1.tar.xz', 'setup.hint', 'sha512.sum'],
+ 'x86/release/arc': ['arc-4.32.7-10-src.tar.bz2', 'arc-4.32.7-10.hint', 'arc-4.32.7-10.tar.bz2'],
+ 'x86/release/base-cygwin': ['base-cygwin-3.6-1.hint',
+                             'base-cygwin-3.6-1.tar.xz',
+                             'base-cygwin-3.8-1.hint',
+                             'base-cygwin-3.8-1.tar.xz',
+                             'sha512.sum'],
+ 'x86/release/corrupt': ['corrupt-2.0.0-1-src.tar.xz', 'corrupt-2.0.0-1.hint', 'corrupt-2.0.0-1.tar.xz', 'sha512.sum'],
  'x86/release/cygwin': ['.this-should-be-ignored',
                         'cygwin-2.2.0-1-src.tar.xz',
+                        'cygwin-2.2.0-1.hint',
                         'cygwin-2.2.0-1.tar.xz',
                         'cygwin-2.2.1-1-src.tar.xz',
+                        'cygwin-2.2.1-1.hint',
                         'cygwin-2.2.1-1.tar.xz',
                         'cygwin-2.3.0-0.3-src.tar.xz',
                         'cygwin-2.3.0-0.3.hint',
                         'cygwin-2.3.0-0.3.tar.xz',
-                        'setup.hint',
+                        'override.hint',
                         'sha512.sum'],
- 'x86/release/cygwin/cygwin-debuginfo': ['cygwin-debuginfo-2.2.0-1.tar.xz',
+ 'x86/release/cygwin/cygwin-debuginfo': ['cygwin-debuginfo-2.2.0-1.hint',
+                                         'cygwin-debuginfo-2.2.0-1.tar.xz',
+                                         'cygwin-debuginfo-2.2.1-1.hint',
                                          'cygwin-debuginfo-2.2.1-1.tar.xz',
+                                         'cygwin-debuginfo-2.3.0-0.3.hint',
                                          'cygwin-debuginfo-2.3.0-0.3.tar.xz',
-                                         'setup.hint',
+                                         'override.hint',
                                          'sha512.sum'],
- 'x86/release/cygwin/cygwin-devel': ['cygwin-devel-2.2.0-1.tar.xz',
+ 'x86/release/cygwin/cygwin-devel': ['cygwin-devel-2.2.0-1.hint',
+                                     'cygwin-devel-2.2.0-1.tar.xz',
+                                     'cygwin-devel-2.2.1-1.hint',
                                      'cygwin-devel-2.2.1-1.tar.xz',
+                                     'cygwin-devel-2.3.0-0.3.hint',
                                      'cygwin-devel-2.3.0-0.3.tar.xz',
-                                     'setup.hint',
+                                     'override.hint',
                                      'sha512.sum'],
- 'x86/release/invalid': ['setup.hint', 'sha512.sum'],
+ 'x86/release/invalid': ['invalid-0.hint', 'sha512.sum'],
  'x86/release/keychain': ['keychain-2.6.8-1-src.tar.bz2',
+                          'keychain-2.6.8-1.hint',
                           'keychain-2.6.8-1.tar.bz2',
                           'keychain-2.7.1-1-src.tar.bz2',
+                          'keychain-2.7.1-1.hint',
                           'keychain-2.7.1-1.tar.bz2',
-                          'setup.hint',
                           'sha512.sum'],
- 'x86/release/libspiro': ['setup.hint', 'sha512.sum'],
- 'x86/release/libspiro/libspiro-devel': ['setup.hint', 'sha512.sum'],
- 'x86/release/libspiro/libspiro0': ['setup.hint', 'sha512.sum'],
- 'x86/release/libtextcat': ['libtextcat-2.2-2-src.tar.bz2', 'libtextcat-2.2-2.tar.bz2', 'setup.hint', 'sha512.sum'],
- 'x86/release/libtextcat/libtextcat-devel': ['libtextcat-devel-2.2-2.tar.bz2', 'setup.hint', 'sha512.sum'],
- 'x86/release/libtextcat/libtextcat0': ['libtextcat0-2.2-2.tar.bz2', 'setup.hint', 'sha512.sum'],
+ 'x86/release/libspiro': ['libspiro-20071029-1.hint', 'sha512.sum'],
+ 'x86/release/libspiro/libspiro-devel': ['libspiro-devel-20071029-1.hint', 'sha512.sum'],
+ 'x86/release/libspiro/libspiro0': ['libspiro0-20071029-1.hint', 'sha512.sum'],
+ 'x86/release/libtextcat': ['libtextcat-2.2-2-src.tar.bz2',
+                            'libtextcat-2.2-2.hint',
+                            'libtextcat-2.2-2.tar.bz2',
+                            'sha512.sum'],
+ 'x86/release/libtextcat/libtextcat-devel': ['libtextcat-devel-2.2-2.hint',
+                                             'libtextcat-devel-2.2-2.tar.bz2',
+                                             'sha512.sum'],
+ 'x86/release/libtextcat/libtextcat0': ['libtextcat0-2.2-2.hint', 'libtextcat0-2.2-2.tar.bz2', 'sha512.sum'],
  'x86/release/mDNSResponder': ['mDNSResponder-379.32.1-1-src.tar.bz2',
+                               'mDNSResponder-379.32.1-1.hint',
                                'mDNSResponder-379.32.1-1.tar.bz2',
-                               'setup.hint',
                                'sha512.sum'],
- 'x86/release/mDNSResponder/libdns_sd-devel': ['libdns_sd-devel-379.32.1-1.tar.bz2', 'setup.hint', 'sha512.sum'],
- 'x86/release/mDNSResponder/libdns_sd1': ['libdns_sd1-379.32.1-1.tar.bz2', 'setup.hint', 'sha512.sum'],
- 'x86/release/mingw64-i686-binutils': ['setup.hint', 'sha512.sum'],
- 'x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo': ['setup.hint', 'sha512.sum'],
- 'x86/release/openssh': ['openssh-7.2p2-1-src.tar.xz', 'openssh-7.2p2-1.tar.xz', 'setup.hint', 'sha512.sum'],
+ 'x86/release/mDNSResponder/libdns_sd-devel': ['libdns_sd-devel-379.32.1-1.hint',
+                                               'libdns_sd-devel-379.32.1-1.tar.bz2',
+                                               'sha512.sum'],
+ 'x86/release/mDNSResponder/libdns_sd1': ['libdns_sd1-379.32.1-1.hint', 'libdns_sd1-379.32.1-1.tar.bz2', 'sha512.sum'],
+ 'x86/release/mingw64-i686-binutils': ['mingw64-i686-binutils-2.29.1.787c9873-1.hint', 'sha512.sum'],
+ 'x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo': ['mingw64-i686-binutils-debuginfo-2.29.1.787c9873-1.hint',
+                                                                       'sha512.sum'],
+ 'x86/release/openssh': ['openssh-7.2p2-1-src.tar.xz', 'openssh-7.2p2-1.hint', 'openssh-7.2p2-1.tar.xz', 'sha512.sum'],
  'x86/release/per-version': ['override.hint',
                              'per-version-4.0-1-src.tar.xz',
                              'per-version-4.0-1.hint',
@@ -82,26 +103,28 @@
                                                    'per-version-replacement-hint-only-1.0-1.hint',
                                                    'per-version-replacement-hint-only-1.0-1.tar.xz',
                                                    'sha512.sum'],
- 'x86/release/proj': ['setup.hint', 'sha512.sum'],
- 'x86/release/proj/libproj-devel': ['setup.hint', 'sha512.sum'],
- 'x86/release/proj/libproj1': ['setup.hint', 'sha512.sum'],
+ 'x86/release/proj': ['proj-4.8.0-1.hint', 'sha512.sum'],
+ 'x86/release/proj/libproj-devel': ['libproj-devel-4.8.0-1.hint', 'sha512.sum'],
+ 'x86/release/proj/libproj1': ['libproj1-4.8.0-1.hint', 'sha512.sum'],
  'x86/release/rpm-doc': ['rpm-doc-4.1-2-src.tar.bz2',
+                         'rpm-doc-4.1-2.hint',
                          'rpm-doc-4.1-2.tar.bz2',
+                         'rpm-doc-999-1.hint',
                          'rpm-doc-999-1.tar.bz2',
-                         'setup.hint',
                          'sha512.sum'],
- 'x86/release/splint': ['setup.hint', 'sha512.sum'],
+ 'x86/release/splint': ['sha512.sum', 'splint-3.1.2-1.hint'],
  'x86/release/staleversion': ['override.hint',
-                              'setup.hint',
                               'sha512.sum',
                               'staleversion-243-0-src.tar.xz',
+                              'staleversion-243-0.hint',
                               'staleversion-243-0.tar.xz',
                               'staleversion-250-0-src.tar.xz',
+                              'staleversion-250-0.hint',
                               'staleversion-250-0.tar.xz',
                               'staleversion-260-0-src.tar.xz',
+                              'staleversion-260-0.hint',
                               'staleversion-260-0.tar.xz'],
- 'x86/release/testpackage': ['setup.hint',
-                             'sha512.sum',
+ 'x86/release/testpackage': ['sha512.sum',
                              'testpackage-1.0-1-src.tar.bz2',
                              'testpackage-1.0-1.hint',
                              'testpackage-1.0-1.tar.bz2'],
diff --git a/test/testdata/process_arch/vault.expected b/test/testdata/process_arch/vault.expected
index d3cb74a..aa85163 100644
--- a/test/testdata/process_arch/vault.expected
+++ b/test/testdata/process_arch/vault.expected
@@ -2,9 +2,12 @@
  'x86': [],
  'x86/release': [],
  'x86/release/staleversion': ['staleversion-240-1-src.tar.xz',
+                              'staleversion-240-1.hint',
                               'staleversion-240-1.tar.xz',
                               'staleversion-242-0-src.tar.xz',
+                              'staleversion-242-0.hint',
                               'staleversion-242-0.tar.xz',
                               'staleversion-251-0-src.tar.xz',
+                              'staleversion-251-0.hint',
                               'staleversion-251-0.tar.xz'],
- 'x86/release/testpackage': ['testpackage-0.1-1-src.tar.bz2', 'testpackage-0.1-1.tar.bz2']}
+ 'x86/release/testpackage': ['testpackage-0.1-1-src.tar.bz2', 'testpackage-0.1-1.hint', 'testpackage-0.1-1.tar.bz2']}
diff --git a/test/testdata/relarea/noarch/release/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-1.hint b/test/testdata/relarea/noarch/release/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-1.hint
new file mode 100644
index 0000000..f91a0e1
--- /dev/null
+++ b/test/testdata/relarea/noarch/release/perl-Net-SMTP-SSL/perl-Net-SMTP-SSL-1.03-1.hint
@@ -0,0 +1,5 @@
+category: Perl
+requires:
+sdesc: "Perl distribution Net-SMTP-SSL"
+ldesc: "Implements the same API as Net::SMTP, but uses IO::Socket::SSL for
+its network operations in order to support encrypted connections."
diff --git a/test/testdata/relarea/noarch/release/perl-Net-SMTP-SSL/setup.hint b/test/testdata/relarea/noarch/release/perl-Net-SMTP-SSL/setup.hint
deleted file mode 100644
index f91a0e1..0000000
--- a/test/testdata/relarea/noarch/release/perl-Net-SMTP-SSL/setup.hint
+++ /dev/null
@@ -1,5 +0,0 @@
-category: Perl
-requires:
-sdesc: "Perl distribution Net-SMTP-SSL"
-ldesc: "Implements the same API as Net::SMTP, but uses IO::Socket::SSL for
-its network operations in order to support encrypted connections."
diff --git a/test/testdata/relarea/x86/release/arc/arc-4.32.7-10.hint b/test/testdata/relarea/x86/release/arc/arc-4.32.7-10.hint
new file mode 100644
index 0000000..718cb55
--- /dev/null
+++ b/test/testdata/relarea/x86/release/arc/arc-4.32.7-10.hint
@@ -0,0 +1,8 @@
+sdesc: "The ARC archive utility"
+ldesc: "This program is based on the MSDOS ARC program, version 5.21, plus a
+few enhancements. ARC performs Huffman Squeezing on data. The Huffman
+Squeeze algorithm was removed from MSDOS ARC after version 5.12. It
+turns out to be more efficient than Lempel-Ziv style compression when
+compressing graphic images. Squeeze analysis is always done now, and
+the best of packing, squeezing, or crunching is used."
+category: Archive
diff --git a/test/testdata/relarea/x86/release/arc/setup.hint b/test/testdata/relarea/x86/release/arc/setup.hint
deleted file mode 100644
index 718cb55..0000000
--- a/test/testdata/relarea/x86/release/arc/setup.hint
+++ /dev/null
@@ -1,8 +0,0 @@
-sdesc: "The ARC archive utility"
-ldesc: "This program is based on the MSDOS ARC program, version 5.21, plus a
-few enhancements. ARC performs Huffman Squeezing on data. The Huffman
-Squeeze algorithm was removed from MSDOS ARC after version 5.12. It
-turns out to be more efficient than Lempel-Ziv style compression when
-compressing graphic images. Squeeze analysis is always done now, and
-the best of packing, squeezing, or crunching is used."
-category: Archive
diff --git a/test/testdata/relarea/x86/release/base-cygwin/base-cygwin-3.6-1.hint b/test/testdata/relarea/x86/release/base-cygwin/base-cygwin-3.6-1.hint
new file mode 100644
index 0000000..f6f64b2
--- /dev/null
+++ b/test/testdata/relarea/x86/release/base-cygwin/base-cygwin-3.6-1.hint
@@ -0,0 +1,4 @@
+sdesc: "Initial base installation helper script."
+ldesc: "Initial base installation helper script."
+category: Base
+requires: 
diff --git a/test/testdata/relarea/x86/release/base-cygwin/base-cygwin-3.8-1.hint b/test/testdata/relarea/x86/release/base-cygwin/base-cygwin-3.8-1.hint
new file mode 100644
index 0000000..f6f64b2
--- /dev/null
+++ b/test/testdata/relarea/x86/release/base-cygwin/base-cygwin-3.8-1.hint
@@ -0,0 +1,4 @@
+sdesc: "Initial base installation helper script."
+ldesc: "Initial base installation helper script."
+category: Base
+requires: 
diff --git a/test/testdata/relarea/x86/release/base-cygwin/setup.hint b/test/testdata/relarea/x86/release/base-cygwin/setup.hint
deleted file mode 100644
index f6f64b2..0000000
--- a/test/testdata/relarea/x86/release/base-cygwin/setup.hint
+++ /dev/null
@@ -1,4 +0,0 @@
-sdesc: "Initial base installation helper script."
-ldesc: "Initial base installation helper script."
-category: Base
-requires: 
diff --git a/test/testdata/relarea/x86/release/corrupt/corrupt-2.0.0-1.hint b/test/testdata/relarea/x86/release/corrupt/corrupt-2.0.0-1.hint
new file mode 100644
index 0000000..fa85bcc
--- /dev/null
+++ b/test/testdata/relarea/x86/release/corrupt/corrupt-2.0.0-1.hint
@@ -0,0 +1,3 @@
+sdesc: "A corrupt package"
+ldesc: "A package containing corrupt archives"
+category: Devel
diff --git a/test/testdata/relarea/x86/release/corrupt/setup.hint b/test/testdata/relarea/x86/release/corrupt/setup.hint
deleted file mode 100644
index fa85bcc..0000000
--- a/test/testdata/relarea/x86/release/corrupt/setup.hint
+++ /dev/null
@@ -1,3 +0,0 @@
-sdesc: "A corrupt package"
-ldesc: "A package containing corrupt archives"
-category: Devel
diff --git a/test/testdata/relarea/x86/release/cygwin/cygwin-2.2.0-1.hint b/test/testdata/relarea/x86/release/cygwin/cygwin-2.2.0-1.hint
new file mode 100644
index 0000000..be59e34
--- /dev/null
+++ b/test/testdata/relarea/x86/release/cygwin/cygwin-2.2.0-1.hint
@@ -0,0 +1,4 @@
+sdesc: "The UNIX emulation engine"
+ldesc: "The UNIX emulation engine"
+category: Base
+requires: base-cygwin
diff --git a/test/testdata/relarea/x86/release/cygwin/cygwin-2.2.1-1.hint b/test/testdata/relarea/x86/release/cygwin/cygwin-2.2.1-1.hint
new file mode 100644
index 0000000..be59e34
--- /dev/null
+++ b/test/testdata/relarea/x86/release/cygwin/cygwin-2.2.1-1.hint
@@ -0,0 +1,4 @@
+sdesc: "The UNIX emulation engine"
+ldesc: "The UNIX emulation engine"
+category: Base
+requires: base-cygwin
diff --git a/test/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1.hint b/test/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1.hint
new file mode 100644
index 0000000..274af74
--- /dev/null
+++ b/test/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1.hint
@@ -0,0 +1,6 @@
+category: Debug
+requires: cygwin-debuginfo
+external-source: cygwin
+sdesc: "Debug info for cygwin"
+ldesc: "This package contains files necessary for debugging the
+cygwin package with gdb."
diff --git a/test/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1.hint b/test/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1.hint
new file mode 100644
index 0000000..274af74
--- /dev/null
+++ b/test/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1.hint
@@ -0,0 +1,6 @@
+category: Debug
+requires: cygwin-debuginfo
+external-source: cygwin
+sdesc: "Debug info for cygwin"
+ldesc: "This package contains files necessary for debugging the
+cygwin package with gdb."
diff --git a/test/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3.hint b/test/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3.hint
new file mode 100644
index 0000000..274af74
--- /dev/null
+++ b/test/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3.hint
@@ -0,0 +1,6 @@
+category: Debug
+requires: cygwin-debuginfo
+external-source: cygwin
+sdesc: "Debug info for cygwin"
+ldesc: "This package contains files necessary for debugging the
+cygwin package with gdb."
diff --git a/test/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/override.hint b/test/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/override.hint
new file mode 100644
index 0000000..3634a56
--- /dev/null
+++ b/test/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/override.hint
@@ -0,0 +1,3 @@
+prev: 2.2.0-1
+curr: 2.2.1-1
+test: 2.3.0-0.3
diff --git a/test/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/setup.hint b/test/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/setup.hint
deleted file mode 100644
index 5ed452c..0000000
--- a/test/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/setup.hint
+++ /dev/null
@@ -1,9 +0,0 @@
-category: Debug
-requires: cygwin-debuginfo
-external-source: cygwin
-sdesc: "Debug info for cygwin"
-ldesc: "This package contains files necessary for debugging the
-cygwin package with gdb."
-prev: 2.2.0-1
-curr: 2.2.1-1
-test: 2.3.0-0.3
diff --git a/test/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.0-1.hint b/test/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.0-1.hint
new file mode 100644
index 0000000..2713c4d
--- /dev/null
+++ b/test/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.0-1.hint
@@ -0,0 +1,5 @@
+category: Devel
+requires:
+sdesc: "Core development files"
+ldesc: "Core development files required to build Cygwin packages"
+external-source: cygwin
diff --git a/test/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.1-1.hint b/test/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.1-1.hint
new file mode 100644
index 0000000..2713c4d
--- /dev/null
+++ b/test/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.1-1.hint
@@ -0,0 +1,5 @@
+category: Devel
+requires:
+sdesc: "Core development files"
+ldesc: "Core development files required to build Cygwin packages"
+external-source: cygwin
diff --git a/test/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.3.0-0.3.hint b/test/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.3.0-0.3.hint
new file mode 100644
index 0000000..2713c4d
--- /dev/null
+++ b/test/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.3.0-0.3.hint
@@ -0,0 +1,5 @@
+category: Devel
+requires:
+sdesc: "Core development files"
+ldesc: "Core development files required to build Cygwin packages"
+external-source: cygwin
diff --git a/test/testdata/relarea/x86/release/cygwin/cygwin-devel/override.hint b/test/testdata/relarea/x86/release/cygwin/cygwin-devel/override.hint
new file mode 100644
index 0000000..3634a56
--- /dev/null
+++ b/test/testdata/relarea/x86/release/cygwin/cygwin-devel/override.hint
@@ -0,0 +1,3 @@
+prev: 2.2.0-1
+curr: 2.2.1-1
+test: 2.3.0-0.3
diff --git a/test/testdata/relarea/x86/release/cygwin/cygwin-devel/setup.hint b/test/testdata/relarea/x86/release/cygwin/cygwin-devel/setup.hint
deleted file mode 100644
index 97170e3..0000000
--- a/test/testdata/relarea/x86/release/cygwin/cygwin-devel/setup.hint
+++ /dev/null
@@ -1,8 +0,0 @@
-category: Devel
-requires:
-sdesc: "Core development files"
-ldesc: "Core development files required to build Cygwin packages"
-external-source: cygwin
-prev: 2.2.0-1
-curr: 2.2.1-1
-test: 2.3.0-0.3
diff --git a/test/testdata/relarea/x86/release/cygwin/override.hint b/test/testdata/relarea/x86/release/cygwin/override.hint
new file mode 100644
index 0000000..3634a56
--- /dev/null
+++ b/test/testdata/relarea/x86/release/cygwin/override.hint
@@ -0,0 +1,3 @@
+prev: 2.2.0-1
+curr: 2.2.1-1
+test: 2.3.0-0.3
diff --git a/test/testdata/relarea/x86/release/cygwin/setup.hint b/test/testdata/relarea/x86/release/cygwin/setup.hint
deleted file mode 100644
index d0c4b26..0000000
--- a/test/testdata/relarea/x86/release/cygwin/setup.hint
+++ /dev/null
@@ -1,7 +0,0 @@
-sdesc: "The UNIX emulation engine"
-ldesc: "The UNIX emulation engine"
-category: Base
-requires: base-cygwin
-prev: 2.2.0-1
-curr: 2.2.1-1
-test: 2.3.0-0.3
diff --git a/test/testdata/relarea/x86/release/invalid/invalid-0.hint b/test/testdata/relarea/x86/release/invalid/invalid-0.hint
new file mode 100644
index 0000000..279c8c4
--- /dev/null
+++ b/test/testdata/relarea/x86/release/invalid/invalid-0.hint
@@ -0,0 +1,2 @@
+unknown-key: invalid-value
+invalid-construct
diff --git a/test/testdata/relarea/x86/release/invalid/setup.hint b/test/testdata/relarea/x86/release/invalid/setup.hint
deleted file mode 100644
index 279c8c4..0000000
--- a/test/testdata/relarea/x86/release/invalid/setup.hint
+++ /dev/null
@@ -1,2 +0,0 @@
-unknown-key: invalid-value
-invalid-construct
diff --git a/test/testdata/relarea/x86/release/keychain/keychain-2.6.8-1.hint b/test/testdata/relarea/x86/release/keychain/keychain-2.6.8-1.hint
new file mode 100644
index 0000000..7870969
--- /dev/null
+++ b/test/testdata/relarea/x86/release/keychain/keychain-2.6.8-1.hint
@@ -0,0 +1,12 @@
+sdesc: "Key manager for OpenSSH"
+ldesc: "Keychain is an OpenSSH key manager, typically run from
+~/.bash_profile. When keychain is run, it checks for a running
+ssh-agent, otherwise it starts one. It saves the ssh-agent environment
+variables to ~/.keychain/$HOSTNAME-sh, so that subsequent logins
+and non-interactive shells such as cron jobs can source the file and
+make passwordless ssh connections. In addition, when keychain runs, it
+verifies that the key files specified on the command-line are known to
+ssh-agent, otherwise it loads them, prompting you for a password if
+necessary"
+category: Utils
+requires: openssh
diff --git a/test/testdata/relarea/x86/release/keychain/keychain-2.7.1-1.hint b/test/testdata/relarea/x86/release/keychain/keychain-2.7.1-1.hint
new file mode 100644
index 0000000..7870969
--- /dev/null
+++ b/test/testdata/relarea/x86/release/keychain/keychain-2.7.1-1.hint
@@ -0,0 +1,12 @@
+sdesc: "Key manager for OpenSSH"
+ldesc: "Keychain is an OpenSSH key manager, typically run from
+~/.bash_profile. When keychain is run, it checks for a running
+ssh-agent, otherwise it starts one. It saves the ssh-agent environment
+variables to ~/.keychain/$HOSTNAME-sh, so that subsequent logins
+and non-interactive shells such as cron jobs can source the file and
+make passwordless ssh connections. In addition, when keychain runs, it
+verifies that the key files specified on the command-line are known to
+ssh-agent, otherwise it loads them, prompting you for a password if
+necessary"
+category: Utils
+requires: openssh
diff --git a/test/testdata/relarea/x86/release/keychain/setup.hint b/test/testdata/relarea/x86/release/keychain/setup.hint
deleted file mode 100644
index 7870969..0000000
--- a/test/testdata/relarea/x86/release/keychain/setup.hint
+++ /dev/null
@@ -1,12 +0,0 @@
-sdesc: "Key manager for OpenSSH"
-ldesc: "Keychain is an OpenSSH key manager, typically run from
-~/.bash_profile. When keychain is run, it checks for a running
-ssh-agent, otherwise it starts one. It saves the ssh-agent environment
-variables to ~/.keychain/$HOSTNAME-sh, so that subsequent logins
-and non-interactive shells such as cron jobs can source the file and
-make passwordless ssh connections. In addition, when keychain runs, it
-verifies that the key files specified on the command-line are known to
-ssh-agent, otherwise it loads them, prompting you for a password if
-necessary"
-category: Utils
-requires: openssh
diff --git a/test/testdata/relarea/x86/release/libspiro/libspiro-20071029-1.hint b/test/testdata/relarea/x86/release/libspiro/libspiro-20071029-1.hint
new file mode 100644
index 0000000..42f7126
--- /dev/null
+++ b/test/testdata/relarea/x86/release/libspiro/libspiro-20071029-1.hint
@@ -0,0 +1,9 @@
+category: Graphics
+sdesc: "Library for converting clothoid splines to bezier curves (sources)"
+ldesc: "Spiro is the creation of Raph Levien. It simplifies the drawing 
+of beautiful curves.
+
+Using bézier splines an artist can easily draw curves with the same 
+slope on either side of an on-curve point. Spiros, on the other hand, 
+are based on clothoid splines which make it easy to maintain constant 
+curvature as well as constant slope. Such curves will simply look nicer."
diff --git a/test/testdata/relarea/x86/release/libspiro/libspiro-devel/libspiro-devel-20071029-1.hint b/test/testdata/relarea/x86/release/libspiro/libspiro-devel/libspiro-devel-20071029-1.hint
new file mode 100644
index 0000000..37dcfd7
--- /dev/null
+++ b/test/testdata/relarea/x86/release/libspiro/libspiro-devel/libspiro-devel-20071029-1.hint
@@ -0,0 +1,11 @@
+category: Graphics
+requires: libspiro0
+external-source: libspiro
+sdesc: "Library for converting clothoid splines to bezier curves (development)"
+ldesc: "Spiro is the creation of Raph Levien. It simplifies the drawing 
+of beautiful curves.
+
+Using bézier splines an artist can easily draw curves with the same 
+slope on either side of an on-curve point. Spiros, on the other hand, 
+are based on clothoid splines which make it easy to maintain constant 
+curvature as well as constant slope. Such curves will simply look nicer."
diff --git a/test/testdata/relarea/x86/release/libspiro/libspiro-devel/setup.hint b/test/testdata/relarea/x86/release/libspiro/libspiro-devel/setup.hint
deleted file mode 100644
index 37dcfd7..0000000
--- a/test/testdata/relarea/x86/release/libspiro/libspiro-devel/setup.hint
+++ /dev/null
@@ -1,11 +0,0 @@
-category: Graphics
-requires: libspiro0
-external-source: libspiro
-sdesc: "Library for converting clothoid splines to bezier curves (development)"
-ldesc: "Spiro is the creation of Raph Levien. It simplifies the drawing 
-of beautiful curves.
-
-Using bézier splines an artist can easily draw curves with the same 
-slope on either side of an on-curve point. Spiros, on the other hand, 
-are based on clothoid splines which make it easy to maintain constant 
-curvature as well as constant slope. Such curves will simply look nicer."
diff --git a/test/testdata/relarea/x86/release/libspiro/libspiro0/libspiro0-20071029-1.hint b/test/testdata/relarea/x86/release/libspiro/libspiro0/libspiro0-20071029-1.hint
new file mode 100644
index 0000000..4d9ef6a
--- /dev/null
+++ b/test/testdata/relarea/x86/release/libspiro/libspiro0/libspiro0-20071029-1.hint
@@ -0,0 +1,11 @@
+category: Graphics
+requires: libgcc1
+external-source: libspiro
+sdesc: "Library for converting clothoid splines to bezier curves (runtime)"
+ldesc: "Spiro is the creation of Raph Levien. It simplifies the drawing 
+of beautiful curves.
+
+Using bézier splines an artist can easily draw curves with the same 
+slope on either side of an on-curve point. Spiros, on the other hand, 
+are based on clothoid splines which make it easy to maintain constant 
+curvature as well as constant slope. Such curves will simply look nicer."
diff --git a/test/testdata/relarea/x86/release/libspiro/libspiro0/setup.hint b/test/testdata/relarea/x86/release/libspiro/libspiro0/setup.hint
deleted file mode 100644
index 4d9ef6a..0000000
--- a/test/testdata/relarea/x86/release/libspiro/libspiro0/setup.hint
+++ /dev/null
@@ -1,11 +0,0 @@
-category: Graphics
-requires: libgcc1
-external-source: libspiro
-sdesc: "Library for converting clothoid splines to bezier curves (runtime)"
-ldesc: "Spiro is the creation of Raph Levien. It simplifies the drawing 
-of beautiful curves.
-
-Using bézier splines an artist can easily draw curves with the same 
-slope on either side of an on-curve point. Spiros, on the other hand, 
-are based on clothoid splines which make it easy to maintain constant 
-curvature as well as constant slope. Such curves will simply look nicer."
diff --git a/test/testdata/relarea/x86/release/libspiro/setup.hint b/test/testdata/relarea/x86/release/libspiro/setup.hint
deleted file mode 100644
index 42f7126..0000000
--- a/test/testdata/relarea/x86/release/libspiro/setup.hint
+++ /dev/null
@@ -1,9 +0,0 @@
-category: Graphics
-sdesc: "Library for converting clothoid splines to bezier curves (sources)"
-ldesc: "Spiro is the creation of Raph Levien. It simplifies the drawing 
-of beautiful curves.
-
-Using bézier splines an artist can easily draw curves with the same 
-slope on either side of an on-curve point. Spiros, on the other hand, 
-are based on clothoid splines which make it easy to maintain constant 
-curvature as well as constant slope. Such curves will simply look nicer."
diff --git a/test/testdata/relarea/x86/release/libtextcat/libtextcat-2.2-2.hint b/test/testdata/relarea/x86/release/libtextcat/libtextcat-2.2-2.hint
new file mode 100644
index 0000000..5145c2d
--- /dev/null
+++ b/test/testdata/relarea/x86/release/libtextcat/libtextcat-2.2-2.hint
@@ -0,0 +1,10 @@
+sdesc: "Text Classification Library (language guessing in C)"
+ldesc: "Libtextcat is a library with functions that implement the
+classification technique described in Cavnar & Trenkle, "N-Gram-Based
+Text Categorization". It was primarily developed for language
+guessing, a task on which it is known to perform with near-perfect
+accuracy. 
+BSD License.
+http://software.wise-guys.nl/libtextcat/"
+category: Text
+requires: libtextcat0
diff --git a/test/testdata/relarea/x86/release/libtextcat/libtextcat-devel/libtextcat-devel-2.2-2.hint b/test/testdata/relarea/x86/release/libtextcat/libtextcat-devel/libtextcat-devel-2.2-2.hint
new file mode 100644
index 0000000..f509126
--- /dev/null
+++ b/test/testdata/relarea/x86/release/libtextcat/libtextcat-devel/libtextcat-devel-2.2-2.hint
@@ -0,0 +1,11 @@
+sdesc: "Helper, header and library for libtextcat"
+ldesc: "Libtextcat is a library with functions that implement the
+classification technique described in Cavnar & Trenkle, "N-Gram-Based
+Text Categorization". It was primarily developed for language
+guessing, a task on which it is known to perform with near-perfect
+accuracy.
+BSD License.
+http://software.wise-guys.nl/libtextcat/"
+category: Devel Text
+requires: libtextcat0 libtextcat
+external-source: libtextcat
diff --git a/test/testdata/relarea/x86/release/libtextcat/libtextcat-devel/setup.hint b/test/testdata/relarea/x86/release/libtextcat/libtextcat-devel/setup.hint
deleted file mode 100644
index f509126..0000000
--- a/test/testdata/relarea/x86/release/libtextcat/libtextcat-devel/setup.hint
+++ /dev/null
@@ -1,11 +0,0 @@
-sdesc: "Helper, header and library for libtextcat"
-ldesc: "Libtextcat is a library with functions that implement the
-classification technique described in Cavnar & Trenkle, "N-Gram-Based
-Text Categorization". It was primarily developed for language
-guessing, a task on which it is known to perform with near-perfect
-accuracy.
-BSD License.
-http://software.wise-guys.nl/libtextcat/"
-category: Devel Text
-requires: libtextcat0 libtextcat
-external-source: libtextcat
diff --git a/test/testdata/relarea/x86/release/libtextcat/libtextcat0/libtextcat0-2.2-2.hint b/test/testdata/relarea/x86/release/libtextcat/libtextcat0/libtextcat0-2.2-2.hint
new file mode 100644
index 0000000..f3ae673
--- /dev/null
+++ b/test/testdata/relarea/x86/release/libtextcat/libtextcat0/libtextcat0-2.2-2.hint
@@ -0,0 +1,11 @@
+sdesc: "Text Classification Library dll"
+ldesc: "Libtextcat is a library with functions that implement the
+classification technique described in Cavnar & Trenkle, "N-Gram-Based
+Text Categorization". It was primarily developed for language
+guessing, a task on which it is known to perform with near-perfect
+accuracy.
+BSD License.
+http://software.wise-guys.nl/libtextcat/"
+category: Text
+requires: cygwin
+external-source: libtextcat
diff --git a/test/testdata/relarea/x86/release/libtextcat/libtextcat0/setup.hint b/test/testdata/relarea/x86/release/libtextcat/libtextcat0/setup.hint
deleted file mode 100644
index f3ae673..0000000
--- a/test/testdata/relarea/x86/release/libtextcat/libtextcat0/setup.hint
+++ /dev/null
@@ -1,11 +0,0 @@
-sdesc: "Text Classification Library dll"
-ldesc: "Libtextcat is a library with functions that implement the
-classification technique described in Cavnar & Trenkle, "N-Gram-Based
-Text Categorization". It was primarily developed for language
-guessing, a task on which it is known to perform with near-perfect
-accuracy.
-BSD License.
-http://software.wise-guys.nl/libtextcat/"
-category: Text
-requires: cygwin
-external-source: libtextcat
diff --git a/test/testdata/relarea/x86/release/libtextcat/setup.hint b/test/testdata/relarea/x86/release/libtextcat/setup.hint
deleted file mode 100644
index 5145c2d..0000000
--- a/test/testdata/relarea/x86/release/libtextcat/setup.hint
+++ /dev/null
@@ -1,10 +0,0 @@
-sdesc: "Text Classification Library (language guessing in C)"
-ldesc: "Libtextcat is a library with functions that implement the
-classification technique described in Cavnar & Trenkle, "N-Gram-Based
-Text Categorization". It was primarily developed for language
-guessing, a task on which it is known to perform with near-perfect
-accuracy. 
-BSD License.
-http://software.wise-guys.nl/libtextcat/"
-category: Text
-requires: libtextcat0
diff --git a/test/testdata/relarea/x86/release/mDNSResponder/libdns_sd-devel/libdns_sd-devel-379.32.1-1.hint b/test/testdata/relarea/x86/release/mDNSResponder/libdns_sd-devel/libdns_sd-devel-379.32.1-1.hint
new file mode 100644
index 0000000..c285be7
--- /dev/null
+++ b/test/testdata/relarea/x86/release/mDNSResponder/libdns_sd-devel/libdns_sd-devel-379.32.1-1.hint
@@ -0,0 +1,7 @@
+category: Net
+requires: libdns_sd1 
+sdesc: "Bonjour Zeroconf implementation"
+ldesc: "Bonjour, also known as zero-configuration networking, enables
+automatic discovery of computers, devices, and services on IP networks using
+industry standard IP protocols."
+external-source: mDNSResponder
diff --git a/test/testdata/relarea/x86/release/mDNSResponder/libdns_sd-devel/setup.hint b/test/testdata/relarea/x86/release/mDNSResponder/libdns_sd-devel/setup.hint
deleted file mode 100644
index c285be7..0000000
--- a/test/testdata/relarea/x86/release/mDNSResponder/libdns_sd-devel/setup.hint
+++ /dev/null
@@ -1,7 +0,0 @@
-category: Net
-requires: libdns_sd1 
-sdesc: "Bonjour Zeroconf implementation"
-ldesc: "Bonjour, also known as zero-configuration networking, enables
-automatic discovery of computers, devices, and services on IP networks using
-industry standard IP protocols."
-external-source: mDNSResponder
diff --git a/test/testdata/relarea/x86/release/mDNSResponder/libdns_sd1/libdns_sd1-379.32.1-1.hint b/test/testdata/relarea/x86/release/mDNSResponder/libdns_sd1/libdns_sd1-379.32.1-1.hint
new file mode 100644
index 0000000..74a7a3f
--- /dev/null
+++ b/test/testdata/relarea/x86/release/mDNSResponder/libdns_sd1/libdns_sd1-379.32.1-1.hint
@@ -0,0 +1,7 @@
+category: Net
+requires:  
+sdesc: "Bonjour Zeroconf implementation"
+ldesc: "Bonjour, also known as zero-configuration networking, enables
+automatic discovery of computers, devices, and services on IP networks using
+industry standard IP protocols."
+external-source: mDNSResponder
diff --git a/test/testdata/relarea/x86/release/mDNSResponder/libdns_sd1/setup.hint b/test/testdata/relarea/x86/release/mDNSResponder/libdns_sd1/setup.hint
deleted file mode 100644
index 74a7a3f..0000000
--- a/test/testdata/relarea/x86/release/mDNSResponder/libdns_sd1/setup.hint
+++ /dev/null
@@ -1,7 +0,0 @@
-category: Net
-requires:  
-sdesc: "Bonjour Zeroconf implementation"
-ldesc: "Bonjour, also known as zero-configuration networking, enables
-automatic discovery of computers, devices, and services on IP networks using
-industry standard IP protocols."
-external-source: mDNSResponder
diff --git a/test/testdata/relarea/x86/release/mDNSResponder/mDNSResponder-379.32.1-1.hint b/test/testdata/relarea/x86/release/mDNSResponder/mDNSResponder-379.32.1-1.hint
new file mode 100644
index 0000000..e50938b
--- /dev/null
+++ b/test/testdata/relarea/x86/release/mDNSResponder/mDNSResponder-379.32.1-1.hint
@@ -0,0 +1,11 @@
+category: Net
+requires: libdns_sd1 
+sdesc: "Bonjour Zeroconf implementation"
+ldesc: "Bonjour, also known as zero-configuration networking, enables
+automatic discovery of computers, devices, and services on IP networks using
+industry standard IP protocols."
+
+message: mDNSResponder "The Cygwin mDNSResponder package contains only clients.
+If you do not already have the 'Bonjour Service' installed (it comes with
+a number of popular Windows programs), then you can download it at
+http://support.apple.com/kb/DL999"
diff --git a/test/testdata/relarea/x86/release/mDNSResponder/setup.hint b/test/testdata/relarea/x86/release/mDNSResponder/setup.hint
deleted file mode 100644
index e50938b..0000000
--- a/test/testdata/relarea/x86/release/mDNSResponder/setup.hint
+++ /dev/null
@@ -1,11 +0,0 @@
-category: Net
-requires: libdns_sd1 
-sdesc: "Bonjour Zeroconf implementation"
-ldesc: "Bonjour, also known as zero-configuration networking, enables
-automatic discovery of computers, devices, and services on IP networks using
-industry standard IP protocols."
-
-message: mDNSResponder "The Cygwin mDNSResponder package contains only clients.
-If you do not already have the 'Bonjour Service' installed (it comes with
-a number of popular Windows programs), then you can download it at
-http://support.apple.com/kb/DL999"
diff --git a/test/testdata/relarea/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-2.29.1.787c9873-1.hint b/test/testdata/relarea/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-2.29.1.787c9873-1.hint
new file mode 100644
index 0000000..f911d0d
--- /dev/null
+++ b/test/testdata/relarea/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-2.29.1.787c9873-1.hint
@@ -0,0 +1,5 @@
+category: Devel
+requires: cygwin libintl8 zlib0 
+sdesc: "The GNU Binutils are a collection of binary tools. This package
+ is capable of targeting win32."
+ldesc: "Binutils for MinGW-w64 Win32 toolchain"
diff --git a/test/testdata/relarea/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/mingw64-i686-binutils-debuginfo-2.29.1.787c9873-1.hint b/test/testdata/relarea/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/mingw64-i686-binutils-debuginfo-2.29.1.787c9873-1.hint
new file mode 100644
index 0000000..55ba552
--- /dev/null
+++ b/test/testdata/relarea/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/mingw64-i686-binutils-debuginfo-2.29.1.787c9873-1.hint
@@ -0,0 +1,6 @@
+category: Debug
+requires: cygwin-debuginfo
+external-source: mingw64-i686-binutils
+ldesc: "Debug info for mingw64-i686-binutils"
+sdesc: "This package contains files necessary for debugging the
+mingw64-i686-binutils package with gdb."
diff --git a/test/testdata/relarea/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/setup.hint b/test/testdata/relarea/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/setup.hint
deleted file mode 100644
index 55ba552..0000000
--- a/test/testdata/relarea/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/setup.hint
+++ /dev/null
@@ -1,6 +0,0 @@
-category: Debug
-requires: cygwin-debuginfo
-external-source: mingw64-i686-binutils
-ldesc: "Debug info for mingw64-i686-binutils"
-sdesc: "This package contains files necessary for debugging the
-mingw64-i686-binutils package with gdb."
diff --git a/test/testdata/relarea/x86/release/mingw64-i686-binutils/setup.hint b/test/testdata/relarea/x86/release/mingw64-i686-binutils/setup.hint
deleted file mode 100644
index f911d0d..0000000
--- a/test/testdata/relarea/x86/release/mingw64-i686-binutils/setup.hint
+++ /dev/null
@@ -1,5 +0,0 @@
-category: Devel
-requires: cygwin libintl8 zlib0 
-sdesc: "The GNU Binutils are a collection of binary tools. This package
- is capable of targeting win32."
-ldesc: "Binutils for MinGW-w64 Win32 toolchain"
diff --git a/test/testdata/relarea/x86/release/openssh/openssh-7.2p2-1.hint b/test/testdata/relarea/x86/release/openssh/openssh-7.2p2-1.hint
new file mode 100644
index 0000000..83aa11a
--- /dev/null
+++ b/test/testdata/relarea/x86/release/openssh/openssh-7.2p2-1.hint
@@ -0,0 +1,5 @@
+category: Net
+sdesc: "The OpenSSH server and client programs"
+ldesc: "OpenSSH is a program for logging into a remote machine and for
+	executing commands on a remote machine.  It can replace rlogin and rsh,
+	providing encrypted communication between two machines."
diff --git a/test/testdata/relarea/x86/release/openssh/setup.hint b/test/testdata/relarea/x86/release/openssh/setup.hint
deleted file mode 100644
index 83aa11a..0000000
--- a/test/testdata/relarea/x86/release/openssh/setup.hint
+++ /dev/null
@@ -1,5 +0,0 @@
-category: Net
-sdesc: "The OpenSSH server and client programs"
-ldesc: "OpenSSH is a program for logging into a remote machine and for
-	executing commands on a remote machine.  It can replace rlogin and rsh,
-	providing encrypted communication between two machines."
diff --git a/test/testdata/relarea/x86/release/proj/libproj-devel/libproj-devel-4.8.0-1.hint b/test/testdata/relarea/x86/release/proj/libproj-devel/libproj-devel-4.8.0-1.hint
new file mode 100644
index 0000000..76d1555
--- /dev/null
+++ b/test/testdata/relarea/x86/release/proj/libproj-devel/libproj-devel-4.8.0-1.hint
@@ -0,0 +1,5 @@
+category: Graphics Libs
+requires: libproj1 
+sdesc: ""The PROJ Cartographic Projections Software (devel)"
+ldesc: "Cartographic projection library and utilities"
+external-source: proj
diff --git a/test/testdata/relarea/x86/release/proj/libproj-devel/setup.hint b/test/testdata/relarea/x86/release/proj/libproj-devel/setup.hint
deleted file mode 100644
index 76d1555..0000000
--- a/test/testdata/relarea/x86/release/proj/libproj-devel/setup.hint
+++ /dev/null
@@ -1,5 +0,0 @@
-category: Graphics Libs
-requires: libproj1 
-sdesc: ""The PROJ Cartographic Projections Software (devel)"
-ldesc: "Cartographic projection library and utilities"
-external-source: proj
diff --git a/test/testdata/relarea/x86/release/proj/libproj1/libproj1-4.8.0-1.hint b/test/testdata/relarea/x86/release/proj/libproj1/libproj1-4.8.0-1.hint
new file mode 100644
index 0000000..22a79bd
--- /dev/null
+++ b/test/testdata/relarea/x86/release/proj/libproj1/libproj1-4.8.0-1.hint
@@ -0,0 +1,5 @@
+category: Graphics Libs
+requires:  
+sdesc: ""The PROJ Cartographic Projections Software (runtime)"
+ldesc: "Cartographic projection library and utilities"
+external-source: proj
diff --git a/test/testdata/relarea/x86/release/proj/libproj1/setup.hint b/test/testdata/relarea/x86/release/proj/libproj1/setup.hint
deleted file mode 100644
index 22a79bd..0000000
--- a/test/testdata/relarea/x86/release/proj/libproj1/setup.hint
+++ /dev/null
@@ -1,5 +0,0 @@
-category: Graphics Libs
-requires:  
-sdesc: ""The PROJ Cartographic Projections Software (runtime)"
-ldesc: "Cartographic projection library and utilities"
-external-source: proj
diff --git a/test/testdata/relarea/x86/release/proj/proj-4.8.0-1.hint b/test/testdata/relarea/x86/release/proj/proj-4.8.0-1.hint
new file mode 100644
index 0000000..c5da485
--- /dev/null
+++ b/test/testdata/relarea/x86/release/proj/proj-4.8.0-1.hint
@@ -0,0 +1,4 @@
+category: Graphics Libs
+requires: libproj1 
+sdesc: ""The PROJ Cartographic Projections Software (utilities)"
+ldesc: "Cartographic projection library and utilities"
diff --git a/test/testdata/relarea/x86/release/proj/setup.hint b/test/testdata/relarea/x86/release/proj/setup.hint
deleted file mode 100644
index c5da485..0000000
--- a/test/testdata/relarea/x86/release/proj/setup.hint
+++ /dev/null
@@ -1,4 +0,0 @@
-category: Graphics Libs
-requires: libproj1 
-sdesc: ""The PROJ Cartographic Projections Software (utilities)"
-ldesc: "Cartographic projection library and utilities"
diff --git a/test/testdata/relarea/x86/release/rpm-doc/rpm-doc-4.1-2.hint b/test/testdata/relarea/x86/release/rpm-doc/rpm-doc-4.1-2.hint
new file mode 100644
index 0000000..087a6dd
--- /dev/null
+++ b/test/testdata/relarea/x86/release/rpm-doc/rpm-doc-4.1-2.hint
@@ -0,0 +1,2 @@
+sdesc: "Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)"
+category: _obsolete
diff --git a/test/testdata/relarea/x86/release/rpm-doc/rpm-doc-999-1.hint b/test/testdata/relarea/x86/release/rpm-doc/rpm-doc-999-1.hint
new file mode 100644
index 0000000..087a6dd
--- /dev/null
+++ b/test/testdata/relarea/x86/release/rpm-doc/rpm-doc-999-1.hint
@@ -0,0 +1,2 @@
+sdesc: "Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)"
+category: _obsolete
diff --git a/test/testdata/relarea/x86/release/rpm-doc/setup.hint b/test/testdata/relarea/x86/release/rpm-doc/setup.hint
deleted file mode 100644
index 087a6dd..0000000
--- a/test/testdata/relarea/x86/release/rpm-doc/setup.hint
+++ /dev/null
@@ -1,2 +0,0 @@
-sdesc: "Obsolete package for RPM package management system manual pages (extra text to so repr is not one line)"
-category: _obsolete
diff --git a/test/testdata/relarea/x86/release/splint/setup.hint b/test/testdata/relarea/x86/release/splint/setup.hint
deleted file mode 100644
index 52b56b9..0000000
--- a/test/testdata/relarea/x86/release/splint/setup.hint
+++ /dev/null
@@ -1,14 +0,0 @@
-sdesc: "Check C programs for security vulnerabilities and programming
-mistakes."
-ldesc: "Program does many of the traditional lint checks including
-unused declarations, type inconsistencies, use before definition,
-unreachable code, ignored return values, execution paths with no
-return, likely infinite loops, and fall through cases. More powerful
-checks are made possible by additional information given in source
-code annotations. Annotations are stylized comments that document
-assumptions about functions, variables, parameters and types. In
-addition to the checks specifically enabled by annotations, many of
-the traditional lint checks are improved by exploiting this additional
-setinformation."
-category: Devel
-requires: cygwin
diff --git a/test/testdata/relarea/x86/release/splint/splint-3.1.2-1.hint b/test/testdata/relarea/x86/release/splint/splint-3.1.2-1.hint
new file mode 100644
index 0000000..52b56b9
--- /dev/null
+++ b/test/testdata/relarea/x86/release/splint/splint-3.1.2-1.hint
@@ -0,0 +1,14 @@
+sdesc: "Check C programs for security vulnerabilities and programming
+mistakes."
+ldesc: "Program does many of the traditional lint checks including
+unused declarations, type inconsistencies, use before definition,
+unreachable code, ignored return values, execution paths with no
+return, likely infinite loops, and fall through cases. More powerful
+checks are made possible by additional information given in source
+code annotations. Annotations are stylized comments that document
+assumptions about functions, variables, parameters and types. In
+addition to the checks specifically enabled by annotations, many of
+the traditional lint checks are improved by exploiting this additional
+setinformation."
+category: Devel
+requires: cygwin
diff --git a/test/testdata/relarea/x86/release/staleversion/setup.hint b/test/testdata/relarea/x86/release/staleversion/setup.hint
deleted file mode 100644
index 7f7f48a..0000000
--- a/test/testdata/relarea/x86/release/staleversion/setup.hint
+++ /dev/null
@@ -1,4 +0,0 @@
-sdesc: "Test package for stale version removal"
-ldesc: "Test package for stale version removal"
-category: Shells Base
-requires:
diff --git a/test/testdata/relarea/x86/release/staleversion/staleversion-240-1.hint b/test/testdata/relarea/x86/release/staleversion/staleversion-240-1.hint
new file mode 100644
index 0000000..7f7f48a
--- /dev/null
+++ b/test/testdata/relarea/x86/release/staleversion/staleversion-240-1.hint
@@ -0,0 +1,4 @@
+sdesc: "Test package for stale version removal"
+ldesc: "Test package for stale version removal"
+category: Shells Base
+requires:
diff --git a/test/testdata/relarea/x86/release/staleversion/staleversion-242-0.hint b/test/testdata/relarea/x86/release/staleversion/staleversion-242-0.hint
new file mode 100644
index 0000000..7f7f48a
--- /dev/null
+++ b/test/testdata/relarea/x86/release/staleversion/staleversion-242-0.hint
@@ -0,0 +1,4 @@
+sdesc: "Test package for stale version removal"
+ldesc: "Test package for stale version removal"
+category: Shells Base
+requires:
diff --git a/test/testdata/relarea/x86/release/staleversion/staleversion-243-0.hint b/test/testdata/relarea/x86/release/staleversion/staleversion-243-0.hint
new file mode 100644
index 0000000..7f7f48a
--- /dev/null
+++ b/test/testdata/relarea/x86/release/staleversion/staleversion-243-0.hint
@@ -0,0 +1,4 @@
+sdesc: "Test package for stale version removal"
+ldesc: "Test package for stale version removal"
+category: Shells Base
+requires:
diff --git a/test/testdata/relarea/x86/release/staleversion/staleversion-250-0.hint b/test/testdata/relarea/x86/release/staleversion/staleversion-250-0.hint
new file mode 100644
index 0000000..7f7f48a
--- /dev/null
+++ b/test/testdata/relarea/x86/release/staleversion/staleversion-250-0.hint
@@ -0,0 +1,4 @@
+sdesc: "Test package for stale version removal"
+ldesc: "Test package for stale version removal"
+category: Shells Base
+requires:
diff --git a/test/testdata/relarea/x86/release/staleversion/staleversion-251-0.hint b/test/testdata/relarea/x86/release/staleversion/staleversion-251-0.hint
new file mode 100644
index 0000000..7f7f48a
--- /dev/null
+++ b/test/testdata/relarea/x86/release/staleversion/staleversion-251-0.hint
@@ -0,0 +1,4 @@
+sdesc: "Test package for stale version removal"
+ldesc: "Test package for stale version removal"
+category: Shells Base
+requires:
diff --git a/test/testdata/relarea/x86/release/staleversion/staleversion-260-0.hint b/test/testdata/relarea/x86/release/staleversion/staleversion-260-0.hint
new file mode 100644
index 0000000..7f7f48a
--- /dev/null
+++ b/test/testdata/relarea/x86/release/staleversion/staleversion-260-0.hint
@@ -0,0 +1,4 @@
+sdesc: "Test package for stale version removal"
+ldesc: "Test package for stale version removal"
+category: Shells Base
+requires:
diff --git a/test/testdata/relarea/x86/release/testpackage/setup.hint b/test/testdata/relarea/x86/release/testpackage/setup.hint
deleted file mode 100644
index abfbfd5..0000000
--- a/test/testdata/relarea/x86/release/testpackage/setup.hint
+++ /dev/null
@@ -1,3 +0,0 @@
-sdesc: "A test package (stuff & other stuff)"
-ldesc: "A test package (stuff & other stuff)"
-category: Devel
diff --git a/test/testdata/relarea/x86/release/testpackage/testpackage-0.1-1.hint b/test/testdata/relarea/x86/release/testpackage/testpackage-0.1-1.hint
new file mode 100644
index 0000000..abfbfd5
--- /dev/null
+++ b/test/testdata/relarea/x86/release/testpackage/testpackage-0.1-1.hint
@@ -0,0 +1,3 @@
+sdesc: "A test package (stuff & other stuff)"
+ldesc: "A test package (stuff & other stuff)"
+category: Devel


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-05-28 18:05 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-28 18:05 [calm - Cygwin server-side packaging maintenance script] branch master, updated. 20181020-18-g2424e77 jturney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).