This is the mail archive of the cygwin-apps-cvs mailing list for the cygwin-apps project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[calm - Cygwin server-side packaging maintenance script] branch master, updated. 4b71e7852fd658e061595d0c6217081dd7f56b60




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

commit 4b71e7852fd658e061595d0c6217081dd7f56b60
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon May 2 18:20:10 2016 +0000

    Improvements to handling of empty install packages.
    
    Don't consider empty install packages as using any source they refer to, so
    source files which are only used by empty install packages are reported as
    effectively unused.
    
    Log rather than throwing an exception when writing setup.ini in the
    unexpected situation where an external-source is expected to exist, but
    doesn't.
    
    Add more reasonable test packages for keychain.
    
    Update tests appropriately.

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

commit aa09650907f559abcab099361577f8790817da2c
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Tue May 3 13:17:14 2016 +0000

    Report an error if a remove filename containing glob metacharacters is used
    
    Remove filenames containing glob metacharacters aren't supported, it's
    unclear that they ever actually worked correctly, and they are very hard to
    implement safely.  Report an erorr if an attempt is made to use them.
    
    Also report an error if the remove file isn't empty

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

commit 674c76746e69111ac51afc0d2d473d994ef8d820
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon May 2 18:24:34 2016 +0000

    Remove forgiveness for mistakes which no longer exist
    
    * _autorebase has a source package
    * terminfo no longer has a hyphen in it's version

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

commit c8a3d5728bbf2bdb0cad0d4e00be0df9d1935206
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Mon May 2 10:57:57 2016 +0000

    Fix a bug which caused remove-only uploads to be ignored.
    
    Even if the maintainer is just removing packages, we still have something to
    do.

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

commit b686397f69121181d9e87e927c833b72f5a9ef13
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Fri Apr 22 12:21:21 2016 +0100

    Remove pointless .gitignore

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

commit f0f7fa697859a54bb2d7ea2a567657fba913efa7
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Fri Apr 22 11:16:32 2016 +0100

    Move testdata/x86 to testdata/relarea/x86
    
    Also rename testdata/x86.hints to testdata/hints/x86

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

commit e99da1e9855e4398c31afb36cb501ef55c9c25b0
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date:   Fri Apr 22 11:00:54 2016 +0100

    Return a named tuple from uploads.scan()
    
    Rather than an unwieldy 6-tuple, return a named tuple from uploads.scan()


Diff:
---
 calm.py                                            |   28 ++++++++++----------
 package.py                                         |   24 ++++++++++------
 past_mistakes.py                                   |    3 --
 testdata/hints/x86/release/arc/expected            |    8 +++++
 testdata/hints/x86/release/base-cygwin/expected    |    5 +++
 .../x86/release/cygwin/cygwin-debuginfo/expected   |    8 +++++
 .../hints/x86/release/cygwin/cygwin-devel/expected |    8 +++++
 testdata/hints/x86/release/cygwin/expected         |    7 +++++
 testdata/hints/x86/release/invalid/expected        |    4 +++
 testdata/hints/x86/release/keychain/expected       |   12 ++++++++
 testdata/hints/x86/release/libspiro/expected       |    1 +
 .../x86/release/libspiro/libspiro-devel/expected   |    1 +
 .../hints/x86/release/libspiro/libspiro0/expected  |    1 +
 testdata/hints/x86/release/libtextcat/expected     |   11 ++++++++
 .../release/libtextcat/libtextcat-devel/expected   |   12 ++++++++
 .../x86/release/libtextcat/libtextcat0/expected    |   12 ++++++++
 testdata/hints/x86/release/mDNSResponder/expected  |   10 +++++++
 .../release/mDNSResponder/libdns_sd-devel/expected |    7 +++++
 .../x86/release/mDNSResponder/libdns_sd1/expected  |    7 +++++
 .../x86/release/mingw64-i686-binutils/expected     |    6 ++++
 .../mingw64-i686-binutils-debuginfo/expected       |    7 +++++
 testdata/hints/x86/release/naim/expected           |    6 ++++
 testdata/hints/x86/release/openssh/expected        |    5 +++
 testdata/hints/x86/release/proj/expected           |    5 +++
 .../hints/x86/release/proj/libproj-devel/expected  |    6 ++++
 testdata/hints/x86/release/proj/libproj1/expected  |    6 ++++
 .../hints/x86/release/proj/proj-debuginfo/expected |    5 +++
 testdata/hints/x86/release/rpm-doc/expected        |    2 +
 testdata/hints/x86/release/splint/expected         |   15 ++++++++++
 testdata/hints/x86/release/testpackage/expected    |    1 +
 .../htdocs.expected/x86/keychain/keychain-2.6.8-1  |   19 +++++++++++++
 .../x86/keychain/keychain-2.6.8-1-src              |    8 +++++
 .../htdocs.expected/x86/keychain/keychain-2.7.1-1  |   19 +++++++++++++
 .../x86/keychain/keychain-2.7.1-1-src              |   10 +++++++
 .../htdocs.expected/x86/keychain/keychain-3.1.5-1  |    5 ---
 .../x86/keychain/keychain-3.1.5-1-src              |    9 ------
 .../htdocs.expected/x86/keychain/keychain-3.2.0-1  |    5 ---
 .../x86/keychain/keychain-3.2.0-1-src              |    9 ------
 testdata/inifile/setup.ini.expected                |   20 +++++++-------
 testdata/process_arch/htdocs.expected              |    2 +-
 testdata/process_arch/rel_area.expected            |   10 +++---
 .../x86/release/arc/arc-4.32.7-10-src.tar.bz2      |  Bin 0 -> 14 bytes
 .../relarea/x86/release/arc/arc-4.32.7-10.tar.bz2  |  Bin 0 -> 14 bytes
 testdata/relarea/x86/release/arc/setup.hint        |    8 +++++
 .../release/base-cygwin/base-cygwin-3.6-1.tar.xz   |  Bin 0 -> 228 bytes
 .../release/base-cygwin/base-cygwin-3.8-1.tar.xz   |  Bin 0 -> 228 bytes
 .../relarea/x86/release/base-cygwin/setup.hint     |    4 +++
 .../x86/release/cygwin/cygwin-2.2.0-1-src.tar.xz   |  Bin 0 -> 228 bytes
 .../x86/release/cygwin/cygwin-2.2.0-1.tar.xz       |  Bin 0 -> 228 bytes
 .../x86/release/cygwin/cygwin-2.2.1-1-src.tar.xz   |  Bin 0 -> 228 bytes
 .../x86/release/cygwin/cygwin-2.2.1-1.tar.xz       |  Bin 0 -> 228 bytes
 .../x86/release/cygwin/cygwin-2.3.0-0.3-src.tar.xz |  Bin 0 -> 228 bytes
 .../x86/release/cygwin/cygwin-2.3.0-0.3.tar.xz     |  Bin 0 -> 228 bytes
 .../cygwin-debuginfo-2.2.0-1.tar.xz                |  Bin 0 -> 228 bytes
 .../cygwin-debuginfo-2.2.1-1.tar.xz                |  Bin 0 -> 228 bytes
 .../cygwin-debuginfo-2.3.0-0.3.tar.xz              |  Bin 0 -> 228 bytes
 .../x86/release/cygwin/cygwin-debuginfo/setup.hint |    9 ++++++
 .../cygwin-devel/cygwin-devel-2.2.0-1.tar.xz       |  Bin 0 -> 228 bytes
 .../cygwin-devel/cygwin-devel-2.2.1-1.tar.xz       |  Bin 0 -> 228 bytes
 .../cygwin-devel/cygwin-devel-2.3.0-0.3.tar.xz     |  Bin 0 -> 228 bytes
 .../x86/release/cygwin/cygwin-devel/setup.hint     |    8 +++++
 testdata/relarea/x86/release/cygwin/setup.hint     |    7 +++++
 testdata/relarea/x86/release/invalid/setup.hint    |    2 +
 .../release/keychain/keychain-2.6.8-1-src.tar.bz2  |  Bin 0 -> 36347 bytes
 .../x86/release/keychain/keychain-2.6.8-1.tar.bz2  |  Bin 0 -> 30476 bytes
 .../release/keychain/keychain-2.7.1-1-src.tar.bz2  |  Bin 0 -> 134875 bytes
 .../x86/release/keychain/keychain-2.7.1-1.tar.bz2  |  Bin 0 -> 32219 bytes
 testdata/relarea/x86/release/keychain/setup.hint   |   12 ++++++++
 .../x86/release/libspiro/libspiro-devel/setup.hint |   11 ++++++++
 .../x86/release/libspiro/libspiro0/setup.hint      |   11 ++++++++
 testdata/relarea/x86/release/libspiro/setup.hint   |    9 ++++++
 .../libtextcat/libtextcat-2.2-2-src.tar.bz2        |  Bin 0 -> 195 bytes
 .../release/libtextcat/libtextcat-2.2-2.tar.bz2    |  Bin 0 -> 195 bytes
 .../libtextcat-devel-2.2-2.tar.bz2                 |  Bin 0 -> 195 bytes
 .../release/libtextcat/libtextcat-devel/setup.hint |   11 ++++++++
 .../libtextcat0/libtextcat0-2.2-2.tar.bz2          |  Bin 0 -> 195 bytes
 .../x86/release/libtextcat/libtextcat0/setup.hint  |   11 ++++++++
 testdata/relarea/x86/release/libtextcat/setup.hint |   10 +++++++
 .../libdns_sd-devel-379.32.1-1.tar.bz2             |  Bin 0 -> 195 bytes
 .../mDNSResponder/libdns_sd-devel/setup.hint       |    7 +++++
 .../libdns_sd1/libdns_sd1-379.32.1-1.tar.bz2       |  Bin 0 -> 195 bytes
 .../release/mDNSResponder/libdns_sd1/setup.hint    |    7 +++++
 .../mDNSResponder-379.32.1-1-src.tar.bz2           |  Bin 0 -> 195 bytes
 .../mDNSResponder/mDNSResponder-379.32.1-1.tar.bz2 |  Bin 0 -> 195 bytes
 .../relarea/x86/release/mDNSResponder/setup.hint   |   11 ++++++++
 .../mingw64-i686-binutils-debuginfo/setup.hint     |    6 ++++
 .../x86/release/mingw64-i686-binutils/setup.hint   |    5 +++
 testdata/relarea/x86/release/naim/setup.hint       |    5 +++
 .../x86/release/openssh/openssh-7.2p2-1-src.tar.xz |  Bin 0 -> 228 bytes
 .../x86/release/openssh/openssh-7.2p2-1.tar.xz     |  Bin 0 -> 228 bytes
 testdata/relarea/x86/release/openssh/setup.hint    |    5 +++
 .../x86/release/proj/libproj-devel/setup.hint      |    5 +++
 .../relarea/x86/release/proj/libproj1/setup.hint   |    5 +++
 testdata/relarea/x86/release/proj/setup.hint       |    4 +++
 .../x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2  |  Bin 0 -> 42 bytes
 .../x86/release/rpm-doc/rpm-doc-4.1-2.tar.bz2      |  Bin 0 -> 50941 bytes
 .../x86/release/rpm-doc/rpm-doc-999-1.tar.bz2      |  Bin 0 -> 42 bytes
 testdata/relarea/x86/release/rpm-doc/setup.hint    |    2 +
 testdata/relarea/x86/release/splint/setup.hint     |   14 ++++++++++
 .../relarea/x86/release/testpackage/setup.hint     |    3 ++
 testdata/x86.hints/release/arc/expected            |    8 -----
 testdata/x86.hints/release/base-cygwin/expected    |    5 ---
 .../release/cygwin/cygwin-debuginfo/expected       |    8 -----
 .../x86.hints/release/cygwin/cygwin-devel/expected |    8 -----
 testdata/x86.hints/release/cygwin/expected         |    7 -----
 testdata/x86.hints/release/invalid/expected        |    4 ---
 testdata/x86.hints/release/keychain/expected       |   12 --------
 testdata/x86.hints/release/libspiro/expected       |    1 -
 .../release/libspiro/libspiro-devel/expected       |    1 -
 .../x86.hints/release/libspiro/libspiro0/expected  |    1 -
 testdata/x86.hints/release/libtextcat/expected     |   11 --------
 .../release/libtextcat/libtextcat-devel/expected   |   12 --------
 .../release/libtextcat/libtextcat0/expected        |   12 --------
 testdata/x86.hints/release/mDNSResponder/expected  |   10 -------
 .../release/mDNSResponder/libdns_sd-devel/expected |    7 -----
 .../release/mDNSResponder/libdns_sd1/expected      |    7 -----
 .../release/mingw64-i686-binutils/expected         |    6 ----
 .../mingw64-i686-binutils-debuginfo/expected       |    7 -----
 testdata/x86.hints/release/naim/expected           |    6 ----
 testdata/x86.hints/release/openssh/expected        |    5 ---
 testdata/x86.hints/release/proj/expected           |    5 ---
 .../x86.hints/release/proj/libproj-devel/expected  |    6 ----
 testdata/x86.hints/release/proj/libproj1/expected  |    6 ----
 .../x86.hints/release/proj/proj-debuginfo/expected |    5 ---
 testdata/x86.hints/release/rpm-doc/expected        |    2 -
 testdata/x86.hints/release/splint/expected         |   15 ----------
 testdata/x86.hints/release/testpackage/expected    |    1 -
 testdata/x86/release/.gitignore                    |    2 -
 testdata/x86/release/arc/arc-4.32.7-10-src.tar.bz2 |  Bin 14 -> 0 bytes
 testdata/x86/release/arc/arc-4.32.7-10.tar.bz2     |  Bin 14 -> 0 bytes
 testdata/x86/release/arc/setup.hint                |    8 -----
 .../release/base-cygwin/base-cygwin-3.6-1.tar.xz   |  Bin 228 -> 0 bytes
 .../release/base-cygwin/base-cygwin-3.8-1.tar.xz   |  Bin 228 -> 0 bytes
 testdata/x86/release/base-cygwin/setup.hint        |    4 ---
 .../x86/release/cygwin/cygwin-2.2.0-1-src.tar.xz   |  Bin 228 -> 0 bytes
 testdata/x86/release/cygwin/cygwin-2.2.0-1.tar.xz  |  Bin 228 -> 0 bytes
 .../x86/release/cygwin/cygwin-2.2.1-1-src.tar.xz   |  Bin 228 -> 0 bytes
 testdata/x86/release/cygwin/cygwin-2.2.1-1.tar.xz  |  Bin 228 -> 0 bytes
 .../x86/release/cygwin/cygwin-2.3.0-0.3-src.tar.xz |  Bin 228 -> 0 bytes
 .../x86/release/cygwin/cygwin-2.3.0-0.3.tar.xz     |  Bin 228 -> 0 bytes
 .../cygwin-debuginfo-2.2.0-1.tar.xz                |  Bin 228 -> 0 bytes
 .../cygwin-debuginfo-2.2.1-1.tar.xz                |  Bin 228 -> 0 bytes
 .../cygwin-debuginfo-2.3.0-0.3.tar.xz              |  Bin 228 -> 0 bytes
 .../x86/release/cygwin/cygwin-debuginfo/setup.hint |    9 ------
 .../cygwin-devel/cygwin-devel-2.2.0-1.tar.xz       |  Bin 228 -> 0 bytes
 .../cygwin-devel/cygwin-devel-2.2.1-1.tar.xz       |  Bin 228 -> 0 bytes
 .../cygwin-devel/cygwin-devel-2.3.0-0.3.tar.xz     |  Bin 228 -> 0 bytes
 .../x86/release/cygwin/cygwin-devel/setup.hint     |    8 -----
 testdata/x86/release/cygwin/setup.hint             |    7 -----
 testdata/x86/release/invalid/setup.hint            |    2 -
 .../release/keychain/keychain-3.1.5-1-src.tar.xz   |  Bin 1509512 -> 0 bytes
 .../x86/release/keychain/keychain-3.1.5-1.tar.xz   |  Bin 32 -> 0 bytes
 .../release/keychain/keychain-3.2.0-1-src.tar.xz   |  Bin 1418708 -> 0 bytes
 .../x86/release/keychain/keychain-3.2.0-1.tar.xz   |  Bin 32 -> 0 bytes
 testdata/x86/release/keychain/setup.hint           |   12 --------
 .../x86/release/libspiro/libspiro-devel/setup.hint |   11 --------
 testdata/x86/release/libspiro/libspiro0/setup.hint |   11 --------
 testdata/x86/release/libspiro/setup.hint           |    9 ------
 .../libtextcat/libtextcat-2.2-2-src.tar.bz2        |  Bin 195 -> 0 bytes
 .../release/libtextcat/libtextcat-2.2-2.tar.bz2    |  Bin 195 -> 0 bytes
 .../libtextcat-devel-2.2-2.tar.bz2                 |  Bin 195 -> 0 bytes
 .../release/libtextcat/libtextcat-devel/setup.hint |   11 --------
 .../libtextcat0/libtextcat0-2.2-2.tar.bz2          |  Bin 195 -> 0 bytes
 .../x86/release/libtextcat/libtextcat0/setup.hint  |   11 --------
 testdata/x86/release/libtextcat/setup.hint         |   10 -------
 .../libdns_sd-devel-379.32.1-1.tar.bz2             |  Bin 195 -> 0 bytes
 .../mDNSResponder/libdns_sd-devel/setup.hint       |    7 -----
 .../libdns_sd1/libdns_sd1-379.32.1-1.tar.bz2       |  Bin 195 -> 0 bytes
 .../release/mDNSResponder/libdns_sd1/setup.hint    |    7 -----
 .../mDNSResponder-379.32.1-1-src.tar.bz2           |  Bin 195 -> 0 bytes
 .../mDNSResponder/mDNSResponder-379.32.1-1.tar.bz2 |  Bin 195 -> 0 bytes
 testdata/x86/release/mDNSResponder/setup.hint      |   11 --------
 .../mingw64-i686-binutils-debuginfo/setup.hint     |    6 ----
 .../x86/release/mingw64-i686-binutils/setup.hint   |    5 ---
 testdata/x86/release/naim/setup.hint               |    5 ---
 .../x86/release/openssh/openssh-7.2p2-1-src.tar.xz |  Bin 228 -> 0 bytes
 .../x86/release/openssh/openssh-7.2p2-1.tar.xz     |  Bin 228 -> 0 bytes
 testdata/x86/release/openssh/setup.hint            |    5 ---
 testdata/x86/release/proj/libproj-devel/setup.hint |    5 ---
 testdata/x86/release/proj/libproj1/setup.hint      |    5 ---
 testdata/x86/release/proj/setup.hint               |    4 ---
 .../x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2  |  Bin 42 -> 0 bytes
 testdata/x86/release/rpm-doc/rpm-doc-4.1-2.tar.bz2 |  Bin 50941 -> 0 bytes
 testdata/x86/release/rpm-doc/rpm-doc-999-1.tar.bz2 |  Bin 42 -> 0 bytes
 testdata/x86/release/rpm-doc/setup.hint            |    2 -
 testdata/x86/release/splint/setup.hint             |   14 ----------
 testdata/x86/release/testpackage/setup.hint        |    3 --
 tests.py                                           |   28 ++++++++++----------
 uploads.py                                         |   18 ++++++++++---
 189 files changed, 499 insertions(+), 460 deletions(-)

diff --git a/calm.py b/calm.py
index 38e8cec..ae48916 100755
--- a/calm.py
+++ b/calm.py
@@ -98,43 +98,43 @@ def process_arch(args):
             # also send a mail to each maintainer about their packages
             with mail_logs(args.email, toaddrs=m.email, subject='%s for %s [%s]' % (subject, name, details), thresholdLevel=logging.INFO) as maint_email:
 
-                (error, mpackages, to_relarea, to_vault, remove_always, remove_success) = uploads.scan(m, all_packages, args)
+                scan_result = uploads.scan(m, all_packages, args)
 
-                uploads.remove(args, remove_always)
+                uploads.remove(args, scan_result.remove_always)
 
-                if error:
+                if scan_result.error:
                     logging.error("error while reading uploaded packages for %s" % (name))
                     continue
 
-                # if there are no uploaded packages for this maintainer, we
-                # don't have anything to do
-                if not mpackages:
+                # if there are no uploaded or removed packages for this
+                # maintainer, we don't have anything to do
+                if not scan_result.packages and not scan_result.to_vault:
                     logging.debug("nothing to do for maintainer %s" % (name))
                     continue
 
                 # queue for source package validator
-                queue.add(args, to_relarea, os.path.join(m.homedir(), args.arch))
+                queue.add(args, scan_result.to_relarea, os.path.join(m.homedir(), args.arch))
 
                 # merge package set
-                merged_packages = package.merge(packages, mpackages)
+                merged_packages = package.merge(packages, scan_result.packages)
 
                 # remove file which are to be removed
                 #
                 # XXX: this doesn't properly account for removing setup.hint
                 # files
-                for p in to_vault:
-                    for f in to_vault[p]:
+                for p in scan_result.to_vault:
+                    for f in scan_result.to_vault[p]:
                         package.delete(merged_packages, p, f)
 
                 # validate the package set
                 if package.validate_packages(args, merged_packages):
                     # process the move list
-                    uploads.move_to_vault(args, to_vault)
-                    uploads.remove(args, remove_success)
-                    uploads.move_to_relarea(m, args, to_relarea)
+                    uploads.move_to_vault(args, scan_result.to_vault)
+                    uploads.remove(args, scan_result.remove_success)
+                    uploads.move_to_relarea(m, args, scan_result.to_relarea)
                     # use merged package list
                     packages = merged_packages
-                    logging.debug("added %d packages from maintainer %s" % (len(mpackages), name))
+                    logging.debug("added %d packages from maintainer %s" % (len(scan_result.packages), name))
                 else:
                     # otherwise we discard move list and merged_packages
                     logging.error("error while merging uploaded packages for %s" % (name))
diff --git a/package.py b/package.py
index e04c06b..0c5fbeb 100755
--- a/package.py
+++ b/package.py
@@ -421,6 +421,10 @@ def validate_packages(args, packages):
             if 'install' not in packages[p].vermap[v]:
                 continue
 
+            # unless the install tarfile is empty
+            if packages[p].tars[packages[p].vermap[v]['install']].is_empty:
+                continue
+
             # source tarfile may be either in this package or in the
             # external-source package
             #
@@ -436,10 +440,6 @@ def validate_packages(args, packages):
                         packages[es_p].tars[packages[es_p].vermap[v]['source']].is_used = True
                         continue
 
-            # unless the install tarfile is empty
-            if packages[p].tars[packages[p].vermap[v]['install']].is_empty:
-                continue
-
             # unless this package is marked as 'self-source'
             if 'self-source' in packages[p].hints:
                 continue
@@ -447,15 +447,18 @@ def validate_packages(args, packages):
             logging.error("package '%s' version '%s' is missing source" % (p, v))
             error = True
 
-    # make another pass to verify that each source tarfile version has at least
-    # one corresponding install tarfile, in some package.
+    # make another pass to verify that each non-empty source tarfile version has
+    # at least one corresponding non-empty install tarfile, in some package.
     for p in sorted(packages.keys()):
         for v in sorted(packages[p].vermap.keys(), key=lambda v: SetupVersion(v), reverse=True):
             if 'source' not in packages[p].vermap[v]:
                 continue
 
