depot_query: supplement url to scanned user

The 'scan' query for depot users used to list the names of depot users.
However, the URL and existence of a pubkey is useful to know when
assembling a GUI menu from this list.

Issue #4744
This commit is contained in:
Norman Feske 2023-01-25 13:59:56 +01:00 committed by Christian Helmuth
parent 06a53abe68
commit 866e84ec49

View File

@ -235,6 +235,8 @@ class Depot_query::Dependencies
struct Depot_query::Main
{
using Url = String<256>;
Env &_env;
Heap _heap { _env.ram(), _env.rm() };
@ -331,6 +333,7 @@ struct Depot_query::Main
void _query_blueprint(Directory::Path const &, Xml_generator &);
void _collect_source_dependencies(Archive::Path const &, Dependencies &, Recursion_limit);
void _collect_binary_dependencies(Archive::Path const &, Dependencies &, Recursion_limit);
void _scan_user(Archive::User const &, Xml_generator &);
void _query_user(Archive::User const &, Xml_generator &);
void _gen_index_node_rec(Xml_generator &, Xml_node const &, unsigned) const;
void _gen_index_for_arch(Xml_generator &, Xml_node const &) const;
@ -402,8 +405,7 @@ struct Depot_query::Main
query.for_each_sub_node("scan", [&] (Xml_node node) {
if (node.attribute_value("users", false)) {
for_each_subdir_name(_heap, _depot_dir, [&] (auto name) {
xml.node("user", [&] () {
xml.attribute("name", name); }); }); } }); });
_scan_user(name, xml); }); } }); });
_gen_versioned_report(_blueprint_reporter, version, [&] (Xml_generator &xml) {
query.for_each_sub_node("blueprint", [&] (Xml_node node) {
@ -690,6 +692,24 @@ void Depot_query::Main::_collect_binary_dependencies(Archive::Path const &path,
}
void Depot_query::Main::_scan_user(Archive::User const &user, Xml_generator &xml)
{
xml.node("user", [&] () {
Directory user_dir(_root, Directory::Path("depot/", user));
xml.attribute("name", user);
xml.attribute("known_pubkey", user_dir.file_exists("pubkey") ? "yes" : "no");
if (user_dir.file_exists("download")) {
File_content download(_heap, user_dir, "download", File_content::Limit{4*1024});
download.for_each_line<Url>([&] (Url const &url) {
xml.node("url", [&] () { xml.append_sanitized(url.string()); }); });
}
});
}
void Depot_query::Main::_query_user(Archive::User const &user, Xml_generator &xml)
{
xml.attribute("name", user);