From c155176098d66eaf34a2e019f7dc9a266c8dfc8c Mon Sep 17 00:00:00 2001 From: Martchus Date: Wed, 8 Jun 2022 22:44:58 +0200 Subject: [PATCH] Fix missing build date in package search * Avoid using buildDate of PackageInfo in favor of the same field in PackageBase * PackageInfo::buildDate should be removed on the next breaking change * Do not really use the deprecated attribute because it is still used by (de)serialization code until it is removed for good --- cli/main.cpp | 10 +++++----- libpkg/data/package.cpp | 3 +-- libpkg/data/package.h | 2 +- libpkg/parser/package.cpp | 5 +++-- libpkg/tests/parser_helper.cpp | 2 +- librepomgr/buildactions/reloadlibrarydependencies.cpp | 2 +- srv/static/js/packagerendering.js | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/cli/main.cpp b/cli/main.cpp index 170f2c8..b5c5339 100644 --- a/cli/main.cpp +++ b/cli/main.cpp @@ -100,8 +100,8 @@ static void printPackageSearchResults(const LibRepoMgr::WebClient::Response::bod t.add_row({ "Arch", "Repo", "Name", "Version", "Description", "Build date" }); for (const auto &[db, package, packageID] : packages) { const auto &dbInfo = std::get(db); - t.add_row({ package->packageInfo ? package->arch : dbInfo.arch, dbInfo.name, package->name, package->version, package->description, - package->packageInfo && !package->buildDate.isNull() ? package->packageInfo->buildDate.toString() : "?" }); + t.add_row({ !package->arch.empty() ? package->arch : dbInfo.arch, dbInfo.name, package->name, package->version, package->description, + !package->buildDate.isNull() ? package->buildDate.toString() : "?" }); } t.row(0).format().font_align(tabulate::FontAlign::center).font_style({ tabulate::FontStyle::bold }); configureColumnWidths(t); @@ -154,9 +154,9 @@ static void printPackageDetails(const LibRepoMgr::WebClient::Response::body_type if (!pkg->packageInfo->packager.empty()) { t.add_row({ "Packager", pkg->packageInfo->packager }); } - if (!pkg->packageInfo->buildDate.isNull()) { - t.add_row({ "Packager", pkg->packageInfo->buildDate.toString() }); - } + } + if (!pkg->buildDate.isNull()) { + t.add_row({ "Build date", pkg->buildDate.toString() }); } t.add_row({ "Dependencies", formatDependencies(pkg->dependencies) }); t.add_row({ "Optional dependencies", formatDependencies(pkg->optionalDependencies) }); diff --git a/libpkg/data/package.cpp b/libpkg/data/package.cpp index 1ecfd00..b4d32de 100644 --- a/libpkg/data/package.cpp +++ b/libpkg/data/package.cpp @@ -377,8 +377,7 @@ bool Package::addDepsAndProvidesFromOtherPackage(const Package &otherPackage, bo if (!force && ((otherPackage.origin != PackageOrigin::PackageContents && otherPackage.origin != PackageOrigin::CustomSource) || version != otherPackage.version - || !(!packageInfo || packageInfo->buildDate.isNull() - || (otherPackage.packageInfo && packageInfo->buildDate == otherPackage.packageInfo->buildDate)))) { + || !(!packageInfo || buildDate.isNull() || (otherPackage.packageInfo && buildDate == otherPackage.buildDate)))) { return false; } diff --git a/libpkg/data/package.h b/libpkg/data/package.h index d97464f..ed4dbd5 100644 --- a/libpkg/data/package.h +++ b/libpkg/data/package.h @@ -228,7 +228,7 @@ struct LIBPKG_EXPORT PackageInfo : public ReflectiveRapidJSON::JsonSerializable< public ReflectiveRapidJSON::BinarySerializable { std::string fileName; std::vector files; - CppUtilities::DateTime buildDate; + /* [[deprecated("redundant with field in PackageBase; remove at some point")]] */ CppUtilities::DateTime buildDate; std::string packager; std::string md5; std::string sha256; diff --git a/libpkg/parser/package.cpp b/libpkg/parser/package.cpp index 8debead..5a48223 100644 --- a/libpkg/parser/package.cpp +++ b/libpkg/parser/package.cpp @@ -285,8 +285,9 @@ static void addPackageInfo(Package &package, PackageVersion &version, const char } else_if_field("builddate") { + package.buildDate = DateTime::fromTimeStampGmt(stringToNumber(valueString)); ensure_pkg_info; - package.packageInfo->buildDate = DateTime::fromTimeStampGmt(stringToNumber(valueString)); + package.packageInfo->buildDate = package.buildDate; } else_if_field("packager") { @@ -355,7 +356,7 @@ static void addPackageDescription(Package &package, const char *field, size_t fi } else_if_field("BUILDDATE") { - package.packageInfo->buildDate = DateTime::fromTimeStampGmt(stringToNumber(valueString)); + package.buildDate = package.packageInfo->buildDate = DateTime::fromTimeStampGmt(stringToNumber(valueString)); } else_if_field("INSTALLDATE") { diff --git a/libpkg/tests/parser_helper.cpp b/libpkg/tests/parser_helper.cpp index 0200c6f..7ccff5e 100644 --- a/libpkg/tests/parser_helper.cpp +++ b/libpkg/tests/parser_helper.cpp @@ -83,7 +83,7 @@ void checkAutoconfPackage(const Package &pkg) CPPUNIT_ASSERT_EQUAL_MESSAGE("packer"s, "Allan McRae "s, pkg.packageInfo->packager); 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 build date"s, 636089958990000000ul, pkg.buildDate.totalTicks()); CPPUNIT_ASSERT_EQUAL_MESSAGE("package files"s, 74ul, pkg.packageInfo->files.size()); CPPUNIT_ASSERT_EQUAL("usr/"s, pkg.packageInfo->files.front()); const vector makeDependencies = { Dependency("help2man"s) }; diff --git a/librepomgr/buildactions/reloadlibrarydependencies.cpp b/librepomgr/buildactions/reloadlibrarydependencies.cpp index ba70208..51f953e 100644 --- a/librepomgr/buildactions/reloadlibrarydependencies.cpp +++ b/librepomgr/buildactions/reloadlibrarydependencies.cpp @@ -229,7 +229,7 @@ bool ReloadLibraryDependencies::addRelevantPackage(LibPkg::StorageID packageID, // -> assign certain fields which are used by addDepsAndProvidesFromOtherPackage() to check whether the packages are matching relevantPkg.info.version = package->version; relevantPkg.info.packageInfo = std::make_optional(); - relevantPkg.info.packageInfo->buildDate = package->packageInfo->buildDate; + relevantPkg.info.buildDate = package->buildDate; // -> gather source info such as make and check dependencies as well relevantPkg.info.sourceInfo = std::make_optional(); ++m_remainingPackages; diff --git a/srv/static/js/packagerendering.js b/srv/static/js/packagerendering.js index e4c4733..78df584 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 = ['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', 'buildDate', 'dependencies', 'optionalDependencies', 'sourceInfo.makeDependencies', 'sourceInfo.checkDependencies', 'provides', 'replaces', 'conflicts', 'libprovides', 'libdepends', 'packageInfo.files']; const labelsWithBasics = ['Name', 'Version', ...labelsWithoutBasics]; const fieldsWithBasics = ['name', 'version', ...fieldsWithoutBasics];