From ecebf9fbdef8d75ba1c12913e53dba7573bdd89c Mon Sep 17 00:00:00 2001 From: Martchus Date: Tue, 31 May 2022 19:50:46 +0200 Subject: [PATCH] Fix showing arch of packages after optimization * Move the binary package arch truly into the base package --- cli/main.cpp | 6 +++--- libpkg/data/package.cpp | 7 ++----- libpkg/data/package.h | 1 - libpkg/parser/package.cpp | 6 +++--- libpkg/tests/data.cpp | 5 ++--- libpkg/tests/parser.cpp | 2 +- libpkg/tests/parser_binary.cpp | 4 ++-- libpkg/tests/parser_helper.cpp | 4 ++-- librepomgr/buildactions/reloadlibrarydependencies.cpp | 2 +- librepomgr/buildactions/repomanagement.cpp | 2 +- srv/static/js/packagerendering.js | 2 +- 11 files changed, 18 insertions(+), 23 deletions(-) diff --git a/cli/main.cpp b/cli/main.cpp index 4b4d83f..c6d885a 100644 --- a/cli/main.cpp +++ b/cli/main.cpp @@ -101,8 +101,8 @@ static void printPackageSearchResults(const LibRepoMgr::WebClient::Response::bod for (const auto &[db, package, packageID] : packages) { const auto &dbInfo = std::get(db); t.add_row( - { package->packageInfo ? package->packageInfo->arch : dbInfo.arch, dbInfo.name, package->name, package->version, package->description, - package->packageInfo && !package->packageInfo->buildDate.isNull() ? package->packageInfo->buildDate.toString() : "?" }); + { package->packageInfo ? package->arch : dbInfo.arch, dbInfo.name, package->name, package->version, package->description, + package->packageInfo && !package->buildDate.isNull() ? package->packageInfo->buildDate.toString() : "?" }); } t.row(0).format().font_align(tabulate::FontAlign::center).font_style({ tabulate::FontStyle::bold }); configureColumnWidths(t); @@ -135,7 +135,7 @@ static void printPackageDetails(const LibRepoMgr::WebClient::Response::body_type tabulate::Table t; t.format().hide_border(); if (pkg->packageInfo) { - t.add_row({ "Arch", pkg->packageInfo->arch }); + t.add_row({ "Arch", pkg->arch }); } else if (!pkg->archs.empty()) { t.add_row({ "Archs", formatList(pkg->archs) }); } else if (pkg->sourceInfo) { diff --git a/libpkg/data/package.cpp b/libpkg/data/package.cpp index a100add..71785a7 100644 --- a/libpkg/data/package.cpp +++ b/libpkg/data/package.cpp @@ -322,13 +322,10 @@ std::string PackageVersion::toString() const */ string LibPkg::Package::computeFileName(const char *extension) const { - if (!packageInfo) { - return string(); - } - if (!packageInfo->fileName.empty()) { + if (packageInfo && !packageInfo->fileName.empty()) { return packageInfo->fileName; } - return argsToString(name, '-', version, '-', packageInfo->arch, '.', extension); + return argsToString(name, '-', version, '-', arch, '.', extension); } string LibPkg::PackageBase::computeRegularPackageName() const diff --git a/libpkg/data/package.h b/libpkg/data/package.h index ec1ca6c..d60fcc8 100644 --- a/libpkg/data/package.h +++ b/libpkg/data/package.h @@ -233,7 +233,6 @@ struct LIBPKG_EXPORT PackageInfo : public ReflectiveRapidJSON::JsonSerializable< std::string md5; std::string sha256; std::string pgpSignature; - std::string arch; // arch of concrete binary package std::uint32_t size = 0; bool operator==(const PackageInfo &other) const = default; }; diff --git a/libpkg/parser/package.cpp b/libpkg/parser/package.cpp index 5a73132..8debead 100644 --- a/libpkg/parser/package.cpp +++ b/libpkg/parser/package.cpp @@ -234,7 +234,7 @@ static void addPackageInfo(Package &package, PackageVersion &version, const char if (isPackageInfo) { // add as binary arch when parsing PKGINFO ensure_pkg_info; - package.packageInfo->arch = valueString; + package.arch = valueString; } else if (!packageCount) { // add to sourceInfo when still parsing base info package.sourceInfo->archs.emplace_back(value, valueSize); @@ -319,7 +319,7 @@ static void addPackageDescription(Package &package, const char *field, size_t fi } else_if_field("ARCH") { - package.packageInfo->arch = valueString; + package.arch = valueString; } else_if_field("LICENSE") { @@ -934,10 +934,10 @@ std::shared_ptr Package::fromPkgFileName(std::string_view fileName) pkg->origin = PackageOrigin::PackageFileName; pkg->name = name; pkg->version = version; + pkg->arch = arch; pkg->provides.emplace_back(pkg->name, pkg->version); pkg->packageInfo = std::make_optional(); pkg->packageInfo->fileName = fileName; - pkg->packageInfo->arch = arch; return pkg; } diff --git a/libpkg/tests/data.cpp b/libpkg/tests/data.cpp index 19930ae..6ce4f90 100644 --- a/libpkg/tests/data.cpp +++ b/libpkg/tests/data.cpp @@ -273,10 +273,9 @@ void DataTests::testComputingFileName() auto pkg = Package(); pkg.name = "test"; pkg.version = "1.2-3"; - CPPUNIT_ASSERT_EQUAL_MESSAGE("packageInfo required for computing filename", string(), pkg.computeFileName()); - pkg.packageInfo = std::make_optional(); - pkg.packageInfo->arch = "x86_64"; + pkg.arch = "x86_64"; CPPUNIT_ASSERT_EQUAL_MESSAGE("file name computed from name, version and arch", "test-1.2-3-x86_64.pkg.tar.zst"s, pkg.computeFileName()); + pkg.packageInfo = std::make_optional(); pkg.packageInfo->fileName = "explicitly-specified-filename"; CPPUNIT_ASSERT_EQUAL_MESSAGE("explicitly specified filename returned", "explicitly-specified-filename"s, pkg.computeFileName()); } diff --git a/libpkg/tests/parser.cpp b/libpkg/tests/parser.cpp index 5ae54ef..9fbbe75 100644 --- a/libpkg/tests/parser.cpp +++ b/libpkg/tests/parser.cpp @@ -280,7 +280,7 @@ void ParserTests::testParsingPkgName() CPPUNIT_ASSERT_EQUAL_MESSAGE("origin", PackageOrigin::PackageFileName, pkg->origin); CPPUNIT_ASSERT_EQUAL("texlive-localmanager-git"s, pkg->name); CPPUNIT_ASSERT_EQUAL("0.4.6.r0.gd71966e-1"s, pkg->version); - CPPUNIT_ASSERT_EQUAL("any"s, pkg->packageInfo->arch); + CPPUNIT_ASSERT_EQUAL("any"s, pkg->arch); } void ParserTests::testExtractingPkgFile() diff --git a/libpkg/tests/parser_binary.cpp b/libpkg/tests/parser_binary.cpp index 0276d01..1d4395c 100644 --- a/libpkg/tests/parser_binary.cpp +++ b/libpkg/tests/parser_binary.cpp @@ -104,7 +104,7 @@ void BinaryParserTests::testParsingElfFromPkgFile() const auto pkgFilePath3 = testFilePath("perl/perl-linux-desktopfiles-0.22-2-any.pkg.tar.xz"); const auto package3 = Package::fromPkgFile(pkgFilePath3); CPPUNIT_ASSERT_EQUAL_MESSAGE("origin", PackageOrigin::PackageContents, package3->origin); - CPPUNIT_ASSERT_EQUAL_MESSAGE("arch", "any"s, package3->packageInfo->arch); + CPPUNIT_ASSERT_EQUAL_MESSAGE("arch", "any"s, package3->arch); const unordered_set expectedPerlDependencies{ Dependency("perl", "5.28", DependencyMode::GreatherEqual), // because contained module built against Perl 5.28 Dependency("perl", "5.29", DependencyMode::LessThan), // because contained module built against Perl 5.28 @@ -120,7 +120,7 @@ void BinaryParserTests::testParsingElfFromPkgFile() const auto pkgFilePath4 = testFilePath("python/sphinxbase-5prealpha-7-i686.pkg.tar.xz"); const auto package4 = Package::fromPkgFile(pkgFilePath4); CPPUNIT_ASSERT_EQUAL_MESSAGE("origin", PackageOrigin::PackageContents, package4->origin); - CPPUNIT_ASSERT_EQUAL_MESSAGE("arch", "i686"s, package4->packageInfo->arch); + CPPUNIT_ASSERT_EQUAL_MESSAGE("arch", "i686"s, package4->arch); const unordered_set expectedPythonDependencies{ Dependency("libpulse"), // from PKGBUILD Dependency("lapack"), // from PKGBUILD diff --git a/libpkg/tests/parser_helper.cpp b/libpkg/tests/parser_helper.cpp index be6b6a6..0200c6f 100644 --- a/libpkg/tests/parser_helper.cpp +++ b/libpkg/tests/parser_helper.cpp @@ -33,7 +33,7 @@ void checkHarfbuzzPackage(const Package &pkg) CPPUNIT_ASSERT_MESSAGE("package info present"s, pkg.packageInfo); CPPUNIT_ASSERT_MESSAGE("no source archs present"s, pkg.sourceInfo->archs.empty()); CPPUNIT_ASSERT_EQUAL_MESSAGE("package arch"s, "Martchus <@.net>"s, pkg.packageInfo->packager); - CPPUNIT_ASSERT_EQUAL_MESSAGE("packer"s, "any"s, pkg.packageInfo->arch); + CPPUNIT_ASSERT_EQUAL_MESSAGE("packer"s, "any"s, pkg.arch); const vector makeDependencies = { Dependency("mingw-w64-configure"s), Dependency("mingw-w64-cairo"s), @@ -81,7 +81,7 @@ void checkAutoconfPackage(const Package &pkg) CPPUNIT_ASSERT_MESSAGE("package info present"s, pkg.packageInfo); CPPUNIT_ASSERT_MESSAGE("no source archs present"s, pkg.sourceInfo->archs.empty()); CPPUNIT_ASSERT_EQUAL_MESSAGE("packer"s, "Allan McRae "s, pkg.packageInfo->packager); - CPPUNIT_ASSERT_EQUAL_MESSAGE("package arch"s, "any"s, pkg.packageInfo->arch); + CPPUNIT_ASSERT_EQUAL_MESSAGE("package arch"s, "any"s, pkg.arch); CPPUNIT_ASSERT_EQUAL_MESSAGE("package file name"s, "autoconf-2.69-4-any.pkg.tar.xz"s, pkg.packageInfo->fileName); CPPUNIT_ASSERT_EQUAL_MESSAGE("package build date"s, 636089958990000000ul, pkg.packageInfo->buildDate.totalTicks()); CPPUNIT_ASSERT_EQUAL_MESSAGE("package files"s, 74ul, pkg.packageInfo->files.size()); diff --git a/librepomgr/buildactions/reloadlibrarydependencies.cpp b/librepomgr/buildactions/reloadlibrarydependencies.cpp index 925a662..ba70208 100644 --- a/librepomgr/buildactions/reloadlibrarydependencies.cpp +++ b/librepomgr/buildactions/reloadlibrarydependencies.cpp @@ -177,7 +177,7 @@ bool ReloadLibraryDependencies::addRelevantPackage(LibPkg::StorageID packageID, std::string path, url, cachePath; std::error_code ec; const auto &fileName = packageInfo->fileName; - const auto &arch = packageInfo->arch; + const auto &arch = package->arch; if (!db->localPkgDir.empty() && std::filesystem::file_size(cachePath = db->localPkgDir % '/' + fileName, ec) && !ec) { path = std::move(cachePath); } else if (std::filesystem::file_size(cachePath = m_cacheDir + fileName, ec) && !ec) { diff --git a/librepomgr/buildactions/repomanagement.cpp b/librepomgr/buildactions/repomanagement.cpp index 90dbf96..b400f8e 100644 --- a/librepomgr/buildactions/repomanagement.cpp +++ b/librepomgr/buildactions/repomanagement.cpp @@ -470,7 +470,7 @@ void CheckForProblems::run() .desc = "signature file for package \"" % package->packageInfo->fileName + "\" not present", .pkg = package->name }); } } - if (package->packageInfo->arch == "any" && (!package->libdepends.empty() || !package->libprovides.empty())) { + if (package->arch == "any" && (!package->libdepends.empty() || !package->libprovides.empty())) { auto crossOnly = true; for (const auto &libnames : { package->libdepends, package->libprovides }) { for (const auto &libname : libnames) { diff --git a/srv/static/js/packagerendering.js b/srv/static/js/packagerendering.js index fa1916a..e4c4733 100644 --- a/srv/static/js/packagerendering.js +++ b/srv/static/js/packagerendering.js @@ -69,7 +69,7 @@ export function renderDependency(mode, value) } const labelsWithoutBasics = ['Architecture', 'Repository', 'Description', 'Upstream URL', 'License(s)', 'Groups', 'Package size', 'Installed size', 'Packager', 'Build date', 'Dependencies', 'Optional dependencies', 'Make dependencies', 'Check dependencies', 'Provides', 'Replaces', 'Conflicts', 'Contained libraries', 'Needed libraries', 'Files']; -const fieldsWithoutBasics = ['packageInfo.arch', 'db', 'description', 'upstreamUrl', 'licenses', 'groups', 'packageInfo.size', 'installInfo.installedSize', 'packageInfo.packager', 'packageInfo.buildDate', 'dependencies', 'optionalDependencies', 'sourceInfo.makeDependencies', 'sourceInfo.checkDependencies', 'provides', 'replaces', 'conflicts', 'libprovides', 'libdepends', 'packageInfo.files']; +const fieldsWithoutBasics = ['arch', 'db', 'description', 'upstreamUrl', 'licenses', 'groups', 'packageInfo.size', 'installInfo.installedSize', 'packageInfo.packager', 'packageInfo.buildDate', 'dependencies', 'optionalDependencies', 'sourceInfo.makeDependencies', 'sourceInfo.checkDependencies', 'provides', 'replaces', 'conflicts', 'libprovides', 'libdepends', 'packageInfo.files']; const labelsWithBasics = ['Name', 'Version', ...labelsWithoutBasics]; const fieldsWithBasics = ['name', 'version', ...fieldsWithoutBasics];