From 6bf43a6d4f6ef066df4c627ea1672043b9337a54 Mon Sep 17 00:00:00 2001 From: Antoine Prouvost Date: Mon, 8 Jan 2024 17:52:17 +0100 Subject: [PATCH] Change PackageInfo types (#3113) Use NoArchType in PackageInfo --- libmamba/include/mamba/specs/package_info.hpp | 10 ++++++---- libmamba/src/core/pool.cpp | 2 +- libmamba/src/core/repo.cpp | 6 +++++- libmamba/src/specs/package_info.cpp | 15 ++++----------- libmamba/src/specs/platform.cpp | 9 +++++++++ libmambapy/tests/test_specs.py | 5 +++-- 6 files changed, 28 insertions(+), 19 deletions(-) diff --git a/libmamba/include/mamba/specs/package_info.hpp b/libmamba/include/mamba/specs/package_info.hpp index ee1c7581f1..e6a5903f86 100644 --- a/libmamba/include/mamba/specs/package_info.hpp +++ b/libmamba/include/mamba/specs/package_info.hpp @@ -12,6 +12,8 @@ #include +#include "mamba/specs/platform.hpp" + namespace mamba::specs { class PackageInfo @@ -21,7 +23,6 @@ namespace mamba::specs std::string name = {}; std::string version = {}; std::string build_string = {}; - std::string noarch = {}; std::size_t build_number = 0; /** * Could contain "conda-forge", "conda-forge/linux-64", or a url. @@ -33,15 +34,16 @@ namespace mamba::specs std::string subdir = {}; std::string filename = {}; std::string license = {}; - std::size_t size = 0; - std::size_t timestamp = 0; std::string md5 = {}; std::string sha256 = {}; + std::string signatures = {}; std::vector track_features = {}; std::vector depends = {}; std::vector constrains = {}; - std::string signatures = {}; std::vector defaulted_keys = {}; + NoArchType noarch = NoArchType::No; + std::size_t size = 0; + std::size_t timestamp = 0; PackageInfo() = default; explicit PackageInfo(std::string name); diff --git a/libmamba/src/core/pool.cpp b/libmamba/src/core/pool.cpp index 10ea526551..c3681cf3cf 100644 --- a/libmamba/src/core/pool.cpp +++ b/libmamba/src/core/pool.cpp @@ -297,7 +297,7 @@ namespace mamba out.name = s.name(); out.version = s.version(); out.build_string = s.build_string(); - out.noarch = s.noarch(); + out.noarch = specs::noarch_parse(s.noarch()).value_or(specs::NoArchType::No); out.build_number = s.build_number(); out.channel = s.channel(); out.package_url = s.url(); diff --git a/libmamba/src/core/repo.cpp b/libmamba/src/core/repo.cpp index 71fcf5afd2..df7ea77d42 100644 --- a/libmamba/src/core/repo.cpp +++ b/libmamba/src/core/repo.cpp @@ -94,7 +94,11 @@ namespace mamba solv.set_name(pkg.name); solv.set_version(pkg.version); solv.set_build_string(pkg.build_string); - solv.set_noarch(pkg.noarch); + if (pkg.noarch != specs::NoArchType::No) + { + auto noarch = std::string(specs::noarch_name(pkg.noarch)); // SSO + solv.set_noarch(noarch); + } solv.set_build_number(pkg.build_number); solv.set_channel(pkg.channel); solv.set_url(pkg.package_url); diff --git a/libmamba/src/specs/package_info.cpp b/libmamba/src/specs/package_info.cpp index 0193882618..c098779d87 100644 --- a/libmamba/src/specs/package_info.cpp +++ b/libmamba/src/specs/package_info.cpp @@ -54,7 +54,7 @@ namespace mamba::specs j["timestamp"] = timestamp; j["build"] = build_string; j["build_number"] = build_number; - if (!noarch.empty()) + if (noarch != NoArchType::No) { j["noarch"] = noarch; } @@ -240,7 +240,7 @@ namespace mamba::specs j["build"] = pkg.build_string; j["build_string"] = pkg.build_string; j["build_number"] = pkg.build_number; - if (!pkg.noarch.empty()) + if (pkg.noarch != NoArchType::No) { j["noarch"] = pkg.noarch; } @@ -302,16 +302,9 @@ namespace mamba::specs } // add the noarch type if we know it (only known for installed packages) - if (j.contains("noarch")) + if (auto it = j.find("noarch"); it != j.end()) { - if (j["noarch"].type() == nlohmann::json::value_t::boolean) - { - pkg.noarch = "generic_v1"; - } - else - { - pkg.noarch = j.value("noarch", ""); - } + pkg.noarch = *it; } pkg.depends = j.value("depends", std::vector()); diff --git a/libmamba/src/specs/platform.cpp b/libmamba/src/specs/platform.cpp index b2712ef2f5..d0d5cc727c 100644 --- a/libmamba/src/specs/platform.cpp +++ b/libmamba/src/specs/platform.cpp @@ -134,11 +134,20 @@ namespace mamba::specs { j = noarch_name(noarch); } + else + { + j = nullptr; + } } void from_json(const nlohmann::json& j, NoArchType& noarch) { // Legacy deserilization + if (j.is_null()) + { + noarch = NoArchType::No; + return; + } if (j.is_boolean()) { noarch = j.get() ? NoArchType::Generic : NoArchType::No; diff --git a/libmambapy/tests/test_specs.py b/libmambapy/tests/test_specs.py index 4125016274..981577ea45 100644 --- a/libmambapy/tests/test_specs.py +++ b/libmambapy/tests/test_specs.py @@ -687,6 +687,7 @@ def test_VersionSpec(): def test_PackageInfo(): PackageInfo = libmambapy.specs.PackageInfo + NoArchType = libmambapy.specs.NoArchType pkg = PackageInfo(name="pkg", version="1.0", build_string="bld", build_number=2) @@ -707,8 +708,8 @@ def test_PackageInfo(): assert pkg.build_string == "mybld" pkg.build_number = 5 assert pkg.build_number == 5 - pkg.noarch = "generic" - assert pkg.noarch == "generic" + pkg.noarch = "Generic" + assert pkg.noarch == NoArchType.Generic pkg.channel = "conda-forge" assert pkg.channel == "conda-forge" pkg.package_url = "https://repo.mamba.pm/conda-forge/linux-64/foo-4.0-mybld.conda"