mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
Feature
- New 'modified' attribute, which contains the most recent modification date, if a modification has occurred.
This commit is contained in:
parent
8d8bd653fa
commit
bb167b2275
12 changed files with 139 additions and 4 deletions
|
@ -16,6 +16,8 @@ Features
|
||||||
+ The 'diagnostics' command now reports libuuid details.
|
+ The 'diagnostics' command now reports libuuid details.
|
||||||
+ New characters for parsing and formating dates ('n', 's' and 'v').
|
+ New characters for parsing and formating dates ('n', 's' and 'v').
|
||||||
+ Virtual tags.
|
+ Virtual tags.
|
||||||
|
+ New 'modified' attribute, which contains the most recent modification date,
|
||||||
|
if a modification has occurred.
|
||||||
|
|
||||||
Bugs
|
Bugs
|
||||||
+ Fixed bug #1031, which kept expanding aliases after the '--' operator (thanks
|
+ Fixed bug #1031, which kept expanding aliases after the '--' operator (thanks
|
||||||
|
|
6
NEWS
6
NEWS
|
@ -3,8 +3,10 @@ New Features in taskwarrior 2.2.0
|
||||||
|
|
||||||
- Bash autocompletion now works with aliases.
|
- Bash autocompletion now works with aliases.
|
||||||
- Virtual tags provide a tag query interface to more complex states.
|
- Virtual tags provide a tag query interface to more complex states.
|
||||||
- Deprectated 'fg' and 'bg' attributes removed. Any residual use of those
|
- Deprecated 'fg' and 'bg' attributes removed. Any residual use of those will
|
||||||
will appear as orphaned UDAs.
|
appear as orphaned UDAs.
|
||||||
|
- Tasks now have a 'modified' attribute, which indicates the last time, if at
|
||||||
|
all, that they were modified.
|
||||||
|
|
||||||
New commands in taskwarrior 2.2.0
|
New commands in taskwarrior 2.2.0
|
||||||
|
|
||||||
|
|
|
@ -121,7 +121,11 @@ Shows all tasks matching the filter, including parents of recurring tasks.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B task <filter> blocked
|
.B task <filter> blocked
|
||||||
Shows all tasks matching the filter, that have dependencies on other tasks.
|
Shows all tasks matching the filter, that are currently blocked by other tasks.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B task <filter> blocking
|
||||||
|
Shows all tasks matching the filter, that block other tasks.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B task <filter> burndown.daily
|
.B task <filter> burndown.daily
|
||||||
|
@ -281,7 +285,8 @@ Shows all recurring tasks matching the filter.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B task <filter> unblocked
|
.B task <filter> unblocked
|
||||||
Shows all tasks that do not have dependencies, matching the filter.
|
Shows all tasks that are not currently blocked by other tasks, matching the
|
||||||
|
filter.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B task <filter> waiting
|
.B task <filter> waiting
|
||||||
|
|
|
@ -577,6 +577,9 @@ void TDB2::modify (Task& task)
|
||||||
// Ensure the task is consistent, and provide defaults if necessary.
|
// Ensure the task is consistent, and provide defaults if necessary.
|
||||||
task.validate (false);
|
task.validate (false);
|
||||||
|
|
||||||
|
// All modified tasks are timestamped.
|
||||||
|
task.setModified ();
|
||||||
|
|
||||||
// Find task, overwrite it.
|
// Find task, overwrite it.
|
||||||
Task original;
|
Task original;
|
||||||
get (task.get ("uuid"), original);
|
get (task.get ("uuid"), original);
|
||||||
|
|
|
@ -218,6 +218,14 @@ void Task::setStart ()
|
||||||
recalc_urgency = true;
|
recalc_urgency = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Task::setModified ()
|
||||||
|
{
|
||||||
|
char now[16];
|
||||||
|
sprintf (now, "%u", (unsigned int) time (NULL));
|
||||||
|
set ("modified", now);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
bool Task::has (const std::string& name) const
|
bool Task::has (const std::string& name) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -69,6 +69,7 @@ public:
|
||||||
void setEntry ();
|
void setEntry ();
|
||||||
void setEnd ();
|
void setEnd ();
|
||||||
void setStart ();
|
void setStart ();
|
||||||
|
void setModified ();
|
||||||
|
|
||||||
bool has (const std::string&) const;
|
bool has (const std::string&) const;
|
||||||
std::vector <std::string> all ();
|
std::vector <std::string> all ();
|
||||||
|
|
|
@ -15,6 +15,7 @@ set (columns_SRCS Column.cpp Column.h
|
||||||
ColID.cpp ColID.h
|
ColID.cpp ColID.h
|
||||||
ColIMask.cpp ColIMask.h
|
ColIMask.cpp ColIMask.h
|
||||||
ColMask.cpp ColMask.h
|
ColMask.cpp ColMask.h
|
||||||
|
ColModified.cpp ColModified.h
|
||||||
ColParent.cpp ColParent.h
|
ColParent.cpp ColParent.h
|
||||||
ColPriority.cpp ColPriority.h
|
ColPriority.cpp ColPriority.h
|
||||||
ColProject.cpp ColProject.h
|
ColProject.cpp ColProject.h
|
||||||
|
|
51
src/columns/ColModified.cpp
Normal file
51
src/columns/ColModified.cpp
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// taskwarrior - a command line task list manager.
|
||||||
|
//
|
||||||
|
// Copyright 2006-2012, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// http://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#define L10N // Localization complete.
|
||||||
|
|
||||||
|
#include <ColModified.h>
|
||||||
|
#include <i18n.h>
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
ColumnModified::ColumnModified ()
|
||||||
|
{
|
||||||
|
_name = "modified";
|
||||||
|
_label = STRING_COLUMN_LABEL_MOD;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
ColumnModified::~ColumnModified ()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
bool ColumnModified::validate (std::string& value)
|
||||||
|
{
|
||||||
|
return ColumnDate::validate (value);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
44
src/columns/ColModified.h
Normal file
44
src/columns/ColModified.h
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// taskwarrior - a command line task list manager.
|
||||||
|
//
|
||||||
|
// Copyright 2006-2012, Paul Beckingham, Federico Hernandez.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
//
|
||||||
|
// http://www.opensource.org/licenses/mit-license.php
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDED_COLMODIFIED
|
||||||
|
#define INCLUDED_COLMODIFIED
|
||||||
|
#define L10N // Localization complete.
|
||||||
|
|
||||||
|
#include <ColDate.h>
|
||||||
|
|
||||||
|
class ColumnModified : public ColumnDate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ColumnModified ();
|
||||||
|
~ColumnModified ();
|
||||||
|
|
||||||
|
bool validate (std::string&);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
|
@ -37,6 +37,7 @@
|
||||||
#include <ColID.h>
|
#include <ColID.h>
|
||||||
#include <ColIMask.h>
|
#include <ColIMask.h>
|
||||||
#include <ColMask.h>
|
#include <ColMask.h>
|
||||||
|
#include <ColModified.h>
|
||||||
#include <ColParent.h>
|
#include <ColParent.h>
|
||||||
#include <ColPriority.h>
|
#include <ColPriority.h>
|
||||||
#include <ColProject.h>
|
#include <ColProject.h>
|
||||||
|
@ -87,6 +88,7 @@ Column* Column::factory (const std::string& name, const std::string& report)
|
||||||
else if (column_name == "id") c = new ColumnID ();
|
else if (column_name == "id") c = new ColumnID ();
|
||||||
else if (column_name == "imask") c = new ColumnIMask ();
|
else if (column_name == "imask") c = new ColumnIMask ();
|
||||||
else if (column_name == "mask") c = new ColumnMask ();
|
else if (column_name == "mask") c = new ColumnMask ();
|
||||||
|
else if (column_name == "modified") c = new ColumnModified ();
|
||||||
else if (column_name == "parent") c = new ColumnParent ();
|
else if (column_name == "parent") c = new ColumnParent ();
|
||||||
else if (column_name == "priority") c = new ColumnPriority ();
|
else if (column_name == "priority") c = new ColumnPriority ();
|
||||||
else if (column_name == "project") c = new ColumnProject ();
|
else if (column_name == "project") c = new ColumnProject ();
|
||||||
|
@ -129,6 +131,7 @@ void Column::factory (std::map <std::string, Column*>& all)
|
||||||
c = new ColumnID (); all[c->_name] = c;
|
c = new ColumnID (); all[c->_name] = c;
|
||||||
c = new ColumnIMask (); all[c->_name] = c;
|
c = new ColumnIMask (); all[c->_name] = c;
|
||||||
c = new ColumnMask (); all[c->_name] = c;
|
c = new ColumnMask (); all[c->_name] = c;
|
||||||
|
c = new ColumnModified (); all[c->_name] = c;
|
||||||
c = new ColumnParent (); all[c->_name] = c;
|
c = new ColumnParent (); all[c->_name] = c;
|
||||||
c = new ColumnPriority (); all[c->_name] = c;
|
c = new ColumnPriority (); all[c->_name] = c;
|
||||||
c = new ColumnProject (); all[c->_name] = c;
|
c = new ColumnProject (); all[c->_name] = c;
|
||||||
|
|
|
@ -305,6 +305,19 @@ int CmdInfo::execute (std::string& output)
|
||||||
view.set (row, 0, STRING_COLUMN_LABEL_URGENCY);
|
view.set (row, 0, STRING_COLUMN_LABEL_URGENCY);
|
||||||
view.set (row, 1, trimLeft (format (task->urgency (), 4, 4)));
|
view.set (row, 1, trimLeft (format (task->urgency (), 4, 4)));
|
||||||
|
|
||||||
|
// modified
|
||||||
|
if (task->has ("modified"))
|
||||||
|
{
|
||||||
|
row = view.addRow ();
|
||||||
|
view.set (row, 0, STRING_CMD_INFO_MODIFIED);
|
||||||
|
|
||||||
|
Date mod (task->get_date ("modified"));
|
||||||
|
|
||||||
|
std::string age = Duration (now - mod).format ();
|
||||||
|
view.set (row, 1, Date (task->get_date ("modified")).toString (dateformat) +
|
||||||
|
" (" + age + ")");
|
||||||
|
}
|
||||||
|
|
||||||
// Show any UDAs
|
// Show any UDAs
|
||||||
std::vector <std::string> all = task->all ();
|
std::vector <std::string> all = task->all ();
|
||||||
std::vector <std::string>::iterator att;
|
std::vector <std::string>::iterator att;
|
||||||
|
|
|
@ -141,6 +141,7 @@
|
||||||
#define STRING_COLUMN_LABEL_ENTERED "Entered"
|
#define STRING_COLUMN_LABEL_ENTERED "Entered"
|
||||||
#define STRING_COLUMN_LABEL_COUNT "Count"
|
#define STRING_COLUMN_LABEL_COUNT "Count"
|
||||||
#define STRING_COLUMN_LABEL_COMPLETE "Completed"
|
#define STRING_COLUMN_LABEL_COMPLETE "Completed"
|
||||||
|
#define STRING_COLUMN_LABEL_MOD "Modified"
|
||||||
#define STRING_COLUMN_LABEL_ADDED "Added"
|
#define STRING_COLUMN_LABEL_ADDED "Added"
|
||||||
#define STRING_COLUMN_LABEL_AGE "Age"
|
#define STRING_COLUMN_LABEL_AGE "Age"
|
||||||
#define STRING_COLUMN_LABEL_ID "ID"
|
#define STRING_COLUMN_LABEL_ID "ID"
|
||||||
|
@ -236,6 +237,7 @@
|
||||||
#define STRING_CMD_INFO_UNTIL "Until"
|
#define STRING_CMD_INFO_UNTIL "Until"
|
||||||
#define STRING_CMD_INFO_MODIFICATION "Modification"
|
#define STRING_CMD_INFO_MODIFICATION "Modification"
|
||||||
#define STRING_CMD_INFO_TOTAL_ACTIVE "Total active time"
|
#define STRING_CMD_INFO_TOTAL_ACTIVE "Total active time"
|
||||||
|
#define STRING_CMD_INFO_MODIFIED "Last modified"
|
||||||
#define STRING_CMD_UNDO_USAGE "Reverts the most recent change to a task"
|
#define STRING_CMD_UNDO_USAGE "Reverts the most recent change to a task"
|
||||||
#define STRING_CMD_UNDO_MODS "The undo command does not allow further task modification."
|
#define STRING_CMD_UNDO_MODS "The undo command does not allow further task modification."
|
||||||
#define STRING_CMD_STATS_USAGE "Shows task database statistics"
|
#define STRING_CMD_STATS_USAGE "Shows task database statistics"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue