make TDB2.undo non-public

The stats command calls an API to provide this information in a way that
will still be relevant for TaskChampion, while CmdInfo's access to the
data remains.  The TaskChampion interface for per-task hitsory is still
not ready.
This commit is contained in:
Dustin J. Mitchell 2022-04-01 22:15:55 +00:00 committed by Tomas Babej
parent 2f30bc8cbf
commit 4ebd0ffb39
4 changed files with 33 additions and 25 deletions

View file

@ -1266,6 +1266,13 @@ int TDB2::num_local_changes ()
return std::count_if(lines.begin(), lines.end(), [](const auto& line){ return line.front() == '{'; }); return std::count_if(lines.begin(), lines.end(), [](const auto& line){ return line.front() == '{'; });
} }
////////////////////////////////////////////////////////////////////////////////
int TDB2::num_reverts_possible ()
{
std::vector <std::string> lines = undo.get_lines ();
return std::count(lines.begin(), lines.end(), "---");
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
size_t TDB2::data_size () size_t TDB2::data_size ()
{ {

View file

@ -136,6 +136,7 @@ public:
bool read_only (); bool read_only ();
int num_local_changes (); int num_local_changes ();
int num_reverts_possible ();
size_t data_size (); size_t data_size ();
void clear (); void clear ();
@ -154,11 +155,12 @@ private:
public: public:
TF2 pending; TF2 pending;
TF2 completed; TF2 completed;
TF2 undo;
protected: protected:
friend class CmdSync; // CmdSync accesses the backlog directly friend class CmdSync; // CmdSync accesses the backlog directly
TF2 backlog; TF2 backlog;
friend class CmdInfo; // CmdInfo uses undo data to give history
TF2 undo;
private: private:
std::string _location; std::string _location;

View file

@ -65,9 +65,8 @@ int CmdStats::execute (std::string& output)
// Go get the file sizes. // Go get the file sizes.
size_t dataSize = Context::getContext ().tdb2.data_size (); size_t dataSize = Context::getContext ().tdb2.data_size ();
// Count the undo transactions. // Count the possible reverts.
std::vector <std::string> undoTxns = Context::getContext ().tdb2.undo.get_lines (); int undoCount = Context::getContext ().tdb2.num_reverts_possible ();
int undoCount = std::count(undoTxns.begin(), undoTxns.end(), "---");
// Count the backlog transactions. // Count the backlog transactions.
int numLocalChanges = Context::getContext ().tdb2.num_local_changes (); int numLocalChanges = Context::getContext ().tdb2.num_local_changes ();

View file

@ -60,40 +60,40 @@ int main (int, char**)
// Try reading an empty database. // Try reading an empty database.
std::vector <Task> pending = context.tdb2.pending.get_tasks (); std::vector <Task> pending = context.tdb2.pending.get_tasks ();
std::vector <Task> completed = context.tdb2.completed.get_tasks (); std::vector <Task> completed = context.tdb2.completed.get_tasks ();
std::vector <std::string> undo = context.tdb2.undo.get_lines (); int num_reverts_possible = context.tdb2.num_reverts_possible ();
int num_local_changes = context.tdb2.num_local_changes (); int num_local_changes = context.tdb2.num_local_changes ();
t.is ((int) pending.size (), 0, "TDB2 Read empty pending"); t.is ((int) pending.size (), 0, "TDB2 Read empty pending");
t.is ((int) completed.size (), 0, "TDB2 Read empty completed"); t.is ((int) completed.size (), 0, "TDB2 Read empty completed");
t.is ((int) undo.size (), 0, "TDB2 Read empty undo"); t.is ((int) num_reverts_possible, 0, "TDB2 Read empty undo");
t.is ((int) num_local_changes, 0, "TDB2 Read empty backlog"); t.is ((int) num_local_changes, 0, "TDB2 Read empty backlog");
// Add a task. // Add a task.
Task task (R"([description:"description" name:"value"])"); Task task (R"([description:"description" name:"value"])");
context.tdb2.add (task); context.tdb2.add (task);
pending = context.tdb2.pending.get_tasks (); pending = context.tdb2.pending.get_tasks ();
completed = context.tdb2.completed.get_tasks (); completed = context.tdb2.completed.get_tasks ();
undo = context.tdb2.undo.get_lines (); num_reverts_possible = context.tdb2.num_reverts_possible ();
num_local_changes = context.tdb2.num_local_changes (); num_local_changes = context.tdb2.num_local_changes ();
t.is ((int) pending.size (), 1, "TDB2 after add, 1 pending task"); t.is ((int) pending.size (), 1, "TDB2 after add, 1 pending task");
t.is ((int) completed.size (), 0, "TDB2 after add, 0 completed tasks"); t.is ((int) completed.size (), 0, "TDB2 after add, 0 completed tasks");
t.is ((int) undo.size (), 3, "TDB2 after add, 3 undo lines"); t.is ((int) num_reverts_possible, 3, "TDB2 after add, 3 undo lines");
t.is ((int) num_local_changes, 1, "TDB2 after add, 1 backlog task"); t.is ((int) num_local_changes, 1, "TDB2 after add, 1 backlog task");
task.set ("description", "This is a test"); task.set ("description", "This is a test");
context.tdb2.modify (task); context.tdb2.modify (task);
pending = context.tdb2.pending.get_tasks (); pending = context.tdb2.pending.get_tasks ();
completed = context.tdb2.completed.get_tasks (); completed = context.tdb2.completed.get_tasks ();
undo = context.tdb2.undo.get_lines (); num_reverts_possible = context.tdb2.num_reverts_possible ();
num_local_changes = context.tdb2.num_local_changes (); num_local_changes = context.tdb2.num_local_changes ();
t.is ((int) pending.size (), 1, "TDB2 after add, 1 pending task"); t.is ((int) pending.size (), 1, "TDB2 after add, 1 pending task");
t.is ((int) completed.size (), 0, "TDB2 after add, 0 completed tasks"); t.is ((int) completed.size (), 0, "TDB2 after add, 0 completed tasks");
t.is ((int) undo.size (), 7, "TDB2 after add, 7 undo lines"); t.is ((int) num_reverts_possible, 7, "TDB2 after add, 7 undo lines");
t.is ((int) num_local_changes, 2, "TDB2 after add, 2 backlog task"); t.is ((int) num_local_changes, 2, "TDB2 after add, 2 backlog task");
context.tdb2.commit (); context.tdb2.commit ();