labels: allow restoring cache-map

E.g. with unexpected termination for mu it is possible that the
labels-cache (i.e., the one that is used for auto-completion) gets disconnected
from reality.

Add a --restore option to `mu label list` to restore the actual labels from the
labels seen in the store.
This commit is contained in:
Dirk-Jan C. Binnema
2025-09-02 21:08:54 +03:00
committed by Seth Ladygo
parent 76031d93d1
commit 124b371850
9 changed files with 83 additions and 17 deletions

View File

@ -113,11 +113,16 @@ label_clear(Mu::Store& store, const Options& opts)
}
static Result<void>
label_list(const Mu::Store& store, const Options& opts)
label_list(Mu::Store& store, const Options& opts)
{
const auto label_map{store.label_map()};
if (opts.label.restore) {
if (!opts.quiet)
mu_println("labels: restoring list from store...");
if (const auto res = store.restore_label_map(); !res)
return res;
}
for (const auto& [label, n]: label_map)
for (const auto& [label, n]: store.label_map())
if (opts.verbose)
mu_println("{}: {}", label, n);
else

View File

@ -528,6 +528,8 @@ sub_label(CLI::App& sub, Options& opts)
// list
[[maybe_unused]] auto list = sub.add_subcommand("list", "list labels in the store");
list->add_flag("--restore", opts.label.restore,
"Restore the label-list from the labels in store");
add_muhome_option(*list, opts);
// export

View File

@ -209,7 +209,9 @@ struct Options {
bool dry_run{}; /**< Merely print the messages that would be
* labeled without doing so */
StringVec delta_labels; /**< labels to add (+) or remove (-) */
bool read_only{}; /** do not require writable store */
bool read_only{}; /**< do not require writable store */
bool restore{}; /**< restore the labels list */
OptString file; /** file for import/export */