gnucash stable: [gnc-autoclear.cpp] restore abort explanation message
Christopher Lam
clam at code.gnucash.org
Sat Dec 6 18:45:04 EST 2025
Updated via https://github.com/Gnucash/gnucash/commit/2e3fd090 (commit)
from https://github.com/Gnucash/gnucash/commit/722a4555 (commit)
commit 2e3fd090ff76039a1d69ccbdb11361b7234df9de
Author: Christopher Lam <christopher.lck at gmail.com>
Date: Mon Dec 1 20:16:18 2025 +0800
[gnc-autoclear.cpp] restore abort explanation message
diff --git a/libgnucash/app-utils/gnc-autoclear.cpp b/libgnucash/app-utils/gnc-autoclear.cpp
index 11fd4d58a4..ae6eee4374 100644
--- a/libgnucash/app-utils/gnc-autoclear.cpp
+++ b/libgnucash/app-utils/gnc-autoclear.cpp
@@ -79,7 +79,7 @@ using SplitVec = std::vector<Split*>;
struct Solution
{
- bool abort = false;
+ std::optional<const char*> abort;
SplitVec splits;
};
@@ -124,7 +124,7 @@ subset_sum (SplitInfoVec::const_iterator iter,
DEBUG ("SOLUTION FOUND: %s%s", path_to_str (path),
solution.splits.empty() ? "" : " ABORT: AMBIGUOUS");
if (!solution.splits.empty())
- solution.abort = true;
+ solution.abort = "Cannot uniquely clear splits. Found multiple possibilities.";
else
{
solution.splits.resize (path.size());
@@ -140,7 +140,7 @@ subset_sum (SplitInfoVec::const_iterator iter,
if (monitor.should_abort())
{
DEBUG ("ABORT: timeout");
- solution.abort = true;
+ solution.abort = "Auto-clear exceeds allocated time";
return;
}
@@ -227,12 +227,17 @@ gnc_account_get_autoclear_splits (Account *account, gnc_numeric toclear_value,
DEBUG ("finished subset_sum in %f seconds", monitor.get_elapsed());
- if (solution.splits.empty() || solution.abort)
+ if (solution.splits.empty())
{
g_set_error (error, autoclear_quark, 1, "%s",
"The selected amount cannot be cleared.");
return nullptr;
}
+ else if (solution.abort)
+ {
+ g_set_error (error, autoclear_quark, 1, "%s", *solution.abort);
+ return nullptr;
+ }
return std::accumulate
(solution.splits.begin(), solution.splits.end(),
diff --git a/libgnucash/app-utils/test/test-autoclear.cpp b/libgnucash/app-utils/test/test-autoclear.cpp
index b9ee6d9a85..c21ba693ae 100644
--- a/libgnucash/app-utils/test/test-autoclear.cpp
+++ b/libgnucash/app-utils/test/test-autoclear.cpp
@@ -102,8 +102,8 @@ TestCase ambiguousTestCase = {
{ "Memo 03", -10, false },
},
.tests = {
- { -10, "The selected amount cannot be cleared." },
- { -20, "The selected amount cannot be cleared." },
+ { -10, "Cannot uniquely clear splits. Found multiple possibilities." },
+ { -20, "Cannot uniquely clear splits. Found multiple possibilities." },
// -30 can be cleared by returning all three -10 splits
{ -30, nullptr },
@@ -121,7 +121,7 @@ TestCase sequentialTestCase1 =
.tests = {
{ 1, "The selected amount cannot be cleared." },
{ 4, "The selected amount cannot be cleared." },
- { 5, "The selected amount cannot be cleared." },
+ { 5, "Cannot uniquely clear splits. Found multiple possibilities." },
{ 6, "The selected amount cannot be cleared." },
{ 9, "The selected amount cannot be cleared." },
{ 11, "The selected amount cannot be cleared." },
@@ -156,9 +156,9 @@ TestCase sequentialTestCase3 =
{ "Memo 04", 5, false },
},
.tests = {
- { 5, "The selected amount cannot be cleared." },
- { 7, "The selected amount cannot be cleared." },
- { 10, "The selected amount cannot be cleared." },
+ { 5, "Cannot uniquely clear splits. Found multiple possibilities." },
+ { 7, "Cannot uniquely clear splits. Found multiple possibilities." },
+ { 10, "Cannot uniquely clear splits. Found multiple possibilities." },
{ 2, nullptr },
{ 12, nullptr },
{ 15, nullptr },
Summary of changes:
libgnucash/app-utils/gnc-autoclear.cpp | 13 +++++++++----
libgnucash/app-utils/test/test-autoclear.cpp | 12 ++++++------
2 files changed, 15 insertions(+), 10 deletions(-)
More information about the gnucash-changes
mailing list