mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
TDB2
- Full implementation of TDB2::add, which includes pending/completed, undo and backlog. - Removed obsolete TF2::commitUndo, which is no longer necessary. - Added File::truncate method, to allow a TDB2 shortcut.
This commit is contained in:
parent
02df3853f7
commit
fb6dc5058f
4 changed files with 69 additions and 71 deletions
10
src/File.cpp
10
src/File.cpp
|
@ -280,6 +280,16 @@ void File::append (const std::vector <std::string>& lines)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void File::truncate ()
|
||||||
|
{
|
||||||
|
if (!fh)
|
||||||
|
open ();
|
||||||
|
|
||||||
|
if (fh)
|
||||||
|
ftruncate (h, 0);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// S_IFMT 0170000 type of file
|
// S_IFMT 0170000 type of file
|
||||||
// S_IFIFO 0010000 named pipe (fifo)
|
// S_IFIFO 0010000 named pipe (fifo)
|
||||||
|
|
|
@ -65,6 +65,8 @@ public:
|
||||||
void append (const std::string&);
|
void append (const std::string&);
|
||||||
void append (const std::vector <std::string>&);
|
void append (const std::vector <std::string>&);
|
||||||
|
|
||||||
|
void truncate ();
|
||||||
|
|
||||||
virtual mode_t mode ();
|
virtual mode_t mode ();
|
||||||
virtual size_t size () const;
|
virtual size_t size () const;
|
||||||
virtual time_t mtime () const;
|
virtual time_t mtime () const;
|
||||||
|
|
117
src/TDB2.cpp
117
src/TDB2.cpp
|
@ -28,6 +28,7 @@
|
||||||
#include <iostream> // TODO Remove.
|
#include <iostream> // TODO Remove.
|
||||||
#include <Context.h>
|
#include <Context.h>
|
||||||
#include <Color.h>
|
#include <Color.h>
|
||||||
|
#include <Date.h>
|
||||||
#include <text.h>
|
#include <text.h>
|
||||||
#include <TDB2.h>
|
#include <TDB2.h>
|
||||||
|
|
||||||
|
@ -186,81 +187,41 @@ void TF2::commit ()
|
||||||
|
|
||||||
_added_lines.clear ();
|
_added_lines.clear ();
|
||||||
_file.close ();
|
_file.close ();
|
||||||
|
_dirty = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TODO _file.truncate ();
|
if (_file.open ())
|
||||||
// TODO only write out _tasks, because any deltas have already been applied.
|
{
|
||||||
// TODO append _added_lines.
|
// Truncate the file and rewrite.
|
||||||
|
_file.truncate ();
|
||||||
|
|
||||||
|
// only write out _tasks, because any deltas have already been applied.
|
||||||
|
std::vector <Task>::iterator task;
|
||||||
|
for (task = _tasks.begin ();
|
||||||
|
task != _tasks.end ();
|
||||||
|
++task)
|
||||||
|
{
|
||||||
|
_file.append (task->composeF4 ());
|
||||||
}
|
}
|
||||||
|
|
||||||
_dirty = false;
|
// Write out all the added lines.
|
||||||
|
std::vector <std::string>::iterator line;
|
||||||
|
for (line = _added_lines.begin ();
|
||||||
|
line != _added_lines.end ();
|
||||||
|
++line)
|
||||||
|
{
|
||||||
|
_file.append (*line);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// --------------------------- old implementation -------------------------
|
|
||||||
/*
|
|
||||||
// Load the lowest form, to allow
|
|
||||||
if (_dirty)
|
|
||||||
{
|
|
||||||
load_contents ();
|
|
||||||
|
|
||||||
if (_modified_tasks.size ())
|
|
||||||
{
|
|
||||||
std::map <std::string, Task> modified;
|
|
||||||
std::vector <Task>::iterator it;
|
|
||||||
for (it = _modified_tasks.begin (); it != _modified_tasks.end (); ++it)
|
|
||||||
modified[it->get ("uuid")] = *it;
|
|
||||||
|
|
||||||
// for (it = _
|
|
||||||
|
|
||||||
_modified_tasks.clear ();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_added_tasks.size ())
|
|
||||||
{
|
|
||||||
std::vector <Task>::iterator it;
|
|
||||||
for (it = _added_tasks.begin (); it != _added_tasks.end (); ++it)
|
|
||||||
_lines.push_back (it->composeF4 ());
|
|
||||||
|
|
||||||
_added_tasks.clear ();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_added_lines.size ())
|
|
||||||
{
|
|
||||||
//_lines += _added_lines;
|
|
||||||
_added_lines.clear ();
|
_added_lines.clear ();
|
||||||
}
|
_file.close ();
|
||||||
|
|
||||||
// TODO This clobbers minimal case.
|
|
||||||
|
|
||||||
_contents = ""; // TODO Verify no resize.
|
|
||||||
join (_contents, "\n", _lines);
|
|
||||||
_file.write (_contents);
|
|
||||||
|
|
||||||
_dirty = false;
|
_dirty = false;
|
||||||
}
|
}
|
||||||
*/
|
}
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
}
|
||||||
void TF2::commitUndo ()
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
for each _added_task
|
|
||||||
fprintf (file,
|
|
||||||
"time %u\nnew %s---\n",
|
|
||||||
(unsigned int) time (NULL),
|
|
||||||
after.composeF4 ().c_str ());
|
|
||||||
|
|
||||||
for each _modified_task
|
|
||||||
fprintf (file,
|
|
||||||
"time %u\nold %snew %s---\n",
|
|
||||||
(unsigned int) time (NULL),
|
|
||||||
before.composeF4 ().c_str (),
|
|
||||||
after.composeF4 ().c_str ());
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -470,6 +431,7 @@ void TDB2::add (const Task& task)
|
||||||
if (!verifyUniqueUUID (task.get ("uuid")))
|
if (!verifyUniqueUUID (task.get ("uuid")))
|
||||||
throw format ("Cannot add task because the uuid '{1}' is not unique.", task.get ("uuid"));
|
throw format ("Cannot add task because the uuid '{1}' is not unique.", task.get ("uuid"));
|
||||||
|
|
||||||
|
// Add new task to either pending or completed.
|
||||||
std::string status = task.get ("status");
|
std::string status = task.get ("status");
|
||||||
if (status == "completed" ||
|
if (status == "completed" ||
|
||||||
status == "deleted")
|
status == "deleted")
|
||||||
|
@ -477,7 +439,15 @@ void TDB2::add (const Task& task)
|
||||||
else
|
else
|
||||||
pending.add_task (task);
|
pending.add_task (task);
|
||||||
|
|
||||||
undo.add_task (task);
|
// Add undo data lines:
|
||||||
|
// time <time>
|
||||||
|
// new <task>
|
||||||
|
// ---
|
||||||
|
undo.add_line ("time " + Date ().toEpochString () + "\n");
|
||||||
|
undo.add_line ("new " + task.composeF4 ());
|
||||||
|
undo.add_line ("---\n");
|
||||||
|
|
||||||
|
// Add task to backlog.
|
||||||
backlog.add_task (task);
|
backlog.add_task (task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -486,6 +456,8 @@ void TDB2::modify (const Task& task)
|
||||||
{
|
{
|
||||||
// std::cout << "# TDB2::modify\n";
|
// std::cout << "# TDB2::modify\n";
|
||||||
|
|
||||||
|
// Update task in either completed or deleted.
|
||||||
|
// TODO Find task, overwrite it.
|
||||||
std::string status = task.get ("status");
|
std::string status = task.get ("status");
|
||||||
if (status == "completed" ||
|
if (status == "completed" ||
|
||||||
status == "deleted")
|
status == "deleted")
|
||||||
|
@ -493,6 +465,19 @@ void TDB2::modify (const Task& task)
|
||||||
else
|
else
|
||||||
pending.modify_task (task);
|
pending.modify_task (task);
|
||||||
|
|
||||||
|
// TODO Add undo data lines:
|
||||||
|
// time <time>
|
||||||
|
// old <task>
|
||||||
|
// new <task>
|
||||||
|
// ---
|
||||||
|
/*
|
||||||
|
undo.add_line ("time " + format (time (NULL)) + "\n");
|
||||||
|
undo.add_line ("old " + original.composeF4 ());
|
||||||
|
undo.add_line ("new " + task.composeF4 ());
|
||||||
|
undo.add_line ("---\n");
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Add modified task to backlog.
|
||||||
backlog.modify_task (task);
|
backlog.modify_task (task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -504,7 +489,7 @@ void TDB2::commit ()
|
||||||
|
|
||||||
pending.commit ();
|
pending.commit ();
|
||||||
completed.commit ();
|
completed.commit ();
|
||||||
undo.commitUndo ();
|
undo.commit ();
|
||||||
backlog.commit ();
|
backlog.commit ();
|
||||||
synch_key.commit ();
|
synch_key.commit ();
|
||||||
|
|
||||||
|
@ -516,6 +501,8 @@ void TDB2::synch ()
|
||||||
{
|
{
|
||||||
context.timer_synch.start ();
|
context.timer_synch.start ();
|
||||||
|
|
||||||
|
// TODO Need stub here.
|
||||||
|
|
||||||
context.timer_synch.stop ();
|
context.timer_synch.stop ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,6 @@ public:
|
||||||
void add_line (const std::string&);
|
void add_line (const std::string&);
|
||||||
void clear_lines ();
|
void clear_lines ();
|
||||||
void commit ();
|
void commit ();
|
||||||
void commitUndo ();
|
|
||||||
|
|
||||||
void load_tasks ();
|
void load_tasks ();
|
||||||
void load_lines ();
|
void load_lines ();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue