From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 79061 invoked by alias); 9 Dec 2016 13:52:11 -0000 Mailing-List: contact cygwin-apps-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cygwin-apps-cvs-owner@sourceware.org Received: (qmail 79029 invoked by uid 9795); 9 Dec 2016 13:52:10 -0000 Date: Fri, 09 Dec 2016 13:52:00 -0000 Message-ID: <20161209135209.78988.qmail@sourceware.org> From: jturney@sourceware.org To: cygwin-apps-cvs@sourceware.org Subject: [calm - Cygwin server-side packaging maintenance script] branch master, updated. 20160705-41-gf3e0b64 X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 8296f4b29532ea2e604e44e6cf703db545f02132 X-Git-Newrev: f3e0b64f40dc1a29e138295ffba136eccc019df2 X-SW-Source: 2016-q4/txt/msg00011.txt.bz2 https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=f3e0b64f40dc1a29e138295ffba136eccc019df2 commit f3e0b64f40dc1a29e138295ffba136eccc019df2 Author: Jon Turney Date: Fri Dec 9 12:36:12 2016 +0000 Add a test for uploading just a replacement pvr.hint file https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=6c45ddb6e7be36a836b52b16dd156d76fac3aca6 commit 6c45ddb6e7be36a836b52b16dd156d76fac3aca6 Author: Jon Turney Date: Fri Dec 9 12:18:59 2016 +0000 Handle uploads of replacement pvr.hint correctly https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=6e69c16f243c1511fdc7e5114fb1472a70f2798a commit 6e69c16f243c1511fdc7e5114fb1472a70f2798a Author: Jon Turney Date: Thu Dec 8 12:47:48 2016 +0000 Fix exception getting best_version when a package has no versions Fix an exception trying to determine best_version when a package erroneously has no versions https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=dfe16a90eae9f470ad70c53cc062d5dddfd0a27c commit dfe16a90eae9f470ad70c53cc062d5dddfd0a27c Author: Jon Turney Date: Wed Dec 7 23:48:49 2016 +0000 Add support for explicit 'test:' in pvr.hint With hindsight, override.hint seems to have been a bit of a mistake, as it suffers from the same problem as setup.hint, that a careless update to it unintentionally affects other versions. So, as an alternate mechanism, add support for an explicit 'test:' in pvr.hint, marking a version as a test version. If multiple versions have are marked thus, the highest version will be assigned to the test stability level. Versions marked as test cannot be assigned to any other stability level. Diff: --- calm/hint.py | 2 + calm/package.py | 61 +++++++++++++------ test/test_calm.py | 3 +- .../per-version-replacement-hint-only-1.0-1.hint | 4 + test/testdata/htdocs.expected/x86/packages.inc | 1 + .../per-version-replacement-hint-only/.htaccess | 3 + .../per-version-replacement-hint-only-1.0-1 | 7 ++ .../per-version-replacement-hint-only-1.0-1-src | 7 ++ test/testdata/inifile/setup.ini.expected | 11 ++++ test/testdata/pkglist/cygwin-pkg-maint | 1 + test/testdata/pkglist/expected | 2 +- test/testdata/process_arch/homedir.expected | 1 + test/testdata/process_arch/htdocs.expected | 3 + test/testdata/process_arch/rel_area.expected | 4 + test/testdata/process_arch/setup.ini.expected | 11 ++++ ...-version-replacement-hint-only-1.0-1-src.tar.xz | Bin 0 -> 228 bytes .../per-version-replacement-hint-only-1.0-1.hint | 4 + .../per-version-replacement-hint-only-1.0-1.tar.xz | Bin 0 -> 228 bytes 18 files changed, 104 insertions(+), 21 deletions(-) diff --git a/calm/hint.py b/calm/hint.py index cf0d94a..7eb41bd 100755 --- a/calm/hint.py +++ b/calm/hint.py @@ -79,6 +79,8 @@ hintkeys[pvr] = merge_dicts(commonkeys, { # (depends could be an alias for requires in this kind of hint file) 'depends': 'optval', 'build-depends': 'optval', + # mark the package as a test version + 'test': 'noval', }) hintkeys[override] = merge_dicts(versionkeys, overridekeys) diff --git a/calm/package.py b/calm/package.py index b77c960..cf3c22e 100755 --- a/calm/package.py +++ b/calm/package.py @@ -227,20 +227,27 @@ def read_package(packages, basedir, dirpath, files, strict=False, remove=[]): if 'md5.sum' in files: files.remove('md5.sum') - # collect the attributes for each tar file + # build a list of version-releases (since replacement pvr.hint files are + # allowed to be uploaded, we must consider both .tar and .hint files for + # that), and collect the attributes for each tar file tars = {} vr_list = set() - for f in list(filter(lambda f: re.match(r'^' + re.escape(p) + r'.*\.tar.*$', f), files)): - files.remove(f) + for f in list(files): + match = re.match(r'^' + re.escape(p) + r'.*\.(tar\.(bz2|gz|lzma|xz)|hint)$', f) + if not match: + continue + + if not f.endswith('.hint'): + files.remove(f) - # warn if tar filename doesn't follow P-V-R naming convention + # warn if filename doesn't follow P-V-R naming convention # # P must match the package name, V can contain anything, R must # start with a number - match = re.match(r'^' + re.escape(p) + '-(.+)-(\d[0-9a-zA-Z.]*)(-src|)\.tar\.(bz2|gz|lzma|xz)$', f) + match = re.match(r'^' + re.escape(p) + '-(.+)-(\d[0-9a-zA-Z.]*)(-src|)\.' + match.group(1) + '$', f) if not match: - logging.log(strict_lvl, "tar file '%s' in package '%s' doesn't follow naming convention" % (f, p)) + logging.log(strict_lvl, "file '%s' in package '%s' doesn't follow naming convention" % (f, p)) warnings = True else: v = match.group(1) @@ -251,24 +258,26 @@ def read_package(packages, basedir, dirpath, files, strict=False, remove=[]): # idea. if '-' in v: lvl = logging.WARNING if p not in past_mistakes.hyphen_in_version else logging.INFO - logging.log(lvl, "tar file '%s' in package '%s' contains '-' in version" % (f, p)) + logging.log(lvl, "file '%s' in package '%s' contains '-' in version" % (f, p)) if not v[0].isdigit(): - logging.warning("tar file '%s' in package '%s' has a version which doesn't start with a digit" % (f, p)) + logging.warning("file '%s' in package '%s' has a version which doesn't start with a digit" % (f, p)) # if not there already, add to version-release list vr_list.add('%s-%s' % (v, r)) - tars[f] = Tar() - tars[f].size = os.path.getsize(os.path.join(dirpath, f)) - tars[f].is_empty = tarfile_is_empty(os.path.join(dirpath, f)) - tars[f].mtime = os.path.getmtime(os.path.join(dirpath, f)) + if not f.endswith('.hint'): + # collect the attributes for each tar file + tars[f] = Tar() + tars[f].size = os.path.getsize(os.path.join(dirpath, f)) + tars[f].is_empty = tarfile_is_empty(os.path.join(dirpath, f)) + tars[f].mtime = os.path.getmtime(os.path.join(dirpath, f)) - if f in sha512: - tars[f].sha512 = sha512[f] - else: - tars[f].sha512 = sha512_file(os.path.join(dirpath, f)) - logging.debug("no sha512.sum line for file %s in package '%s', computed sha512 hash is %s" % (f, p, tars[f].sha512)) + if f in sha512: + tars[f].sha512 = sha512[f] + else: + tars[f].sha512 = sha512_file(os.path.join(dirpath, f)) + logging.debug("no sha512.sum line for file %s in package '%s', computed sha512 hash is %s" % (f, p, tars[f].sha512)) # determine hints for each version we've encountered version_hints = {} @@ -478,12 +487,22 @@ def validate_packages(args, packages): break else: logging.debug("package '%s' stability '%s' overridden to version '%s'" % (p, l, v)) + # if package is explicitly marked as having that stability level + # (only used for test, currently) + elif (l == 'test') and ('test' in packages[p].version_hints[v]): + logging.debug("package '%s' version '%s' marked as stability '%s'" % (p, v, l)) else: # level 'test' must be assigned by override if l == 'test': levels.remove(l) # go around again to check for override at the new level continue + else: + # if version is explicitly marked test, it can't be + # assigned to any other stability level + if 'test' in packages[p].version_hints[v]: + logging.debug("package '%s' version '%s' can't be used for stability '%s' as it's marked test" % (p, v, l)) + break level_found = True logging.log(5, "package '%s' stability '%s' assigned version '%s'" % (p, l, v)) @@ -506,7 +525,7 @@ def validate_packages(args, packages): # the package must have some versions if not packages[p].stability: - logging.error("package '%s' doesn't have any versions" % (p)) + logging.error("no versions at any stability level for package '%s'" % (p)) error = True # it's also probably a really good idea if a curr version exists elif 'curr' not in packages[p].stability and 'curr' not in getattr(args, 'okmissing', []): @@ -516,8 +535,12 @@ def validate_packages(args, packages): # the curr version, if we have one, otherwise, the highest version. if 'curr' in packages[p].stability: packages[p].best_version = packages[p].stability['curr'] - else: + elif len(packages[p].vermap): packages[p].best_version = sorted(packages[p].vermap.keys(), key=lambda v: SetupVersion(v), reverse=True)[0] + else: + logging.error("package '%s' doesn't have any versions" % (p)) + packages[p].best_version = None + error = True # If, for every stability level, the install tarball is empty and there # is no source tarball, we should probably be marked obsolete diff --git a/test/test_calm.py b/test/test_calm.py index 84124bd..b0e725d 100755 --- a/test/test_calm.py +++ b/test/test_calm.py @@ -264,7 +264,8 @@ class CalmTest(unittest.TestCase): (os.path.join(m_homedir, 'x86', 'release', 'after-ready', '!ready'), '-t 198709011700'), (os.path.join(m_homedir, 'noarch', 'release', 'perl-Net-SMTP-SSL', '!ready'), ''), (os.path.join(m_homedir, 'x86', 'release', 'corrupt', '!ready'), ''), - (os.path.join(m_homedir, 'x86', 'release', 'per-version', '!ready'), '')] + (os.path.join(m_homedir, 'x86', 'release', 'per-version', '!ready'), ''), + (os.path.join(m_homedir, 'x86', 'release', 'per-version-replacement-hint-only', '!ready'), '')] for (f, t) in ready_fns: os.system('touch %s "%s"' % (t, f)) diff --git a/test/testdata/homes/Blooey McFooey/x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1.hint b/test/testdata/homes/Blooey McFooey/x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1.hint new file mode 100644 index 0000000..fbc7159 --- /dev/null +++ b/test/testdata/homes/Blooey McFooey/x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1.hint @@ -0,0 +1,4 @@ +sdesc: "Replacement per-version hint test package - updated" +ldesc: "Replacement per-version hint test package - updated" +category: Base +requires: base-cygwin per-version diff --git a/test/testdata/htdocs.expected/x86/packages.inc b/test/testdata/htdocs.expected/x86/packages.inc index 54fc736..1f443bd 100755 --- a/test/testdata/htdocs.expected/x86/packages.inc +++ b/test/testdata/htdocs.expected/x86/packages.inc @@ -17,6 +17,7 @@ mDNSResponderBonjour Zeroconf implementation opensshThe OpenSSH server and client programs per-versionPer-version hint test package +per-version-replacement-hint-onlyPer-version hint test package perl-Net-SMTP-SSLPerl distribution Net-SMTP-SSL rpm-docObsolete package for RPM package management system manual pages staleversionTest package for stale version removal diff --git a/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only/.htaccess b/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only/.htaccess new file mode 100644 index 0000000..3196d64 --- /dev/null +++ b/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only/.htaccess @@ -0,0 +1,3 @@ +Options Indexes +IndexOptions -FancyIndexing +AddType text/html 1 2 3 4 5 6 7 8 9 diff --git a/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1 b/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1 new file mode 100644 index 0000000..86c5135 --- /dev/null +++ b/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1 @@ -0,0 +1,7 @@ + +

per-version-replacement-hint-only: Per-version hint test package (installed binaries and support files)

+
+    2015-10-11 14:45          26 test/test.1
+    2015-10-11 14:45          31 test/test.2
+
+ diff --git a/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1-src b/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1-src new file mode 100644 index 0000000..969236e --- /dev/null +++ b/test/testdata/htdocs.expected/x86/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1-src @@ -0,0 +1,7 @@ + +

per-version-replacement-hint-only: Per-version hint test package (source code)

+
+    2015-10-11 14:45          26 test/test.1
+    2015-10-11 14:45          31 test/test.2
+
+ diff --git a/test/testdata/inifile/setup.ini.expected b/test/testdata/inifile/setup.ini.expected index d770582..ea351c1 100644 --- a/test/testdata/inifile/setup.ini.expected +++ b/test/testdata/inifile/setup.ini.expected @@ -209,6 +209,17 @@ 'source: x86/release/per-version/per-version-4.0-1-src.tar.xz 228 ' 'e675b0ac4bc2c3e1c4971bc56d77b0cd53a9bdf5632873a235d7582e29dfd3e8a7bb04b28f6cdee3e6b3d14c25ed39392538e3f628a9bfda6c905646ebc3c225\n' '\n' + '@ per-version-replacement-hint-only\n' + 'sdesc: "Per-version hint test package"\n' + 'ldesc: "Per-version hint test package"\n' + 'category: Base\n' + 'requires: cygwin\n' + 'version: 1.0-1\n' + 'install: x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1.tar.xz 228 ' + 'e675b0ac4bc2c3e1c4971bc56d77b0cd53a9bdf5632873a235d7582e29dfd3e8a7bb04b28f6cdee3e6b3d14c25ed39392538e3f628a9bfda6c905646ebc3c225\n' + 'source: x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1-src.tar.xz 228 ' + 'e675b0ac4bc2c3e1c4971bc56d77b0cd53a9bdf5632873a235d7582e29dfd3e8a7bb04b28f6cdee3e6b3d14c25ed39392538e3f628a9bfda6c905646ebc3c225\n' + '\n' '@ perl-Net-SMTP-SSL\n' 'sdesc: "Perl distribution Net-SMTP-SSL"\n' 'ldesc: "Implements the same API as Net::SMTP, but uses IO::Socket::SSL for\n' diff --git a/test/testdata/pkglist/cygwin-pkg-maint b/test/testdata/pkglist/cygwin-pkg-maint index 6067d55..9239bdc 100644 --- a/test/testdata/pkglist/cygwin-pkg-maint +++ b/test/testdata/pkglist/cygwin-pkg-maint @@ -1703,6 +1703,7 @@ perl-YAML Achim Gratz/Yaakov Selkowitz perl-YAML-LibYAML Achim Gratz per-version Blooey McFooey per-version-incomplete Blooey McFooey +per-version-replacement-hint-only Blooey McFooey phodav Yaakov Selkowitz phonon Yaakov Selkowitz phonon-backend-gstreamer Yaakov Selkowitz diff --git a/test/testdata/pkglist/expected b/test/testdata/pkglist/expected index 0610a6c..a43eb13 100644 --- a/test/testdata/pkglist/expected +++ b/test/testdata/pkglist/expected @@ -3,7 +3,7 @@ 'Adam Dinwoodie': maintainers.Maintainer('Adam Dinwoodie', [], ['git']), 'Alexey Sokolov': maintainers.Maintainer('Alexey Sokolov', [], ['znc']), 'Andrew Schulman': maintainers.Maintainer('Andrew Schulman', [], ['atool', 'autossh', 'bc', 'discus', 'fish', 'lftp', 'libargp', 'nosleep', 'orpie', 'pinfo', 'ploticus', 'ploticus-doc', 'screen', 'sitecopy', 'sng', 'socat', 'stow', 'stunnel', 'time', 'unison2.27', 'unison2.32', 'unison2.40', 'unison2.45', 'unison2.48']), - 'Blooey McFooey': maintainers.Maintainer('Blooey McFooey', [], ['corrupt', 'perl-Net-SMTP-SSL', 'per-version', 'per-version-incomplete', 'staleversion', 'testpackage']), + 'Blooey McFooey': maintainers.Maintainer('Blooey McFooey', [], ['corrupt', 'perl-Net-SMTP-SSL', 'per-version', 'per-version-incomplete', 'per-version-replacement-hint-only', 'staleversion', 'testpackage']), 'Bob Heckel': maintainers.Maintainer('Bob Heckel', [], ['libgc', 'w3m']), 'Charles Wilson': maintainers.Maintainer('Charles Wilson', [], ['alternatives', 'autobuild', 'cygutils', 'gcc-tools-epoch1-autoconf', 'gcc-tools-epoch1-automake', 'gcc-tools-epoch2-autoconf', 'gcc-tools-epoch2-automake', 'inetutils', 'libassuan', 'libksba', 'libustr', 'libXpm-noX', 'mingw-binutils', 'mingw-bzip2', 'mingw-gcc', 'mingw-libgcrypt', 'mingw-libgpg-error', 'mingw-pthreads', 'mingw-xz', 'mingw-zlib', 'nfrotz', 'pinentry', 'pth', 'rsh', 'run2', 'rxvt', 'sunrpc', 'tcp_wrappers', 'xsri']), 'Chris J. Breisch': maintainers.Maintainer('Chris J. Breisch', [], ['man-db']), diff --git a/test/testdata/process_arch/homedir.expected b/test/testdata/process_arch/homedir.expected index e680cec..2f825f1 100644 --- a/test/testdata/process_arch/homedir.expected +++ b/test/testdata/process_arch/homedir.expected @@ -11,6 +11,7 @@ 'Blooey McFooey/x86/release/not-on-package-list': ['not-on-package-list-1.0-1.tar.bz2', 'setup.hint'], 'Blooey McFooey/x86/release/not-ready': ['-not-ready-0.9-1.tar.bz2', 'not-ready-1.0-1.tar.bz2', 'setup.hint'], 'Blooey McFooey/x86/release/per-version': [], + 'Blooey McFooey/x86/release/per-version-replacement-hint-only': [], 'Blooey McFooey/x86/release/testpackage': [], 'Blooey McFooey/x86/release/testpackage/testpackage-subpackage': [], 'Blooey McFooey/x86/release/testpackage2': ['setup.hint', 'testpackage2-1.0-1.tar.bz2'], diff --git a/test/testdata/process_arch/htdocs.expected b/test/testdata/process_arch/htdocs.expected index 3dd3b28..235021c 100644 --- a/test/testdata/process_arch/htdocs.expected +++ b/test/testdata/process_arch/htdocs.expected @@ -27,6 +27,9 @@ 'per-version-4.8-1-src', 'per-version-5.0-1', 'per-version-5.0-1-src'], + 'x86/per-version-replacement-hint-only': ['.htaccess', + 'per-version-replacement-hint-only-1.0-1', + 'per-version-replacement-hint-only-1.0-1-src'], 'x86/perl-Net-SMTP-SSL': ['.htaccess', 'perl-Net-SMTP-SSL-1.03-1', 'perl-Net-SMTP-SSL-1.03-1-src', diff --git a/test/testdata/process_arch/rel_area.expected b/test/testdata/process_arch/rel_area.expected index 67d9b4c..51f4a24 100644 --- a/test/testdata/process_arch/rel_area.expected +++ b/test/testdata/process_arch/rel_area.expected @@ -71,6 +71,10 @@ 'per-version-incomplete-39-1-src.tar.xz', 'per-version-incomplete-39-1.tar.xz', 'sha512.sum'], + 'x86/release/per-version-replacement-hint-only': ['per-version-replacement-hint-only-1.0-1-src.tar.xz', + 'per-version-replacement-hint-only-1.0-1.hint', + 'per-version-replacement-hint-only-1.0-1.tar.xz', + 'sha512.sum'], 'x86/release/proj': ['setup.hint', 'sha512.sum'], 'x86/release/proj/libproj-devel': ['setup.hint', 'sha512.sum'], 'x86/release/proj/libproj1': ['setup.hint', 'sha512.sum'], diff --git a/test/testdata/process_arch/setup.ini.expected b/test/testdata/process_arch/setup.ini.expected index 2fd7bcb..d959734 100644 --- a/test/testdata/process_arch/setup.ini.expected +++ b/test/testdata/process_arch/setup.ini.expected @@ -215,6 +215,17 @@ 'source: x86/release/per-version/per-version-5.0-1-src.tar.xz 228 ' 'e675b0ac4bc2c3e1c4971bc56d77b0cd53a9bdf5632873a235d7582e29dfd3e8a7bb04b28f6cdee3e6b3d14c25ed39392538e3f628a9bfda6c905646ebc3c225\n' '\n' + '@ per-version-replacement-hint-only\n' + 'sdesc: "Replacement per-version hint test package - updated"\n' + 'ldesc: "Replacement per-version hint test package - updated"\n' + 'category: Base\n' + 'requires: base-cygwin per-version\n' + 'version: 1.0-1\n' + 'install: x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1.tar.xz 228 ' + 'e675b0ac4bc2c3e1c4971bc56d77b0cd53a9bdf5632873a235d7582e29dfd3e8a7bb04b28f6cdee3e6b3d14c25ed39392538e3f628a9bfda6c905646ebc3c225\n' + 'source: x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1-src.tar.xz 228 ' + 'e675b0ac4bc2c3e1c4971bc56d77b0cd53a9bdf5632873a235d7582e29dfd3e8a7bb04b28f6cdee3e6b3d14c25ed39392538e3f628a9bfda6c905646ebc3c225\n' + '\n' '@ perl-Net-SMTP-SSL\n' 'sdesc: "Perl distribution Net-SMTP-SSL"\n' 'ldesc: "Implements the same API as Net::SMTP, but uses IO::Socket::SSL for\n' diff --git a/test/testdata/relarea/x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1-src.tar.xz b/test/testdata/relarea/x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1-src.tar.xz new file mode 100644 index 0000000..0e6f1e8 Binary files /dev/null and b/test/testdata/relarea/x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1-src.tar.xz differ diff --git a/test/testdata/relarea/x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1.hint b/test/testdata/relarea/x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1.hint new file mode 100644 index 0000000..726738d --- /dev/null +++ b/test/testdata/relarea/x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1.hint @@ -0,0 +1,4 @@ +sdesc: "Per-version hint test package" +ldesc: "Per-version hint test package" +category: Base +requires: cygwin diff --git a/test/testdata/relarea/x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1.tar.xz b/test/testdata/relarea/x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1.tar.xz new file mode 100644 index 0000000..0e6f1e8 Binary files /dev/null and b/test/testdata/relarea/x86/release/per-version-replacement-hint-only/per-version-replacement-hint-only-1.0-1.tar.xz differ