Skip to content

Commit

Permalink
logging: Ensure -debug=0/none behaves consistently with -nodebug
Browse files Browse the repository at this point in the history
Previously, -nodebug cleared all prior -debug configurations in the
command line while allowing subsequent debug options to be applied.
However, -debug=0 and -debug=none completely disabled debugging,
even for categories specified afterward.

This commit ensures consistency by making -debug=0 and -debug=none
behave like -nodebug: they now clear previously set debug configurations
but do not disable debugging for categories specified later.

Co-Authored-By: Ryan Ofsky <[email protected]>
  • Loading branch information
danielabrozzoni and ryanofsky committed Feb 11, 2025
1 parent d39d521 commit a8fedb3
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 7 deletions.
3 changes: 3 additions & 0 deletions doc/release-notes-31767.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Logging
---
Passing -debug=0 or -debug=none now behaves like -nodebug: previously set debug categories will be cleared, but subsequent -debug options will still be applied.
16 changes: 9 additions & 7 deletions src/init/common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,15 +80,17 @@ util::Result<void> SetLoggingLevel(const ArgsManager& args)
util::Result<void> SetLoggingCategories(const ArgsManager& args)
{
if (args.IsArgSet("-debug")) {
// Special-case: if -debug=0/-nodebug is set, turn off debugging messages
const std::vector<std::string> categories = args.GetArgs("-debug");

if (std::none_of(categories.begin(), categories.end(),
[](std::string cat){return cat == "0" || cat == "none";})) {
for (const auto& cat : categories) {
if (!LogInstance().EnableCategory(cat)) {
return util::Error{strprintf(_("Unsupported logging category %s=%s."), "-debug", cat)};
}
// Special-case: Disregard any debugging categories appearing before -debug=0/none
const auto last_negated = std::find_if(categories.rbegin(), categories.rend(),
[](const std::string& cat) { return cat == "0" || cat == "none"; });

const auto categories_to_process = (last_negated == categories.rend()) ? categories : std::ranges::subrange(last_negated.base(), categories.end());

for (const auto& cat : categories_to_process) {
if (!LogInstance().EnableCategory(cat)) {
return util::Error{strprintf(_("Unsupported logging category %s=%s."), "-debug", cat)};
}
}
}
Expand Down

0 comments on commit a8fedb3

Please sign in to comment.