Add some verbosity to scrubbing

This gives the user a primitive way to track progress for long
running Check & Repair actions by adding
--log gnc.engine.scrub=info to the command line options
This commit is contained in:
Geert Janssens 2015-02-23 00:29:06 +01:00
parent 208cf514f3
commit de8d4c801f
3 changed files with 51 additions and 12 deletions

View File

@ -283,8 +283,9 @@ xaccAccountTreeScrubImbalance (Account *acc)
void void
xaccAccountScrubImbalance (Account *acc) xaccAccountScrubImbalance (Account *acc)
{ {
GList *node; GList *node, *splits;
const char *str; const char *str;
gint split_count = 0, curr_split_no = 1;
if (!acc) return; if (!acc) return;
@ -292,14 +293,23 @@ xaccAccountScrubImbalance (Account *acc)
str = str ? str : "(null)"; str = str ? str : "(null)";
PINFO ("Looking for imbalance in account %s \n", str); PINFO ("Looking for imbalance in account %s \n", str);
for (node = xaccAccountGetSplitList(acc); node; node = node->next) splits = xaccAccountGetSplitList(acc);
split_count = g_list_length (splits);
for (node = splits; node; node = node->next)
{ {
Split *split = node->data; Split *split = node->data;
Transaction *trans = xaccSplitGetParent(split); Transaction *trans = xaccSplitGetParent(split);
PINFO("Start processing split %d of %d",
curr_split_no, split_count);
xaccTransScrubCurrency(trans); xaccTransScrubCurrency(trans);
xaccTransScrubImbalance (trans, gnc_account_get_root (acc), NULL); xaccTransScrubImbalance (trans, gnc_account_get_root (acc), NULL);
PINFO("Finished processing split %d of %d",
curr_split_no, split_count);
curr_split_no++;
} }
} }

View File

@ -41,7 +41,10 @@
#include "ScrubBusiness.h" #include "ScrubBusiness.h"
#include "Transaction.h" #include "Transaction.h"
static QofLogModule log_module = GNC_MOD_LOT; #undef G_LOG_DOMAIN
#define G_LOG_DOMAIN "gnc.engine.scrub"
static QofLogModule log_module = G_LOG_DOMAIN;
// A helper function that takes two splits. If the splits are of opposite sign // A helper function that takes two splits. If the splits are of opposite sign
// it reduces the biggest split to have the same value (but with opposite sign) // it reduces the biggest split to have the same value (but with opposite sign)
@ -465,22 +468,39 @@ void
gncScrubBusinessAccountLots (Account *acc) gncScrubBusinessAccountLots (Account *acc)
{ {
LotList *lots, *node; LotList *lots, *node;
gint lot_count = 0;
gint curr_lot_no = 1;
const gchar *str;
if (!acc) return; if (!acc) return;
if (FALSE == xaccAccountIsAPARType (xaccAccountGetType (acc))) return; if (FALSE == xaccAccountIsAPARType (xaccAccountGetType (acc))) return;
ENTER ("(acc=%s)", xaccAccountGetName(acc)); str = xaccAccountGetName(acc);
str = str ? str : "(null)";
ENTER ("(acc=%s)", str);
PINFO ("Cleaning up superfluous lot links in account %s \n", str);
xaccAccountBeginEdit(acc); xaccAccountBeginEdit(acc);
lots = xaccAccountGetLotList(acc); lots = xaccAccountGetLotList(acc);
lot_count = g_list_length (lots);
for (node = lots; node; node = node->next) for (node = lots; node; node = node->next)
{ {
GNCLot *lot = node->data; GNCLot *lot = node->data;
PINFO("Start processing lot %d of %d",
curr_lot_no, lot_count);
if (lot) if (lot)
gncScrubBusinessLot (lot); gncScrubBusinessLot (lot);
PINFO("Finished processing lot %d of %d",
curr_lot_no, lot_count);
curr_lot_no++;
} }
g_list_free(lots); g_list_free(lots);
xaccAccountCommitEdit(acc); xaccAccountCommitEdit(acc);
LEAVE ("(acc=%s)", xaccAccountGetName(acc)); LEAVE ("(acc=%s)", str);
} }
/* ============================================================== */ /* ============================================================== */

View File

@ -3736,10 +3736,8 @@ gnc_plugin_page_register_cmd_scrub_all (GtkAction *action,
GncPluginPageRegisterPrivate *priv; GncPluginPageRegisterPrivate *priv;
Query *query; Query *query;
Account *root; Account *root;
Transaction *trans; GList *node, *splits;
GNCLot *lot; gint split_count = 0, curr_split_no = 1;
Split *split;
GList *node;
g_return_if_fail(GNC_IS_PLUGIN_PAGE_REGISTER(plugin_page)); g_return_if_fail(GNC_IS_PLUGIN_PAGE_REGISTER(plugin_page));
@ -3756,10 +3754,17 @@ gnc_plugin_page_register_cmd_scrub_all (GtkAction *action,
gnc_suspend_gui_refresh(); gnc_suspend_gui_refresh();
root = gnc_get_current_root_account(); root = gnc_get_current_root_account();
for (node = qof_query_run(query); node; node = node->next) splits = qof_query_run(query);
split_count = g_list_length (splits);
for (node = splits; node; node = node->next)
{ {
split = node->data; GNCLot *lot;
trans = xaccSplitGetParent(split); Split *split = node->data;
Transaction *trans = xaccSplitGetParent(split);
PINFO("Start processing split %d of %d",
curr_split_no, split_count);
xaccTransScrubOrphans(trans); xaccTransScrubOrphans(trans);
xaccTransScrubImbalance(trans, root, NULL); xaccTransScrubImbalance(trans, root, NULL);
@ -3767,6 +3772,10 @@ gnc_plugin_page_register_cmd_scrub_all (GtkAction *action,
lot = xaccSplitGetLot (split); lot = xaccSplitGetLot (split);
if (lot && xaccAccountIsAPARType (xaccAccountGetType (xaccSplitGetAccount (split)))) if (lot && xaccAccountIsAPARType (xaccAccountGetType (xaccSplitGetAccount (split))))
gncScrubBusinessLot (lot); gncScrubBusinessLot (lot);
PINFO("Finished processing split %d of %d",
curr_split_no, split_count);
curr_split_no++;
} }
gnc_resume_gui_refresh(); gnc_resume_gui_refresh();