+            if packages[p].tars[packages[p].vermap[v]['source']].is_empty:
+                continue
+
             if not packages[p].tars[packages[p].vermap[v]['source']].is_used:
-                logging.error("package '%s' version '%s' source has no install tarfile" % (p, v))
+                logging.error("package '%s' version '%s' source has no non-empty install tarfiles" % (p, v))
                 error = True
 
     # validate that all packages are in the package maintainers list
@@ -556,8 +559,11 @@ def write_setup_ini(args, packages):
                     # if that doesn't exist, follow external-source
                     elif 'external-source' in packages[p].hints:
                         s = packages[p].hints['external-source']
-                        t = packages[s].vermap[version]['source']
-                        tar_line('source', args.arch, packages[s], t, f)
+                        if 'source' in packages[s].vermap[version]:
+                            t = packages[s].vermap[version]['source']
+                            tar_line('source', args.arch, packages[s], t, f)
+                        else:
+                            logging.warning("package '%s' version '%s' has no source in external-source '%s'" % (p, version, s))
 
             if 'message' in packages[p].hints:
                 print("message: %s" % packages[p].hints['message'], file=f)
diff --git a/past_mistakes.py b/past_mistakes.py
index 5dff660..d8280d1 100644
--- a/past_mistakes.py
+++ b/past_mistakes.py
@@ -68,8 +68,6 @@ hyphen_in_version = [
     'socat-debuginfo',
     'tack',
     'tack-debuginfo',
-    'terminfo',
-    'terminfo-extra',
     'xemacs-mule-sumo',
     'xemacs-sumo',
     'xfs',
@@ -87,7 +85,6 @@ self_requires = [
 # function as their own source
 self_source = [
     'R_autorebase',
-    '_autorebase',  # older versions were self-source, but current one isn't
     '_update-info-dir',
     'base-cygwin',
     'base-files',  # older versions were self-source, but current one isn't
diff --git a/testdata/hints/x86/release/arc/expected b/testdata/hints/x86/release/arc/expected
new file mode 100644
index 0000000..d0cd27b
--- /dev/null
+++ b/testdata/hints/x86/release/arc/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/testdata/hints/x86/release/base-cygwin/expected b/testdata/hints/x86/release/base-cygwin/expected
new file mode 100644
index 0000000..7505632
--- /dev/null
+++ b/testdata/hints/x86/release/base-cygwin/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/testdata/hints/x86/release/cygwin/cygwin-debuginfo/expected b/testdata/hints/x86/release/cygwin/cygwin-debuginfo/expected
new file mode 100644
index 0000000..7359321
--- /dev/null
+++ b/testdata/hints/x86/release/cygwin/cygwin-debuginfo/expected
@@ -0,0 +1,8 @@
+{'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/testdata/hints/x86/release/cygwin/cygwin-devel/expected b/testdata/hints/x86/release/cygwin/cygwin-devel/expected
new file mode 100644
index 0000000..19c0b1e
--- /dev/null
+++ b/testdata/hints/x86/release/cygwin/cygwin-devel/expected
@@ -0,0 +1,8 @@
+{'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/testdata/hints/x86/release/cygwin/expected b/testdata/hints/x86/release/cygwin/expected
new file mode 100644
index 0000000..e2f3476
--- /dev/null
+++ b/testdata/hints/x86/release/cygwin/expected
@@ -0,0 +1,7 @@
+{'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/testdata/hints/x86/release/invalid/expected b/testdata/hints/x86/release/invalid/expected
new file mode 100644
index 0000000..95681a8
--- /dev/null
+++ b/testdata/hints/x86/release/invalid/expected
@@ -0,0 +1,4 @@
+{'parse-errors': ['unknown setup key unknown-key at line 0',
+                  "unknown setup construct 'invalid-construct' at line 1",
+                  "required key 'category' missing",
+                  "required key 'sdesc' missing"]}
diff --git a/testdata/hints/x86/release/keychain/expected b/testdata/hints/x86/release/keychain/expected
new file mode 100644
index 0000000..4113a2d
--- /dev/null
+++ b/testdata/hints/x86/release/keychain/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/testdata/hints/x86/release/libspiro/expected b/testdata/hints/x86/release/libspiro/expected
new file mode 100644
index 0000000..b16efe0
--- /dev/null
+++ b/testdata/hints/x86/release/libspiro/expected
@@ -0,0 +1 @@
+OrderedDict([('parse-errors', ['invalid UTF-8'])])
diff --git a/testdata/hints/x86/release/libspiro/libspiro-devel/expected b/testdata/hints/x86/release/libspiro/libspiro-devel/expected
new file mode 100644
index 0000000..b16efe0
--- /dev/null
+++ b/testdata/hints/x86/release/libspiro/libspiro-devel/expected
@@ -0,0 +1 @@
+OrderedDict([('parse-errors', ['invalid UTF-8'])])
diff --git a/testdata/hints/x86/release/libspiro/libspiro0/expected b/testdata/hints/x86/release/libspiro/libspiro0/expected
new file mode 100644
index 0000000..b16efe0
--- /dev/null
+++ b/testdata/hints/x86/release/libspiro/libspiro0/expected
@@ -0,0 +1 @@
+OrderedDict([('parse-errors', ['invalid UTF-8'])])
diff --git a/testdata/hints/x86/release/libtextcat/expected b/testdata/hints/x86/release/libtextcat/expected
new file mode 100644
index 0000000..498e7e5
--- /dev/null
+++ b/testdata/hints/x86/release/libtextcat/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/testdata/hints/x86/release/libtextcat/libtextcat-devel/expected b/testdata/hints/x86/release/libtextcat/libtextcat-devel/expected
new file mode 100644
index 0000000..aca0db6
--- /dev/null
+++ b/testdata/hints/x86/release/libtextcat/libtextcat-devel/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/testdata/hints/x86/release/libtextcat/libtextcat0/expected b/testdata/hints/x86/release/libtextcat/libtextcat0/expected
new file mode 100644
index 0000000..7f186d6
--- /dev/null
+++ b/testdata/hints/x86/release/libtextcat/libtextcat0/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/testdata/hints/x86/release/mDNSResponder/expected b/testdata/hints/x86/release/mDNSResponder/expected
new file mode 100644
index 0000000..f02a324
--- /dev/null
+++ b/testdata/hints/x86/release/mDNSResponder/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/testdata/hints/x86/release/mDNSResponder/libdns_sd-devel/expected b/testdata/hints/x86/release/mDNSResponder/libdns_sd-devel/expected
new file mode 100644
index 0000000..8e93797
--- /dev/null
+++ b/testdata/hints/x86/release/mDNSResponder/libdns_sd-devel/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/testdata/hints/x86/release/mDNSResponder/libdns_sd1/expected b/testdata/hints/x86/release/mDNSResponder/libdns_sd1/expected
new file mode 100644
index 0000000..45d0032
--- /dev/null
+++ b/testdata/hints/x86/release/mDNSResponder/libdns_sd1/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/testdata/hints/x86/release/mingw64-i686-binutils/expected b/testdata/hints/x86/release/mingw64-i686-binutils/expected
new file mode 100644
index 0000000..114e53c
--- /dev/null
+++ b/testdata/hints/x86/release/mingw64-i686-binutils/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/testdata/hints/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/expected b/testdata/hints/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/expected
new file mode 100644
index 0000000..c936ff6
--- /dev/null
+++ b/testdata/hints/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/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/testdata/hints/x86/release/naim/expected b/testdata/hints/x86/release/naim/expected
new file mode 100644
index 0000000..9f7710c
--- /dev/null
+++ b/testdata/hints/x86/release/naim/expected
@@ -0,0 +1,6 @@
+{'category': 'Net',
+ 'requires': '',
+ 'sdesc': '"Console AIM, ICQ, IRC, and Lily client"',
+ 'ldesc': '" naim is a console client for AOL Instant Messenger (AIM),\n'
+          'AOL I Seek You (ICQ), Internet Relay Chat (IRC), and The lily CMC."',
+ 'parse-warnings': ['value for key ldesc starts with quoted whitespace']}
diff --git a/testdata/hints/x86/release/openssh/expected b/testdata/hints/x86/release/openssh/expected
new file mode 100644
index 0000000..8eeefad
--- /dev/null
+++ b/testdata/hints/x86/release/openssh/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/testdata/hints/x86/release/proj/expected b/testdata/hints/x86/release/proj/expected
new file mode 100644
index 0000000..40db455
--- /dev/null
+++ b/testdata/hints/x86/release/proj/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/testdata/hints/x86/release/proj/libproj-devel/expected b/testdata/hints/x86/release/proj/libproj-devel/expected
new file mode 100644
index 0000000..620f019
--- /dev/null
+++ b/testdata/hints/x86/release/proj/libproj-devel/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/testdata/hints/x86/release/proj/libproj1/expected b/testdata/hints/x86/release/proj/libproj1/expected
new file mode 100644
index 0000000..cc05b73
--- /dev/null
+++ b/testdata/hints/x86/release/proj/libproj1/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/testdata/hints/x86/release/proj/proj-debuginfo/expected b/testdata/hints/x86/release/proj/proj-debuginfo/expected
new file mode 100644
index 0000000..6af3a7b
--- /dev/null
+++ b/testdata/hints/x86/release/proj/proj-debuginfo/expected
@@ -0,0 +1,5 @@
+{'category': 'Debug',
+ 'requires': 'cygwin-debuginfo',
+ 'external-source': 'proj',
+ 'sdesc': '"Debug info for proj"',
+ 'ldesc': '"This package contains files necessary for debugging the\nproj package with gdb."'}
diff --git a/testdata/hints/x86/release/rpm-doc/expected b/testdata/hints/x86/release/rpm-doc/expected
new file mode 100644
index 0000000..db48c82
--- /dev/null
+++ b/testdata/hints/x86/release/rpm-doc/expected
@@ -0,0 +1,2 @@
+{'sdesc': '"Obsolete package for RPM package management system manual pages"',
+ 'category': '_obsolete'}
diff --git a/testdata/hints/x86/release/splint/expected b/testdata/hints/x86/release/splint/expected
new file mode 100644
index 0000000..5667e4b
--- /dev/null
+++ b/testdata/hints/x86/release/splint/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/testdata/hints/x86/release/testpackage/expected b/testdata/hints/x86/release/testpackage/expected
new file mode 100644
index 0000000..de11656
--- /dev/null
+++ b/testdata/hints/x86/release/testpackage/expected
@@ -0,0 +1 @@
+OrderedDict([('sdesc', '"A test package"'), ('ldesc', '"A test package"'), ('category', 'Devel')])
diff --git a/testdata/htdocs.expected/x86/keychain/keychain-2.6.8-1 b/testdata/htdocs.expected/x86/keychain/keychain-2.6.8-1
new file mode 100644
index 0000000..543226a
--- /dev/null
+++ b/testdata/htdocs.expected/x86/keychain/keychain-2.6.8-1
@@ -0,0 +1,19 @@
+<html>
+<h1>keychain: Key manager for OpenSSH (installed binaries and support files)</h1>
+<tt><pre>
+    2006-11-09 04:58           0 usr/
+    2006-11-09 04:58           0 usr/bin/
+    2006-11-09 04:58       53740 usr/bin/keychain
+    2006-11-09 04:58           0 usr/share/
+    2006-11-09 04:58           0 usr/share/doc/
+    2006-11-09 04:58           0 usr/share/doc/Cygwin/
+    2006-11-09 04:58        1534 usr/share/doc/Cygwin/keychain-2.6.8.README
+    2006-11-09 04:58           0 usr/share/doc/keychain-2.6.8/
+    2006-11-09 04:58       19017 usr/share/doc/keychain-2.6.8/ChangeLog
+    2006-11-09 04:58       18009 usr/share/doc/keychain-2.6.8/COPYING
+    2006-11-09 04:58         787 usr/share/doc/keychain-2.6.8/README
+    2006-11-09 04:58           0 usr/share/man/
+    2006-11-09 04:58           0 usr/share/man/man1/
+    2006-11-09 04:58       13240 usr/share/man/man1/keychain.1
+</pre></tt>
+</html>
diff --git a/testdata/htdocs.expected/x86/keychain/keychain-2.6.8-1-src b/testdata/htdocs.expected/x86/keychain/keychain-2.6.8-1-src
new file mode 100644
index 0000000..0b4f281
--- /dev/null
+++ b/testdata/htdocs.expected/x86/keychain/keychain-2.6.8-1-src
@@ -0,0 +1,8 @@
+<html>
+<h1>keychain: Key manager for OpenSSH (source code)</h1>
+<tt><pre>
+    2006-11-09 04:59        3051 keychain-2.6.8-1.patch
+    2006-11-09 04:59        5621 keychain-2.6.8-1.sh
+    2006-11-09 04:59       31531 keychain-2.6.8.tar.bz2
+</pre></tt>
+</html>
diff --git a/testdata/htdocs.expected/x86/keychain/keychain-2.7.1-1 b/testdata/htdocs.expected/x86/keychain/keychain-2.7.1-1
new file mode 100644
index 0000000..c6bfe4f
--- /dev/null
+++ b/testdata/htdocs.expected/x86/keychain/keychain-2.7.1-1
@@ -0,0 +1,19 @@
+<html>
+<h1>keychain: Key manager for OpenSSH (installed binaries and support files)</h1>
+<tt><pre>
+    2012-10-10 05:40           0 usr/
+    2012-10-10 05:40           0 usr/bin/
+    2012-10-10 05:40       50490 usr/bin/keychain
+    2012-10-10 05:40           0 usr/share/
+    2012-10-10 05:40           0 usr/share/doc/
+    2012-10-10 05:40           0 usr/share/doc/Cygwin/
+    2012-10-10 05:40        2120 usr/share/doc/Cygwin/keychain-2.7.1.README
+    2012-10-10 05:40           0 usr/share/doc/keychain/
+    2012-10-10 05:40       17921 usr/share/doc/keychain/COPYING.txt
+    2012-10-10 05:40        8980 usr/share/doc/keychain/keychain.txt
+    2012-10-10 05:40       14144 usr/share/doc/keychain/README.rst
+    2012-10-10 05:40           0 usr/share/man/
+    2012-10-10 05:40           0 usr/share/man/man1/
+    2012-10-10 05:40        5326 usr/share/man/man1/keychain.1.gz
+</pre></tt>
+</html>
diff --git a/testdata/htdocs.expected/x86/keychain/keychain-2.7.1-1-src b/testdata/htdocs.expected/x86/keychain/keychain-2.7.1-1-src
new file mode 100644
index 0000000..ce348ee
--- /dev/null
+++ b/testdata/htdocs.expected/x86/keychain/keychain-2.7.1-1-src
@@ -0,0 +1,10 @@
+<html>
+<h1>keychain: Key manager for OpenSSH (source code)</h1>
+<tt><pre>
+    2012-10-10 05:40       24455 keychain-2.7.1-1-cygwin.patch
+    2012-10-10 05:40         270 keychain-2.7.1-1-cygwin.patch.sig
+    2012-10-10 05:40      320093 keychain-2.7.1-1.sh
+    2012-10-10 05:40         260 keychain-2.7.1-1.sh.sig
+    2012-10-10 05:40       65211 keychain_2.7.1.orig.tar.gz
+</pre></tt>
+</html>
diff --git a/testdata/htdocs.expected/x86/keychain/keychain-3.1.5-1 b/testdata/htdocs.expected/x86/keychain/keychain-3.1.5-1
deleted file mode 100644
index 574236e..0000000
--- a/testdata/htdocs.expected/x86/keychain/keychain-3.1.5-1
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-<h1>keychain: Key manager for OpenSSH (installed binaries and support files)</h1>
-<tt><pre>
-</pre></tt>
-</html>
diff --git a/testdata/htdocs.expected/x86/keychain/keychain-3.1.5-1-src b/testdata/htdocs.expected/x86/keychain/keychain-3.1.5-1-src
deleted file mode 100644
index ef34643..0000000
--- a/testdata/htdocs.expected/x86/keychain/keychain-3.1.5-1-src
+++ /dev/null
@@ -1,9 +0,0 @@
-<html>
-<h1>keychain: Key manager for OpenSSH (source code)</h1>
-<tt><pre>
-    2014-08-17 10:50           0 arpack-3.1.5-1.src/
-    2014-08-17 10:50        1333 arpack-3.1.5-1.src/arpack-3.1.5-1.src.patch
-    2014-08-17 10:50     1516406 arpack-3.1.5-1.src/arpack-ng-3.1.5.tar.gz
-    2014-08-17 10:50        1334 arpack-3.1.5-1.src/arpack.cygport
-</pre></tt>
-</html>
diff --git a/testdata/htdocs.expected/x86/keychain/keychain-3.2.0-1 b/testdata/htdocs.expected/x86/keychain/keychain-3.2.0-1
deleted file mode 100644
index 574236e..0000000
--- a/testdata/htdocs.expected/x86/keychain/keychain-3.2.0-1
+++ /dev/null
@@ -1,5 +0,0 @@
-<html>
-<h1>keychain: Key manager for OpenSSH (installed binaries and support files)</h1>
-<tt><pre>
-</pre></tt>
-</html>
diff --git a/testdata/htdocs.expected/x86/keychain/keychain-3.2.0-1-src b/testdata/htdocs.expected/x86/keychain/keychain-3.2.0-1-src
deleted file mode 100644
index 6ff955f..0000000
--- a/testdata/htdocs.expected/x86/keychain/keychain-3.2.0-1-src
+++ /dev/null
@@ -1,9 +0,0 @@
-<html>
-<h1>keychain: Key manager for OpenSSH (source code)</h1>
-<tt><pre>
-    2015-03-07 13:15           0 arpack-3.2.0-1.src/
-    2015-03-07 13:15        1333 arpack-3.2.0-1.src/arpack-3.2.0-1.src.patch
-    2015-03-07 13:15     1424242 arpack-3.2.0-1.src/arpack-ng-3.2.0.tar.gz
-    2015-03-07 13:15        1334 arpack-3.2.0-1.src/arpack.cygport
-</pre></tt>
-</html>
diff --git a/testdata/inifile/setup.ini.expected b/testdata/inifile/setup.ini.expected
index a69302f..6c09d84 100644
--- a/testdata/inifile/setup.ini.expected
+++ b/testdata/inifile/setup.ini.expected
@@ -116,17 +116,17 @@
  'necessary"\n'
  'category: Utils\n'
  'requires: openssh\n'
- 'version: 3.2.0-1\n'
- 'install: x86/release/keychain/keychain-3.2.0-1.tar.xz 32 '
- '034b32f1138322638c7a5b7949a3b184c6a4cdfd003360a496c08c56c2cc645c94fbe9cdf9d84c963af6dda6c442717cd61d7e1cecf7024bd463f6f5196c5527\n'
- 'source: x86/release/keychain/keychain-3.2.0-1-src.tar.xz 1418708 '
- 'ab811e9636bfc10c21d003818a3e6e614d98ae578a238feb18df9ba25f8fdb18ab1782bfdd09be636617893c62957dd968434004e9ac119d1ec28e8a084f22d9\n'
+ 'version: 2.7.1-1\n'
+ 'install: x86/release/keychain/keychain-2.7.1-1.tar.bz2 32219 '
+ '0c7b7ad2636b6e23e40e8cb593196b3fabe9c44f7618ea9b2021b89ecdc08720a7f824be0beaa75c9e62dda9a7b5ed7e9c1ed147a1875c582e80866ad09533a2\n'
+ 'source: x86/release/keychain/keychain-2.7.1-1-src.tar.bz2 134875 '
+ 'cef733c5f1ba7380088ce4b12be0a70c3d657fd0e26beae11cf96bbbc2a02c492dafef700adac1059ee643208d76b5f19042e01d9628b2463b916b3dea13aa54\n'
  '[prev]\n'
- 'version: 3.1.5-1\n'
- 'install: x86/release/keychain/keychain-3.1.5-1.tar.xz 32 '
- '034b32f1138322638c7a5b7949a3b184c6a4cdfd003360a496c08c56c2cc645c94fbe9cdf9d84c963af6dda6c442717cd61d7e1cecf7024bd463f6f5196c5527\n'
- 'source: x86/release/keychain/keychain-3.1.5-1-src.tar.xz 1509512 '
- 'b413bd3a28c25266889f089c7cca560d969f8e099c4322d1408945a865b3538f899d9d80a276f92a2357b1553c59a3526a15434d3b2854ff33486ba85c6b024e\n'
+ 'version: 2.6.8-1\n'
+ 'install: x86/release/keychain/keychain-2.6.8-1.tar.bz2 30476 '
+ '05af40c0fabbd2ea8f8b74719434371a47c7751986fe6411c17e18cda7d03947c5785ed164dfe59b7238831cc10d8e29f4f88bf3414420bd3231423f424c00bd\n'
+ 'source: x86/release/keychain/keychain-2.6.8-1-src.tar.bz2 36347 '
+ '2151b73a9ec2ece63a842ddad6de19bcfdf097b86d4cae932eeadfc64640997051254001f31081e80272e020887b9599188990368c833ba10886f0ba32a3415e\n'
  '\n'
  '@ libdns_sd-devel\n'
  'sdesc: "Bonjour Zeroconf implementation"\n'
diff --git a/testdata/process_arch/htdocs.expected b/testdata/process_arch/htdocs.expected
index 174081f..6554900 100644
--- a/testdata/process_arch/htdocs.expected
+++ b/testdata/process_arch/htdocs.expected
@@ -14,7 +14,7 @@
                           'cygwin-debuginfo-2.2.1-1',
                           'cygwin-debuginfo-2.3.0-0.3'],
  'x86/cygwin-devel': ['.htaccess', 'cygwin-devel-2.2.0-1', 'cygwin-devel-2.2.1-1', 'cygwin-devel-2.3.0-0.3'],
- 'x86/keychain': ['.htaccess', 'keychain-3.1.5-1', 'keychain-3.1.5-1-src', 'keychain-3.2.0-1', 'keychain-3.2.0-1-src'],
+ 'x86/keychain': ['.htaccess', 'keychain-2.6.8-1', 'keychain-2.6.8-1-src', 'keychain-2.7.1-1', 'keychain-2.7.1-1-src'],
  'x86/libdns_sd-devel': ['.htaccess', 'libdns_sd-devel-379.32.1-1'],
  'x86/libdns_sd1': ['.htaccess', 'libdns_sd1-379.32.1-1'],
  'x86/mDNSResponder': ['.htaccess', 'mDNSResponder-379.32.1-1', 'mDNSResponder-379.32.1-1-src'],
diff --git a/testdata/process_arch/rel_area.expected b/testdata/process_arch/rel_area.expected
index a0f8d1d..f081c02 100644
--- a/testdata/process_arch/rel_area.expected
+++ b/testdata/process_arch/rel_area.expected
@@ -1,6 +1,6 @@
 {'.': ['setup.ini'],
  'x86': ['sha512.sum'],
- 'x86/release': ['.gitignore', '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', 'sha512.sum'],
  'x86/release/base-cygwin': ['base-cygwin-3.6-1.tar.xz', 'base-cygwin-3.8-1.tar.xz', 'setup.hint', 'sha512.sum'],
  'x86/release/cygwin': ['.this-should-be-ignored',
@@ -23,10 +23,10 @@
                                      'setup.hint',
                                      'sha512.sum'],
  'x86/release/invalid': ['setup.hint', 'sha512.sum'],
- 'x86/release/keychain': ['keychain-3.1.5-1-src.tar.xz',
-                          'keychain-3.1.5-1.tar.xz',
-                          'keychain-3.2.0-1-src.tar.xz',
-                          'keychain-3.2.0-1.tar.xz',
+ 'x86/release/keychain': ['keychain-2.6.8-1-src.tar.bz2',
+                          'keychain-2.6.8-1.tar.bz2',
+                          'keychain-2.7.1-1-src.tar.bz2',
+                          'keychain-2.7.1-1.tar.bz2',
                           'setup.hint',
                           'sha512.sum'],
  'x86/release/libspiro': ['setup.hint', 'sha512.sum'],
diff --git a/testdata/relarea/x86/release/arc/arc-4.32.7-10-src.tar.bz2 b/testdata/relarea/x86/release/arc/arc-4.32.7-10-src.tar.bz2
new file mode 100644
index 0000000..b56f3b9
Binary files /dev/null and b/testdata/relarea/x86/release/arc/arc-4.32.7-10-src.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/arc/arc-4.32.7-10.tar.bz2 b/testdata/relarea/x86/release/arc/arc-4.32.7-10.tar.bz2
new file mode 100644
index 0000000..b56f3b9
Binary files /dev/null and b/testdata/relarea/x86/release/arc/arc-4.32.7-10.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/arc/setup.hint b/testdata/relarea/x86/release/arc/setup.hint
new file mode 100644
index 0000000..718cb55
--- /dev/null
+++ b/testdata/relarea/x86/release/arc/setup.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/testdata/relarea/x86/release/base-cygwin/base-cygwin-3.6-1.tar.xz b/testdata/relarea/x86/release/base-cygwin/base-cygwin-3.6-1.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/base-cygwin/base-cygwin-3.6-1.tar.xz differ
diff --git a/testdata/relarea/x86/release/base-cygwin/base-cygwin-3.8-1.tar.xz b/testdata/relarea/x86/release/base-cygwin/base-cygwin-3.8-1.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/base-cygwin/base-cygwin-3.8-1.tar.xz differ
diff --git a/testdata/relarea/x86/release/base-cygwin/setup.hint b/testdata/relarea/x86/release/base-cygwin/setup.hint
new file mode 100644
index 0000000..f6f64b2
--- /dev/null
+++ b/testdata/relarea/x86/release/base-cygwin/setup.hint
@@ -0,0 +1,4 @@
+sdesc: "Initial base installation helper script."
+ldesc: "Initial base installation helper script."
+category: Base
+requires: 
diff --git a/testdata/relarea/x86/release/cygwin/.this-should-be-ignored b/testdata/relarea/x86/release/cygwin/.this-should-be-ignored
new file mode 100644
index 0000000..e69de29
diff --git a/testdata/relarea/x86/release/cygwin/cygwin-2.2.0-1-src.tar.xz b/testdata/relarea/x86/release/cygwin/cygwin-2.2.0-1-src.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/cygwin/cygwin-2.2.0-1-src.tar.xz differ
diff --git a/testdata/relarea/x86/release/cygwin/cygwin-2.2.0-1.tar.xz b/testdata/relarea/x86/release/cygwin/cygwin-2.2.0-1.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/cygwin/cygwin-2.2.0-1.tar.xz differ
diff --git a/testdata/relarea/x86/release/cygwin/cygwin-2.2.1-1-src.tar.xz b/testdata/relarea/x86/release/cygwin/cygwin-2.2.1-1-src.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/cygwin/cygwin-2.2.1-1-src.tar.xz differ
diff --git a/testdata/relarea/x86/release/cygwin/cygwin-2.2.1-1.tar.xz b/testdata/relarea/x86/release/cygwin/cygwin-2.2.1-1.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/cygwin/cygwin-2.2.1-1.tar.xz differ
diff --git a/testdata/relarea/x86/release/cygwin/cygwin-2.3.0-0.3-src.tar.xz b/testdata/relarea/x86/release/cygwin/cygwin-2.3.0-0.3-src.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/cygwin/cygwin-2.3.0-0.3-src.tar.xz differ
diff --git a/testdata/relarea/x86/release/cygwin/cygwin-2.3.0-0.3.tar.xz b/testdata/relarea/x86/release/cygwin/cygwin-2.3.0-0.3.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/cygwin/cygwin-2.3.0-0.3.tar.xz differ
diff --git a/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1.tar.xz b/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1.tar.xz differ
diff --git a/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1.tar.xz b/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1.tar.xz differ
diff --git a/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3.tar.xz b/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3.tar.xz differ
diff --git a/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/setup.hint b/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/setup.hint
new file mode 100644
index 0000000..5ed452c
--- /dev/null
+++ b/testdata/relarea/x86/release/cygwin/cygwin-debuginfo/setup.hint
@@ -0,0 +1,9 @@
+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/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.0-1.tar.xz b/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.0-1.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.0-1.tar.xz differ
diff --git a/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.1-1.tar.xz b/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.1-1.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.1-1.tar.xz differ
diff --git a/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.3.0-0.3.tar.xz b/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.3.0-0.3.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/cygwin/cygwin-devel/cygwin-devel-2.3.0-0.3.tar.xz differ
diff --git a/testdata/relarea/x86/release/cygwin/cygwin-devel/setup.hint b/testdata/relarea/x86/release/cygwin/cygwin-devel/setup.hint
new file mode 100644
index 0000000..97170e3
--- /dev/null
+++ b/testdata/relarea/x86/release/cygwin/cygwin-devel/setup.hint
@@ -0,0 +1,8 @@
+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/testdata/relarea/x86/release/cygwin/setup.hint b/testdata/relarea/x86/release/cygwin/setup.hint
new file mode 100644
index 0000000..d0c4b26
--- /dev/null
+++ b/testdata/relarea/x86/release/cygwin/setup.hint
@@ -0,0 +1,7 @@
+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/testdata/relarea/x86/release/invalid/setup.hint b/testdata/relarea/x86/release/invalid/setup.hint
new file mode 100644
index 0000000..279c8c4
--- /dev/null
+++ b/testdata/relarea/x86/release/invalid/setup.hint
@@ -0,0 +1,2 @@
+unknown-key: invalid-value
+invalid-construct
diff --git a/testdata/relarea/x86/release/keychain/keychain-2.6.8-1-src.tar.bz2 b/testdata/relarea/x86/release/keychain/keychain-2.6.8-1-src.tar.bz2
new file mode 100644
index 0000000..ec4c57b
Binary files /dev/null and b/testdata/relarea/x86/release/keychain/keychain-2.6.8-1-src.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/keychain/keychain-2.6.8-1.tar.bz2 b/testdata/relarea/x86/release/keychain/keychain-2.6.8-1.tar.bz2
new file mode 100644
index 0000000..a8fd52f
Binary files /dev/null and b/testdata/relarea/x86/release/keychain/keychain-2.6.8-1.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/keychain/keychain-2.7.1-1-src.tar.bz2 b/testdata/relarea/x86/release/keychain/keychain-2.7.1-1-src.tar.bz2
new file mode 100644
index 0000000..08be499
Binary files /dev/null and b/testdata/relarea/x86/release/keychain/keychain-2.7.1-1-src.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/keychain/keychain-2.7.1-1.tar.bz2 b/testdata/relarea/x86/release/keychain/keychain-2.7.1-1.tar.bz2
new file mode 100644
index 0000000..4982bf6
Binary files /dev/null and b/testdata/relarea/x86/release/keychain/keychain-2.7.1-1.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/keychain/setup.hint b/testdata/relarea/x86/release/keychain/setup.hint
new file mode 100644
index 0000000..7870969
--- /dev/null
+++ b/testdata/relarea/x86/release/keychain/setup.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/testdata/relarea/x86/release/libspiro/libspiro-devel/setup.hint b/testdata/relarea/x86/release/libspiro/libspiro-devel/setup.hint
new file mode 100644
index 0000000..37dcfd7
--- /dev/null
+++ b/testdata/relarea/x86/release/libspiro/libspiro-devel/setup.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/testdata/relarea/x86/release/libspiro/libspiro0/setup.hint b/testdata/relarea/x86/release/libspiro/libspiro0/setup.hint
new file mode 100644
index 0000000..4d9ef6a
--- /dev/null
+++ b/testdata/relarea/x86/release/libspiro/libspiro0/setup.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/testdata/relarea/x86/release/libspiro/setup.hint b/testdata/relarea/x86/release/libspiro/setup.hint
new file mode 100644
index 0000000..42f7126
--- /dev/null
+++ b/testdata/relarea/x86/release/libspiro/setup.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/testdata/relarea/x86/release/libtextcat/libtextcat-2.2-2-src.tar.bz2 b/testdata/relarea/x86/release/libtextcat/libtextcat-2.2-2-src.tar.bz2
new file mode 100644
index 0000000..a1145fb
Binary files /dev/null and b/testdata/relarea/x86/release/libtextcat/libtextcat-2.2-2-src.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/libtextcat/libtextcat-2.2-2.tar.bz2 b/testdata/relarea/x86/release/libtextcat/libtextcat-2.2-2.tar.bz2
new file mode 100644
index 0000000..a1145fb
Binary files /dev/null and b/testdata/relarea/x86/release/libtextcat/libtextcat-2.2-2.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/libtextcat/libtextcat-devel/libtextcat-devel-2.2-2.tar.bz2 b/testdata/relarea/x86/release/libtextcat/libtextcat-devel/libtextcat-devel-2.2-2.tar.bz2
new file mode 100644
index 0000000..a1145fb
Binary files /dev/null and b/testdata/relarea/x86/release/libtextcat/libtextcat-devel/libtextcat-devel-2.2-2.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/libtextcat/libtextcat-devel/setup.hint b/testdata/relarea/x86/release/libtextcat/libtextcat-devel/setup.hint
new file mode 100644
index 0000000..f509126
--- /dev/null
+++ b/testdata/relarea/x86/release/libtextcat/libtextcat-devel/setup.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/testdata/relarea/x86/release/libtextcat/libtextcat0/libtextcat0-2.2-2.tar.bz2 b/testdata/relarea/x86/release/libtextcat/libtextcat0/libtextcat0-2.2-2.tar.bz2
new file mode 100644
index 0000000..a1145fb
Binary files /dev/null and b/testdata/relarea/x86/release/libtextcat/libtextcat0/libtextcat0-2.2-2.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/libtextcat/libtextcat0/setup.hint b/testdata/relarea/x86/release/libtextcat/libtextcat0/setup.hint
new file mode 100644
index 0000000..f3ae673
--- /dev/null
+++ b/testdata/relarea/x86/release/libtextcat/libtextcat0/setup.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/testdata/relarea/x86/release/libtextcat/setup.hint b/testdata/relarea/x86/release/libtextcat/setup.hint
new file mode 100644
index 0000000..5145c2d
--- /dev/null
+++ b/testdata/relarea/x86/release/libtextcat/setup.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/testdata/relarea/x86/release/mDNSResponder/libdns_sd-devel/libdns_sd-devel-379.32.1-1.tar.bz2 b/testdata/relarea/x86/release/mDNSResponder/libdns_sd-devel/libdns_sd-devel-379.32.1-1.tar.bz2
new file mode 100644
index 0000000..a1145fb
Binary files /dev/null and b/testdata/relarea/x86/release/mDNSResponder/libdns_sd-devel/libdns_sd-devel-379.32.1-1.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/mDNSResponder/libdns_sd-devel/setup.hint b/testdata/relarea/x86/release/mDNSResponder/libdns_sd-devel/setup.hint
new file mode 100644
index 0000000..c285be7
--- /dev/null
+++ b/testdata/relarea/x86/release/mDNSResponder/libdns_sd-devel/setup.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/testdata/relarea/x86/release/mDNSResponder/libdns_sd1/libdns_sd1-379.32.1-1.tar.bz2 b/testdata/relarea/x86/release/mDNSResponder/libdns_sd1/libdns_sd1-379.32.1-1.tar.bz2
new file mode 100644
index 0000000..a1145fb
Binary files /dev/null and b/testdata/relarea/x86/release/mDNSResponder/libdns_sd1/libdns_sd1-379.32.1-1.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/mDNSResponder/libdns_sd1/setup.hint b/testdata/relarea/x86/release/mDNSResponder/libdns_sd1/setup.hint
new file mode 100644
index 0000000..74a7a3f
--- /dev/null
+++ b/testdata/relarea/x86/release/mDNSResponder/libdns_sd1/setup.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/testdata/relarea/x86/release/mDNSResponder/mDNSResponder-379.32.1-1-src.tar.bz2 b/testdata/relarea/x86/release/mDNSResponder/mDNSResponder-379.32.1-1-src.tar.bz2
new file mode 100644
index 0000000..a1145fb
Binary files /dev/null and b/testdata/relarea/x86/release/mDNSResponder/mDNSResponder-379.32.1-1-src.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/mDNSResponder/mDNSResponder-379.32.1-1.tar.bz2 b/testdata/relarea/x86/release/mDNSResponder/mDNSResponder-379.32.1-1.tar.bz2
new file mode 100644
index 0000000..a1145fb
Binary files /dev/null and b/testdata/relarea/x86/release/mDNSResponder/mDNSResponder-379.32.1-1.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/mDNSResponder/setup.hint b/testdata/relarea/x86/release/mDNSResponder/setup.hint
new file mode 100644
index 0000000..e50938b
--- /dev/null
+++ b/testdata/relarea/x86/release/mDNSResponder/setup.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/testdata/relarea/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/setup.hint b/testdata/relarea/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/setup.hint
new file mode 100644
index 0000000..55ba552
--- /dev/null
+++ b/testdata/relarea/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/setup.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/testdata/relarea/x86/release/mingw64-i686-binutils/setup.hint b/testdata/relarea/x86/release/mingw64-i686-binutils/setup.hint
new file mode 100644
index 0000000..f911d0d
--- /dev/null
+++ b/testdata/relarea/x86/release/mingw64-i686-binutils/setup.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/testdata/relarea/x86/release/naim/setup.hint b/testdata/relarea/x86/release/naim/setup.hint
new file mode 100644
index 0000000..7de6e7b
--- /dev/null
+++ b/testdata/relarea/x86/release/naim/setup.hint
@@ -0,0 +1,5 @@
+category: Net
+requires:
+sdesc: "Console AIM, ICQ, IRC, and Lily client"
+ldesc: " naim is a console client for AOL Instant Messenger (AIM),
+AOL I Seek You (ICQ), Internet Relay Chat (IRC), and The lily CMC."
diff --git a/testdata/relarea/x86/release/openssh/openssh-7.2p2-1-src.tar.xz b/testdata/relarea/x86/release/openssh/openssh-7.2p2-1-src.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/openssh/openssh-7.2p2-1-src.tar.xz differ
diff --git a/testdata/relarea/x86/release/openssh/openssh-7.2p2-1.tar.xz b/testdata/relarea/x86/release/openssh/openssh-7.2p2-1.tar.xz
new file mode 100644
index 0000000..0e6f1e8
Binary files /dev/null and b/testdata/relarea/x86/release/openssh/openssh-7.2p2-1.tar.xz differ
diff --git a/testdata/relarea/x86/release/openssh/setup.hint b/testdata/relarea/x86/release/openssh/setup.hint
new file mode 100644
index 0000000..83aa11a
--- /dev/null
+++ b/testdata/relarea/x86/release/openssh/setup.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/testdata/relarea/x86/release/proj/libproj-devel/setup.hint b/testdata/relarea/x86/release/proj/libproj-devel/setup.hint
new file mode 100644
index 0000000..76d1555
--- /dev/null
+++ b/testdata/relarea/x86/release/proj/libproj-devel/setup.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/testdata/relarea/x86/release/proj/libproj1/setup.hint b/testdata/relarea/x86/release/proj/libproj1/setup.hint
new file mode 100644
index 0000000..22a79bd
--- /dev/null
+++ b/testdata/relarea/x86/release/proj/libproj1/setup.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/testdata/relarea/x86/release/proj/setup.hint b/testdata/relarea/x86/release/proj/setup.hint
new file mode 100644
index 0000000..c5da485
--- /dev/null
+++ b/testdata/relarea/x86/release/proj/setup.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/testdata/relarea/x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2 b/testdata/relarea/x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2
new file mode 100644
index 0000000..cbf838c
Binary files /dev/null and b/testdata/relarea/x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/rpm-doc/rpm-doc-4.1-2.tar.bz2 b/testdata/relarea/x86/release/rpm-doc/rpm-doc-4.1-2.tar.bz2
new file mode 100644
index 0000000..c7436b3
Binary files /dev/null and b/testdata/relarea/x86/release/rpm-doc/rpm-doc-4.1-2.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/rpm-doc/rpm-doc-999-1.tar.bz2 b/testdata/relarea/x86/release/rpm-doc/rpm-doc-999-1.tar.bz2
new file mode 100644
index 0000000..cbf838c
Binary files /dev/null and b/testdata/relarea/x86/release/rpm-doc/rpm-doc-999-1.tar.bz2 differ
diff --git a/testdata/relarea/x86/release/rpm-doc/setup.hint b/testdata/relarea/x86/release/rpm-doc/setup.hint
new file mode 100644
index 0000000..f3bbf78
--- /dev/null
+++ b/testdata/relarea/x86/release/rpm-doc/setup.hint
@@ -0,0 +1,2 @@
+sdesc: "Obsolete package for RPM package management system manual pages"
+category: _obsolete
diff --git a/testdata/relarea/x86/release/splint/setup.hint b/testdata/relarea/x86/release/splint/setup.hint
new file mode 100644
index 0000000..52b56b9
--- /dev/null
+++ b/testdata/relarea/x86/release/splint/setup.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/testdata/relarea/x86/release/testpackage/setup.hint b/testdata/relarea/x86/release/testpackage/setup.hint
new file mode 100644
index 0000000..10ee390
--- /dev/null
+++ b/testdata/relarea/x86/release/testpackage/setup.hint
@@ -0,0 +1,3 @@
+sdesc: "A test package"
+ldesc: "A test package"
+category: Devel
diff --git a/testdata/relarea/x86/release/testpackage/testpackage-0.1-1.tar.bz2 b/testdata/relarea/x86/release/testpackage/testpackage-0.1-1.tar.bz2
new file mode 100644
index 0000000..e69de29
diff --git a/testdata/x86.hints/release/arc/expected b/testdata/x86.hints/release/arc/expected
deleted file mode 100644
index d0cd27b..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/base-cygwin/expected b/testdata/x86.hints/release/base-cygwin/expected
deleted file mode 100644
index 7505632..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/cygwin/cygwin-debuginfo/expected b/testdata/x86.hints/release/cygwin/cygwin-debuginfo/expected
deleted file mode 100644
index 7359321..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/cygwin/cygwin-devel/expected b/testdata/x86.hints/release/cygwin/cygwin-devel/expected
deleted file mode 100644
index 19c0b1e..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/cygwin/expected b/testdata/x86.hints/release/cygwin/expected
deleted file mode 100644
index e2f3476..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/invalid/expected b/testdata/x86.hints/release/invalid/expected
deleted file mode 100644
index 95681a8..0000000
--- a/testdata/x86.hints/release/invalid/expected
+++ /dev/null
@@ -1,4 +0,0 @@
-{'parse-errors': ['unknown setup key unknown-key at line 0',
-                  "unknown setup construct 'invalid-construct' at line 1",
-                  "required key 'category' missing",
-                  "required key 'sdesc' missing"]}
diff --git a/testdata/x86.hints/release/keychain/expected b/testdata/x86.hints/release/keychain/expected
deleted file mode 100644
index 4113a2d..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/libspiro/expected b/testdata/x86.hints/release/libspiro/expected
deleted file mode 100644
index b16efe0..0000000
--- a/testdata/x86.hints/release/libspiro/expected
+++ /dev/null
@@ -1 +0,0 @@
-OrderedDict([('parse-errors', ['invalid UTF-8'])])
diff --git a/testdata/x86.hints/release/libspiro/libspiro-devel/expected b/testdata/x86.hints/release/libspiro/libspiro-devel/expected
deleted file mode 100644
index b16efe0..0000000
--- a/testdata/x86.hints/release/libspiro/libspiro-devel/expected
+++ /dev/null
@@ -1 +0,0 @@
-OrderedDict([('parse-errors', ['invalid UTF-8'])])
diff --git a/testdata/x86.hints/release/libspiro/libspiro0/expected b/testdata/x86.hints/release/libspiro/libspiro0/expected
deleted file mode 100644
index b16efe0..0000000
--- a/testdata/x86.hints/release/libspiro/libspiro0/expected
+++ /dev/null
@@ -1 +0,0 @@
-OrderedDict([('parse-errors', ['invalid UTF-8'])])
diff --git a/testdata/x86.hints/release/libtextcat/expected b/testdata/x86.hints/release/libtextcat/expected
deleted file mode 100644
index 498e7e5..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/libtextcat/libtextcat-devel/expected b/testdata/x86.hints/release/libtextcat/libtextcat-devel/expected
deleted file mode 100644
index aca0db6..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/libtextcat/libtextcat0/expected b/testdata/x86.hints/release/libtextcat/libtextcat0/expected
deleted file mode 100644
index 7f186d6..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/mDNSResponder/expected b/testdata/x86.hints/release/mDNSResponder/expected
deleted file mode 100644
index f02a324..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/mDNSResponder/libdns_sd-devel/expected b/testdata/x86.hints/release/mDNSResponder/libdns_sd-devel/expected
deleted file mode 100644
index 8e93797..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/mDNSResponder/libdns_sd1/expected b/testdata/x86.hints/release/mDNSResponder/libdns_sd1/expected
deleted file mode 100644
index 45d0032..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/mingw64-i686-binutils/expected b/testdata/x86.hints/release/mingw64-i686-binutils/expected
deleted file mode 100644
index 114e53c..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/expected b/testdata/x86.hints/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/expected
deleted file mode 100644
index c936ff6..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/naim/expected b/testdata/x86.hints/release/naim/expected
deleted file mode 100644
index 9f7710c..0000000
--- a/testdata/x86.hints/release/naim/expected
+++ /dev/null
@@ -1,6 +0,0 @@
-{'category': 'Net',
- 'requires': '',
- 'sdesc': '"Console AIM, ICQ, IRC, and Lily client"',
- 'ldesc': '" naim is a console client for AOL Instant Messenger (AIM),\n'
-          'AOL I Seek You (ICQ), Internet Relay Chat (IRC), and The lily CMC."',
- 'parse-warnings': ['value for key ldesc starts with quoted whitespace']}
diff --git a/testdata/x86.hints/release/openssh/expected b/testdata/x86.hints/release/openssh/expected
deleted file mode 100644
index 8eeefad..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/proj/expected b/testdata/x86.hints/release/proj/expected
deleted file mode 100644
index 40db455..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/proj/libproj-devel/expected b/testdata/x86.hints/release/proj/libproj-devel/expected
deleted file mode 100644
index 620f019..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/proj/libproj1/expected b/testdata/x86.hints/release/proj/libproj1/expected
deleted file mode 100644
index cc05b73..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/proj/proj-debuginfo/expected b/testdata/x86.hints/release/proj/proj-debuginfo/expected
deleted file mode 100644
index 6af3a7b..0000000
--- a/testdata/x86.hints/release/proj/proj-debuginfo/expected
+++ /dev/null
@@ -1,5 +0,0 @@
-{'category': 'Debug',
- 'requires': 'cygwin-debuginfo',
- 'external-source': 'proj',
- 'sdesc': '"Debug info for proj"',
- 'ldesc': '"This package contains files necessary for debugging the\nproj package with gdb."'}
diff --git a/testdata/x86.hints/release/rpm-doc/expected b/testdata/x86.hints/release/rpm-doc/expected
deleted file mode 100644
index db48c82..0000000
--- a/testdata/x86.hints/release/rpm-doc/expected
+++ /dev/null
@@ -1,2 +0,0 @@
-{'sdesc': '"Obsolete package for RPM package management system manual pages"',
- 'category': '_obsolete'}
diff --git a/testdata/x86.hints/release/splint/expected b/testdata/x86.hints/release/splint/expected
deleted file mode 100644
index 5667e4b..0000000
--- a/testdata/x86.hints/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/testdata/x86.hints/release/testpackage/expected b/testdata/x86.hints/release/testpackage/expected
deleted file mode 100644
index de11656..0000000
--- a/testdata/x86.hints/release/testpackage/expected
+++ /dev/null
@@ -1 +0,0 @@
-OrderedDict([('sdesc', '"A test package"'), ('ldesc', '"A test package"'), ('category', 'Devel')])
diff --git a/testdata/x86/release/.gitignore b/testdata/x86/release/.gitignore
deleted file mode 100644
index 0482cb4..0000000
--- a/testdata/x86/release/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-results
-
diff --git a/testdata/x86/release/arc/arc-4.32.7-10-src.tar.bz2 b/testdata/x86/release/arc/arc-4.32.7-10-src.tar.bz2
deleted file mode 100644
index b56f3b9..0000000
Binary files a/testdata/x86/release/arc/arc-4.32.7-10-src.tar.bz2 and /dev/null differ
diff --git a/testdata/x86/release/arc/arc-4.32.7-10.tar.bz2 b/testdata/x86/release/arc/arc-4.32.7-10.tar.bz2
deleted file mode 100644
index b56f3b9..0000000
Binary files a/testdata/x86/release/arc/arc-4.32.7-10.tar.bz2 and /dev/null differ
diff --git a/testdata/x86/release/arc/setup.hint b/testdata/x86/release/arc/setup.hint
deleted file mode 100644
index 718cb55..0000000
--- a/testdata/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/testdata/x86/release/base-cygwin/base-cygwin-3.6-1.tar.xz b/testdata/x86/release/base-cygwin/base-cygwin-3.6-1.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/base-cygwin/base-cygwin-3.6-1.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/base-cygwin/base-cygwin-3.8-1.tar.xz b/testdata/x86/release/base-cygwin/base-cygwin-3.8-1.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/base-cygwin/base-cygwin-3.8-1.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/base-cygwin/setup.hint b/testdata/x86/release/base-cygwin/setup.hint
deleted file mode 100644
index f6f64b2..0000000
--- a/testdata/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/testdata/x86/release/cygwin/.this-should-be-ignored b/testdata/x86/release/cygwin/.this-should-be-ignored
deleted file mode 100644
index e69de29..0000000
diff --git a/testdata/x86/release/cygwin/cygwin-2.2.0-1-src.tar.xz b/testdata/x86/release/cygwin/cygwin-2.2.0-1-src.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/cygwin/cygwin-2.2.0-1-src.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/cygwin/cygwin-2.2.0-1.tar.xz b/testdata/x86/release/cygwin/cygwin-2.2.0-1.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/cygwin/cygwin-2.2.0-1.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/cygwin/cygwin-2.2.1-1-src.tar.xz b/testdata/x86/release/cygwin/cygwin-2.2.1-1-src.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/cygwin/cygwin-2.2.1-1-src.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/cygwin/cygwin-2.2.1-1.tar.xz b/testdata/x86/release/cygwin/cygwin-2.2.1-1.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/cygwin/cygwin-2.2.1-1.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/cygwin/cygwin-2.3.0-0.3-src.tar.xz b/testdata/x86/release/cygwin/cygwin-2.3.0-0.3-src.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/cygwin/cygwin-2.3.0-0.3-src.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/cygwin/cygwin-2.3.0-0.3.tar.xz b/testdata/x86/release/cygwin/cygwin-2.3.0-0.3.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/cygwin/cygwin-2.3.0-0.3.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1.tar.xz b/testdata/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.0-1.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1.tar.xz b/testdata/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.2.1-1.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3.tar.xz b/testdata/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/cygwin/cygwin-debuginfo/cygwin-debuginfo-2.3.0-0.3.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/cygwin/cygwin-debuginfo/setup.hint b/testdata/x86/release/cygwin/cygwin-debuginfo/setup.hint
deleted file mode 100644
index 5ed452c..0000000
--- a/testdata/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/testdata/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.0-1.tar.xz b/testdata/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.0-1.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.0-1.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.1-1.tar.xz b/testdata/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.1-1.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/cygwin/cygwin-devel/cygwin-devel-2.2.1-1.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/cygwin/cygwin-devel/cygwin-devel-2.3.0-0.3.tar.xz b/testdata/x86/release/cygwin/cygwin-devel/cygwin-devel-2.3.0-0.3.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/cygwin/cygwin-devel/cygwin-devel-2.3.0-0.3.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/cygwin/cygwin-devel/setup.hint b/testdata/x86/release/cygwin/cygwin-devel/setup.hint
deleted file mode 100644
index 97170e3..0000000
--- a/testdata/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/testdata/x86/release/cygwin/setup.hint b/testdata/x86/release/cygwin/setup.hint
deleted file mode 100644
index d0c4b26..0000000
--- a/testdata/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/testdata/x86/release/invalid/setup.hint b/testdata/x86/release/invalid/setup.hint
deleted file mode 100644
index 279c8c4..0000000
--- a/testdata/x86/release/invalid/setup.hint
+++ /dev/null
@@ -1,2 +0,0 @@
-unknown-key: invalid-value
-invalid-construct
diff --git a/testdata/x86/release/keychain/keychain-3.1.5-1-src.tar.xz b/testdata/x86/release/keychain/keychain-3.1.5-1-src.tar.xz
deleted file mode 100644
index a9d6a57..0000000
Binary files a/testdata/x86/release/keychain/keychain-3.1.5-1-src.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/keychain/keychain-3.1.5-1.tar.xz b/testdata/x86/release/keychain/keychain-3.1.5-1.tar.xz
deleted file mode 100644
index ea28d9e..0000000
Binary files a/testdata/x86/release/keychain/keychain-3.1.5-1.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/keychain/keychain-3.2.0-1-src.tar.xz b/testdata/x86/release/keychain/keychain-3.2.0-1-src.tar.xz
deleted file mode 100644
index b2241e1..0000000
Binary files a/testdata/x86/release/keychain/keychain-3.2.0-1-src.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/keychain/keychain-3.2.0-1.tar.xz b/testdata/x86/release/keychain/keychain-3.2.0-1.tar.xz
deleted file mode 100644
index ea28d9e..0000000
Binary files a/testdata/x86/release/keychain/keychain-3.2.0-1.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/keychain/setup.hint b/testdata/x86/release/keychain/setup.hint
deleted file mode 100644
index 7870969..0000000
--- a/testdata/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/testdata/x86/release/libspiro/libspiro-devel/setup.hint b/testdata/x86/release/libspiro/libspiro-devel/setup.hint
deleted file mode 100644
index 37dcfd7..0000000
--- a/testdata/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/testdata/x86/release/libspiro/libspiro0/setup.hint b/testdata/x86/release/libspiro/libspiro0/setup.hint
deleted file mode 100644
index 4d9ef6a..0000000
--- a/testdata/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/testdata/x86/release/libspiro/setup.hint b/testdata/x86/release/libspiro/setup.hint
deleted file mode 100644
index 42f7126..0000000
--- a/testdata/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/testdata/x86/release/libtextcat/libtextcat-2.2-2-src.tar.bz2 b/testdata/x86/release/libtextcat/libtextcat-2.2-2-src.tar.bz2
deleted file mode 100644
index a1145fb..0000000
Binary files a/testdata/x86/release/libtextcat/libtextcat-2.2-2-src.tar.bz2 and /dev/null differ
diff --git a/testdata/x86/release/libtextcat/libtextcat-2.2-2.tar.bz2 b/testdata/x86/release/libtextcat/libtextcat-2.2-2.tar.bz2
deleted file mode 100644
index a1145fb..0000000
Binary files a/testdata/x86/release/libtextcat/libtextcat-2.2-2.tar.bz2 and /dev/null differ
diff --git a/testdata/x86/release/libtextcat/libtextcat-devel/libtextcat-devel-2.2-2.tar.bz2 b/testdata/x86/release/libtextcat/libtextcat-devel/libtextcat-devel-2.2-2.tar.bz2
deleted file mode 100644
index a1145fb..0000000
Binary files a/testdata/x86/release/libtextcat/libtextcat-devel/libtextcat-devel-2.2-2.tar.bz2 and /dev/null differ
diff --git a/testdata/x86/release/libtextcat/libtextcat-devel/setup.hint b/testdata/x86/release/libtextcat/libtextcat-devel/setup.hint
deleted file mode 100644
index f509126..0000000
--- a/testdata/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/testdata/x86/release/libtextcat/libtextcat0/libtextcat0-2.2-2.tar.bz2 b/testdata/x86/release/libtextcat/libtextcat0/libtextcat0-2.2-2.tar.bz2
deleted file mode 100644
index a1145fb..0000000
Binary files a/testdata/x86/release/libtextcat/libtextcat0/libtextcat0-2.2-2.tar.bz2 and /dev/null differ
diff --git a/testdata/x86/release/libtextcat/libtextcat0/setup.hint b/testdata/x86/release/libtextcat/libtextcat0/setup.hint
deleted file mode 100644
index f3ae673..0000000
--- a/testdata/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/testdata/x86/release/libtextcat/setup.hint b/testdata/x86/release/libtextcat/setup.hint
deleted file mode 100644
index 5145c2d..0000000
--- a/testdata/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/testdata/x86/release/mDNSResponder/libdns_sd-devel/libdns_sd-devel-379.32.1-1.tar.bz2 b/testdata/x86/release/mDNSResponder/libdns_sd-devel/libdns_sd-devel-379.32.1-1.tar.bz2
deleted file mode 100644
index a1145fb..0000000
Binary files a/testdata/x86/release/mDNSResponder/libdns_sd-devel/libdns_sd-devel-379.32.1-1.tar.bz2 and /dev/null differ
diff --git a/testdata/x86/release/mDNSResponder/libdns_sd-devel/setup.hint b/testdata/x86/release/mDNSResponder/libdns_sd-devel/setup.hint
deleted file mode 100644
index c285be7..0000000
--- a/testdata/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/testdata/x86/release/mDNSResponder/libdns_sd1/libdns_sd1-379.32.1-1.tar.bz2 b/testdata/x86/release/mDNSResponder/libdns_sd1/libdns_sd1-379.32.1-1.tar.bz2
deleted file mode 100644
index a1145fb..0000000
Binary files a/testdata/x86/release/mDNSResponder/libdns_sd1/libdns_sd1-379.32.1-1.tar.bz2 and /dev/null differ
diff --git a/testdata/x86/release/mDNSResponder/libdns_sd1/setup.hint b/testdata/x86/release/mDNSResponder/libdns_sd1/setup.hint
deleted file mode 100644
index 74a7a3f..0000000
--- a/testdata/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/testdata/x86/release/mDNSResponder/mDNSResponder-379.32.1-1-src.tar.bz2 b/testdata/x86/release/mDNSResponder/mDNSResponder-379.32.1-1-src.tar.bz2
deleted file mode 100644
index a1145fb..0000000
Binary files a/testdata/x86/release/mDNSResponder/mDNSResponder-379.32.1-1-src.tar.bz2 and /dev/null differ
diff --git a/testdata/x86/release/mDNSResponder/mDNSResponder-379.32.1-1.tar.bz2 b/testdata/x86/release/mDNSResponder/mDNSResponder-379.32.1-1.tar.bz2
deleted file mode 100644
index a1145fb..0000000
Binary files a/testdata/x86/release/mDNSResponder/mDNSResponder-379.32.1-1.tar.bz2 and /dev/null differ
diff --git a/testdata/x86/release/mDNSResponder/setup.hint b/testdata/x86/release/mDNSResponder/setup.hint
deleted file mode 100644
index e50938b..0000000
--- a/testdata/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/testdata/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/setup.hint b/testdata/x86/release/mingw64-i686-binutils/mingw64-i686-binutils-debuginfo/setup.hint
deleted file mode 100644
index 55ba552..0000000
--- a/testdata/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/testdata/x86/release/mingw64-i686-binutils/setup.hint b/testdata/x86/release/mingw64-i686-binutils/setup.hint
deleted file mode 100644
index f911d0d..0000000
--- a/testdata/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/testdata/x86/release/naim/setup.hint b/testdata/x86/release/naim/setup.hint
deleted file mode 100644
index 7de6e7b..0000000
--- a/testdata/x86/release/naim/setup.hint
+++ /dev/null
@@ -1,5 +0,0 @@
-category: Net
-requires:
-sdesc: "Console AIM, ICQ, IRC, and Lily client"
-ldesc: " naim is a console client for AOL Instant Messenger (AIM),
-AOL I Seek You (ICQ), Internet Relay Chat (IRC), and The lily CMC."
diff --git a/testdata/x86/release/openssh/openssh-7.2p2-1-src.tar.xz b/testdata/x86/release/openssh/openssh-7.2p2-1-src.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/openssh/openssh-7.2p2-1-src.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/openssh/openssh-7.2p2-1.tar.xz b/testdata/x86/release/openssh/openssh-7.2p2-1.tar.xz
deleted file mode 100644
index 0e6f1e8..0000000
Binary files a/testdata/x86/release/openssh/openssh-7.2p2-1.tar.xz and /dev/null differ
diff --git a/testdata/x86/release/openssh/setup.hint b/testdata/x86/release/openssh/setup.hint
deleted file mode 100644
index 83aa11a..0000000
--- a/testdata/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/testdata/x86/release/proj/libproj-devel/setup.hint b/testdata/x86/release/proj/libproj-devel/setup.hint
deleted file mode 100644
index 76d1555..0000000
--- a/testdata/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/testdata/x86/release/proj/libproj1/setup.hint b/testdata/x86/release/proj/libproj1/setup.hint
deleted file mode 100644
index 22a79bd..0000000
--- a/testdata/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/testdata/x86/release/proj/setup.hint b/testdata/x86/release/proj/setup.hint
deleted file mode 100644
index c5da485..0000000
--- a/testdata/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/testdata/x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2 b/testdata/x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2
deleted file mode 100644
index cbf838c..0000000
Binary files a/testdata/x86/release/rpm-doc/rpm-doc-4.1-2-src.tar.bz2 and /dev/null differ
diff --git a/testdata/x86/release/rpm-doc/rpm-doc-4.1-2.tar.bz2 b/testdata/x86/release/rpm-doc/rpm-doc-4.1-2.tar.bz2
deleted file mode 100644
index c7436b3..0000000
Binary files a/testdata/x86/release/rpm-doc/rpm-doc-4.1-2.tar.bz2 and /dev/null differ
diff --git a/testdata/x86/release/rpm-doc/rpm-doc-999-1.tar.bz2 b/testdata/x86/release/rpm-doc/rpm-doc-999-1.tar.bz2
deleted file mode 100644
index cbf838c..0000000
Binary files a/testdata/x86/release/rpm-doc/rpm-doc-999-1.tar.bz2 and /dev/null differ
diff --git a/testdata/x86/release/rpm-doc/setup.hint b/testdata/x86/release/rpm-doc/setup.hint
deleted file mode 100644
index f3bbf78..0000000
--- a/testdata/x86/release/rpm-doc/setup.hint
+++ /dev/null
@@ -1,2 +0,0 @@
-sdesc: "Obsolete package for RPM package management system manual pages"
-category: _obsolete
diff --git a/testdata/x86/release/splint/setup.hint b/testdata/x86/release/splint/setup.hint
deleted file mode 100644
index 52b56b9..0000000
--- a/testdata/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/testdata/x86/release/testpackage/setup.hint b/testdata/x86/release/testpackage/setup.hint
deleted file mode 100644
index 10ee390..0000000
--- a/testdata/x86/release/testpackage/setup.hint
+++ /dev/null
@@ -1,3 +0,0 @@
-sdesc: "A test package"
-ldesc: "A test package"
-category: Devel
diff --git a/testdata/x86/release/testpackage/testpackage-0.1-1.tar.bz2 b/testdata/x86/release/testpackage/testpackage-0.1-1.tar.bz2
deleted file mode 100644
index e69de29..0000000
diff --git a/tests.py b/tests.py
index 3252ac6..8f3350d 100755
--- a/tests.py
+++ b/tests.py
@@ -94,14 +94,14 @@ class TestMain(unittest.TestCase):
     def test_hint_parser(self):
         self.maxDiff = None
 
-        basedir = 'testdata/x86/release'
+        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.setup_hint_parse(os.path.join(dirpath, 'setup.hint'))
-                    compare_with_expected_file(self, os.path.join('testdata/x86.hints/release', relpath), results)
+                    compare_with_expected_file(self, os.path.join('testdata/hints', relpath), results)
 
 #
 # something like "find -name results -exec sh -c 'cd `dirname {}` ; cp results
@@ -116,7 +116,7 @@ class TestMain(unittest.TestCase):
         args = types.SimpleNamespace()
         setattr(args, 'arch', 'x86')
         setattr(args, 'htdocs', htdocs)
-        setattr(args, 'rel_area', 'testdata')
+        setattr(args, 'rel_area', 'testdata/relarea')
         setattr(args, 'dryrun', False)
         setattr(args, 'force', True)
         setattr(args, 'pkglist', 'testdata/pkglist/cygwin-pkg-maint')
@@ -184,7 +184,7 @@ class TestMain(unittest.TestCase):
 
         args = types.SimpleNamespace()
         setattr(args, 'arch', 'x86')
-        setattr(args, 'rel_area', 'testdata')
+        setattr(args, 'rel_area', 'testdata/relarea')
         setattr(args, 'dryrun', False)
 
         pkglist = ['after-ready', 'not-ready', 'testpackage', 'testpackage2']
@@ -200,13 +200,13 @@ class TestMain(unittest.TestCase):
         for (f, t) in ready_fns:
             os.system('touch %s "%s"' % (t, f))
 
-        (error, packages, to_relarea, to_vault, remove_always, remove_success) = uploads.scan(m, pkglist + ['not-on-maintainer-list'], args)
+        scan_result = uploads.scan(m, pkglist + ['not-on-maintainer-list'], args)
 
-        self.assertEqual(error, False)
-        compare_with_expected_file(self, 'testdata/uploads', to_relarea, 'move')
-        self.assertCountEqual(remove_always, [f for (f, t) in ready_fns])
-        self.assertEqual(remove_success, ['testdata/homes/Blooey McFooey/x86/release/testpackage/-testpackage-0.1-1.tar.bz2'])
-        compare_with_expected_file(self, 'testdata/uploads', packages, 'pkglist')
+        self.assertEqual(scan_result.error, False)
+        compare_with_expected_file(self, 'testdata/uploads', scan_result.to_relarea, 'move')
+        self.assertCountEqual(scan_result.remove_always, [f for (f, t) in ready_fns])
+        self.assertEqual(scan_result.remove_success, ['testdata/homes/Blooey McFooey/x86/release/testpackage/-testpackage-0.1-1.tar.bz2'])
+        compare_with_expected_file(self, 'testdata/uploads', scan_result.packages, 'pkglist')
 
     def test_package_set(self):
         self.maxDiff = None
@@ -217,7 +217,7 @@ class TestMain(unittest.TestCase):
         setattr(args, 'force', True)
         setattr(args, 'inifile', 'testdata/inifile/setup.ini')
         setattr(args, 'pkglist', 'testdata/pkglist/cygwin-pkg-maint')
-        setattr(args, 'rel_area', 'testdata')
+        setattr(args, 'rel_area', 'testdata/relarea')
         setattr(args, 'release', 'testing')
         setattr(args, 'setup_version', '4.321')
 
@@ -251,7 +251,7 @@ class TestMain(unittest.TestCase):
         setattr(args, 'release', 'trial')
         setattr(args, 'setup_version', '3.1415')
 
-        shutil.copytree('testdata/x86', os.path.join(getattr(args, 'rel_area'), 'x86'))
+        shutil.copytree('testdata/relarea', getattr(args, 'rel_area'))
         shutil.copytree('testdata/homes', getattr(args, 'homedir'))
 
         # set appropriate !readys
@@ -272,9 +272,9 @@ class TestMain(unittest.TestCase):
 
 if __name__ == '__main__':
     # ensure sha512.sum files exist
-    os.system("find testdata/x86 -type d -exec sh -c 'cd {} ; sha512sum * >sha512.sum 2>/dev/null' \;")
+    os.system("find testdata/relarea/x86 -type d -exec sh -c 'cd {} ; sha512sum * >sha512.sum 2>/dev/null' \;")
     # should remove a sha512.sum file so that we test functioning when it's absent
-    os.unlink('testdata/x86/release/naim/sha512.sum')
+    os.unlink('testdata/relarea/x86/release/naim/sha512.sum')
     # remove !ready files
     os.system("find testdata/homes -name !ready -exec rm {} \;")
 
diff --git a/uploads.py b/uploads.py
index f53a67c..b921ff1 100644
--- a/uploads.py
+++ b/uploads.py
@@ -25,7 +25,7 @@
 # upload directory processing
 #
 
-from collections import defaultdict
+from collections import defaultdict, namedtuple
 import filecmp
 import os
 import logging
@@ -38,6 +38,9 @@ import package
 # reminders will be issued daily
 REMINDER_INTERVAL = 60*60*24
 
+# a named tuple type to hold the result of scan
+ScanResult = namedtuple('ScanResult', 'error,packages,to_relarea,to_vault,remove_always,remove_success')
+
 
 #
 #
@@ -154,9 +157,16 @@ def scan(m, all_packages, args):
                 continue
 
             if f.startswith('-'):
-                vault[relpath].append(f[1:])
+                if ('*' in f) or ('?' in f):
+                    logging.error("remove file %s name contains metacharacters, which are no longer supported" % fn)
+                    error = True
+                elif os.path.getsize(fn) != 0:
+                    logging.error("remove file %s is not empty" % fn)
+                    error = True
+                else:
+                    vault[relpath].append(f[1:])
+                    remove_success.append(fn)
                 files.remove(f)
-                remove_success.append(fn)
             else:
                 dest = os.path.join(releasedir, relpath, f)
                 if os.path.isfile(dest):
@@ -190,7 +200,7 @@ def scan(m, all_packages, args):
         except FileNotFoundError:
             pass
 
-    return (error, packages, move, vault, remove, remove_success)
+    return ScanResult(error, packages, move, vault, remove, remove_success)
 
 
 #


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]