Fixed zst check in MSubdirData (#2661)

This commit is contained in:
Johan Mabille 2023-07-08 00:11:34 +02:00 committed by GitHub
parent 3b6e10159f
commit c46647a880
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 32 additions and 11 deletions

View File

@ -61,7 +61,7 @@ namespace mamba
void serialize_to_stream(std::ostream& out) const; void serialize_to_stream(std::ostream& out) const;
void serialize_to_stream_tiny(std::ostream& out) const; void serialize_to_stream_tiny(std::ostream& out) const;
bool check_zst(const Channel* channel); bool check_zst(ChannelContext& channel_context, const Channel* channel);
}; };
@ -75,6 +75,7 @@ namespace mamba
public: public:
static expected_t<MSubdirData> create( static expected_t<MSubdirData> create(
ChannelContext& channel_context,
const Channel& channel, const Channel& channel,
const std::string& platform, const std::string& platform,
const std::string& url, const std::string& url,
@ -112,6 +113,7 @@ namespace mamba
private: private:
MSubdirData( MSubdirData(
ChannelContext& channel_context,
const Channel& channel, const Channel& channel,
const std::string& platform, const std::string& platform,
const std::string& url, const std::string& url,
@ -119,7 +121,7 @@ namespace mamba
const std::string& repodata_fn = "repodata.json" const std::string& repodata_fn = "repodata.json"
); );
bool load(MultiPackageCache& caches); bool load(MultiPackageCache& caches, ChannelContext& channel_context);
void check_repodata_existence(); void check_repodata_existence();
void create_target(); void create_target();
std::size_t get_cache_control_max_age(const std::string& val); std::size_t get_cache_control_max_age(const std::string& val);

View File

@ -67,7 +67,14 @@ namespace mamba
{ {
for (auto& [platform, url] : channel->platform_urls(true)) for (auto& [platform, url] : channel->platform_urls(true))
{ {
auto sdires = MSubdirData::create(*channel, platform, url, package_caches, "repodata.json"); auto sdires = MSubdirData::create(
pool.channel_context(),
*channel,
platform,
url,
package_caches,
"repodata.json"
);
if (!sdires.has_value()) if (!sdires.has_value())
{ {
error_list.push_back(std::move(sdires).error()); error_list.push_back(std::move(sdires).error());

View File

@ -49,7 +49,7 @@ namespace mamba
out << j.dump(); out << j.dump();
} }
bool subdir_metadata::check_zst(const Channel* channel) bool subdir_metadata::check_zst(ChannelContext& channel_context, const Channel* channel)
{ {
if (has_zst.has_value()) if (has_zst.has_value())
{ {
@ -61,7 +61,7 @@ namespace mamba
for (const auto& c : Context::instance().repodata_has_zst) for (const auto& c : Context::instance().repodata_has_zst)
{ {
if (contains(c, channel->location()) && contains(c, channel->name())) if (channel_context.make_channel(c) == *channel)
{ {
has_zst = { true, has_zst = { true,
std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()) }; std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()) };
@ -295,6 +295,7 @@ namespace mamba
} }
expected_t<MSubdirData> MSubdirData::create( expected_t<MSubdirData> MSubdirData::create(
ChannelContext& channel_context,
const Channel& channel, const Channel& channel,
const std::string& platform, const std::string& platform,
const std::string& url, const std::string& url,
@ -304,7 +305,7 @@ namespace mamba
{ {
try try
{ {
return MSubdirData(channel, platform, url, caches, repodata_fn); return MSubdirData(channel_context, channel, platform, url, caches, repodata_fn);
} }
catch (std::exception& e) catch (std::exception& e)
{ {
@ -320,6 +321,7 @@ namespace mamba
} }
MSubdirData::MSubdirData( MSubdirData::MSubdirData(
ChannelContext& channel_context,
const Channel& channel, const Channel& channel,
const std::string& platform, const std::string& platform,
const std::string& url, const std::string& url,
@ -338,7 +340,7 @@ namespace mamba
{ {
m_json_fn = cache_fn_url(m_repodata_url); m_json_fn = cache_fn_url(m_repodata_url);
m_solv_fn = m_json_fn.substr(0, m_json_fn.size() - 4) + "solv"; m_solv_fn = m_json_fn.substr(0, m_json_fn.size() - 4) + "solv";
load(caches); load(caches, channel_context);
} }
MSubdirData::MSubdirData(MSubdirData&& rhs) MSubdirData::MSubdirData(MSubdirData&& rhs)
@ -485,7 +487,7 @@ namespace mamba
} }
} }
bool MSubdirData::load(MultiPackageCache& caches) bool MSubdirData::load(MultiPackageCache& caches, ChannelContext& channel_context)
{ {
auto now = fs::file_time_type::clock::now(); auto now = fs::file_time_type::clock::now();
@ -601,7 +603,7 @@ namespace mamba
bool has_value = m_metadata.has_zst.has_value(); bool has_value = m_metadata.has_zst.has_value();
bool is_expired = m_metadata.has_zst.has_value() bool is_expired = m_metadata.has_zst.has_value()
&& m_metadata.has_zst.value().has_expired(); && m_metadata.has_zst.value().has_expired();
bool has_zst = m_metadata.check_zst(p_channel); bool has_zst = m_metadata.check_zst(channel_context, p_channel);
if (!has_zst && (is_expired || !has_value)) if (!has_zst && (is_expired || !has_value))
{ {
m_check_targets.push_back(std::make_unique<DownloadTarget>( m_check_targets.push_back(std::make_unique<DownloadTarget>(

View File

@ -314,7 +314,8 @@ namespace
{ {
for (auto& [platform, url] : chan->platform_urls(true)) for (auto& [platform, url] : chan->platform_urls(true))
{ {
auto sub_dir = expected_value_or_throw(MSubdirData::create(*chan, platform, url, cache) auto sub_dir = expected_value_or_throw(
MSubdirData::create(pool.channel_context(), *chan, platform, url, cache)
); );
dlist.add(sub_dir.target()); dlist.add(sub_dir.target());
sub_dirs.push_back(std::move(sub_dir)); sub_dirs.push_back(std::move(sub_dir));

View File

@ -24,6 +24,7 @@ namespace mamba
mamba::MultiDownloadTarget multi_dl; mamba::MultiDownloadTarget multi_dl;
mamba::MultiPackageCache pkg_cache({ "/tmp/" }); mamba::MultiPackageCache pkg_cache({ "/tmp/" });
mamba::MSubdirData cf = mamba::MSubdirData::create( mamba::MSubdirData cf = mamba::MSubdirData::create(
channel_context,
c, c,
"linux-64", "linux-64",
"file:///nonexistent/repodata.json", "file:///nonexistent/repodata.json",
@ -46,6 +47,7 @@ namespace mamba
mamba::MultiDownloadTarget multi_dl; mamba::MultiDownloadTarget multi_dl;
mamba::MultiPackageCache pkg_cache({ "/tmp/" }); mamba::MultiPackageCache pkg_cache({ "/tmp/" });
mamba::MSubdirData cf = mamba::MSubdirData::create( mamba::MSubdirData cf = mamba::MSubdirData::create(
channel_context,
c, c,
"noarch", "noarch",
"file:///nonexistent/repodata.json", "file:///nonexistent/repodata.json",

View File

@ -462,7 +462,14 @@ PYBIND11_MODULE(bindings, m)
MultiPackageCache& caches, MultiPackageCache& caches,
const std::string& repodata_fn) -> MSubdirData const std::string& repodata_fn) -> MSubdirData
{ {
auto sres = MSubdirData::create(channel, platform, url, caches, repodata_fn); auto sres = MSubdirData::create(
mambapy::singletons().channel_context,
channel,
platform,
url,
caches,
repodata_fn
);
return extract(std::move(sres)); return extract(std::move(sres));
} }
)) ))