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.
|
||||
+ New characters for parsing and formating dates ('n', 's' and 'v').
|
||||
+ Virtual tags.
|
||||
+ New 'modified' attribute, which contains the most recent modification date,
|
||||
if a modification has occurred.
|
||||
|
||||
Bugs
|
||||
+ 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.
|
||||
- Virtual tags provide a tag query interface to more complex states.
|
||||
- Deprectated 'fg' and 'bg' attributes removed. Any residual use of those
|
||||
will appear as orphaned UDAs.
|
||||
- Deprecated 'fg' and 'bg' attributes removed. Any residual use of those will
|
||||
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
|
||||
|
||||
|
|
|
@ -121,7 +121,11 @@ Shows all tasks matching the filter, including parents of recurring tasks.
|
|||
|
||||
.TP
|
||||
.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
|
||||
.B task <filter> burndown.daily
|
||||
|
@ -281,7 +285,8 @@ Shows all recurring tasks matching the filter.
|
|||
|
||||
.TP
|
||||
.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
|
||||
.B task <filter> waiting
|
||||
|
|
|
@ -577,6 +577,9 @@ void TDB2::modify (Task& task)
|
|||
// Ensure the task is consistent, and provide defaults if necessary.
|
||||
task.validate (false);
|
||||
|
||||
// All modified tasks are timestamped.
|
||||
task.setModified ();
|
||||
|
||||
// Find task, overwrite it.
|
||||
Task original;
|
||||
get (task.get ("uuid"), original);
|
||||
|
|
|
@ -218,6 +218,14 @@ void Task::setStart ()
|
|||
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
|
||||
{
|
||||
|
|
|
@ -69,6 +69,7 @@ public:
|
|||
void setEntry ();
|
||||
void setEnd ();
|
||||
void setStart ();
|
||||
void setModified ();
|
||||
|
||||
bool has (const std::string&) const;
|
||||
std::vector <std::string> all ();
|
||||
|
|
|
@ -15,6 +15,7 @@ set (columns_SRCS Column.cpp Column.h
|
|||
ColID.cpp ColID.h
|
||||
ColIMask.cpp ColIMask.h
|
||||
ColMask.cpp ColMask.h
|
||||
ColModified.cpp ColModified.h
|
||||
ColParent.cpp ColParent.h
|
||||
ColPriority.cpp ColPriority.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 <ColIMask.h>
|
||||
#include <ColMask.h>
|
||||
#include <ColModified.h>
|
||||
#include <ColParent.h>
|
||||
#include <ColPriority.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 == "imask") c = new ColumnIMask ();
|
||||
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 == "priority") c = new ColumnPriority ();
|
||||
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 ColumnIMask (); 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 ColumnPriority (); 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, 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
|
||||
std::vector <std::string> all = task->all ();
|
||||
std::vector <std::string>::iterator att;
|
||||
|
|
|
@ -141,6 +141,7 @@
|
|||
#define STRING_COLUMN_LABEL_ENTERED "Entered"
|
||||
#define STRING_COLUMN_LABEL_COUNT "Count"
|
||||
#define STRING_COLUMN_LABEL_COMPLETE "Completed"
|
||||
#define STRING_COLUMN_LABEL_MOD "Modified"
|
||||
#define STRING_COLUMN_LABEL_ADDED "Added"
|
||||
#define STRING_COLUMN_LABEL_AGE "Age"
|
||||
#define STRING_COLUMN_LABEL_ID "ID"
|
||||
|
@ -236,6 +237,7 @@
|
|||
#define STRING_CMD_INFO_UNTIL "Until"
|
||||
#define STRING_CMD_INFO_MODIFICATION "Modification"
|
||||
#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_MODS "The undo command does not allow further task modification."
|
||||
#define STRING_CMD_STATS_USAGE "Shows task database statistics"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue