diff --git a/src/commands/CmdInfo.cpp b/src/commands/CmdInfo.cpp index 04d8e494d..efcda3294 100644 --- a/src/commands/CmdInfo.cpp +++ b/src/commands/CmdInfo.cpp @@ -392,7 +392,7 @@ int CmdInfo::execute (std::string& output) Task before (previous.substr (4)); Task after (current.substr (4)); - journal.set (row, 1, taskInfoDifferences (before, after)); + journal.set (row, 1, taskInfoDifferences (before, after, dateformat)); // calculate the total active time if (before.get ("start") == "" diff --git a/src/feedback.cpp b/src/feedback.cpp index feb68fe2e..9e72c36c0 100644 --- a/src/feedback.cpp +++ b/src/feedback.cpp @@ -168,7 +168,7 @@ std::string taskDifferences (const Task& before, const Task& after) } //////////////////////////////////////////////////////////////////////////////// -std::string taskInfoDifferences (const Task& before, const Task& after) +std::string taskInfoDifferences (const Task& before, const Task& after, const std::string& dateformat) { // Attributes are all there is, so figure the different attribute names // between before and after. @@ -232,7 +232,7 @@ std::string taskInfoDifferences (const Task& before, const Task& after) else out << format (STRING_FEEDBACK_ATT_WAS_SET, ucFirst (*name), - renderAttribute (*name, after.get (*name))) + renderAttribute (*name, after.get (*name), dateformat)) << "\n"; } @@ -264,8 +264,8 @@ std::string taskInfoDifferences (const Task& before, const Task& after) else out << format (STRING_FEEDBACK_ATT_WAS_MOD, ucFirst (*name), - renderAttribute (*name, before.get (*name)), - renderAttribute (*name, after.get (*name))) + renderAttribute (*name, before.get (*name), dateformat), + renderAttribute (*name, after.get (*name), dateformat)) << "\n"; } @@ -278,7 +278,7 @@ std::string taskInfoDifferences (const Task& before, const Task& after) } //////////////////////////////////////////////////////////////////////////////// -std::string renderAttribute (const std::string& name, const std::string& value) +std::string renderAttribute (const std::string& name, const std::string& value, const std::string& format /* = "" */) { Column* col = context.columns[name]; if (col && @@ -286,7 +286,14 @@ std::string renderAttribute (const std::string& name, const std::string& value) value != "") { Date d ((time_t)strtol (value.c_str (), NULL, 10)); - return d.toString (context.config.get ("dateformat")); + if (format == "") + { + return d.toString (context.config.get ("dateformat")); + } + else + { + return d.toString (format); + } } return value; diff --git a/src/main.h b/src/main.h index 4df2cb4df..f43ad6503 100644 --- a/src/main.h +++ b/src/main.h @@ -69,8 +69,8 @@ void dependencyChainOnModify (Task&, Task&); // feedback.cpp bool taskDiff (const Task&, const Task&); std::string taskDifferences (const Task&, const Task&); -std::string taskInfoDifferences (const Task&, const Task&); -std::string renderAttribute (const std::string&, const std::string&); +std::string taskInfoDifferences (const Task&, const Task&, const std::string&); +std::string renderAttribute (const std::string&, const std::string&, const std::string& format = ""); void feedback_affected (const std::string&); void feedback_affected (const std::string&, int); void feedback_affected (const std::string&, const Task&); diff --git a/test/bug.986.t b/test/bug.986.t new file mode 100755 index 000000000..b6e38bcd1 --- /dev/null +++ b/test/bug.986.t @@ -0,0 +1,73 @@ +#! /usr/bin/perl +################################################################################ +## 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 +## +################################################################################ + +use strict; +use warnings; +use Test::More tests => 6; + +# Create the rc file. +if (open my $fh, '>', 'bug.rc') +{ + print $fh "data.location=.\n", + "verbose=nothing\n"; + close $fh; + ok (-r 'bug.rc', 'Created bug.rc'); +} + +# Bug 986 - 'task info' does not format date using dateformat.report +# Rely on the assumption that the default date format is 'm/d/Y' + +# Create one task (with a creation date) and one journal entry (with a +# timestamp and a date inside the entry) +qx{../src/task rc:bug.rc add test}; +qx{../src/task rc:bug.rc test start}; + +# Test that report.info.dateformat has precedence over dateformat.report and +# dateformat and that no other format is applied +my $output = qx{../src/task rc:bug.rc test info rc.dateformat:m/d/Y rc.dateformat.report:m/d/Y rc.report.info.dateformat:__}; +like ($output, qr/__/ms, 'Date formatted according to report.info.dateformat'); +unlike ($output, qr/[0-9]*\/[0-9]*\/20[0-9]*/ms, 'No date is incorrectly formatted'); + +# Similar for dateformat.report (no need to check that another format is applied again) +$output = qx{../src/task rc:bug.rc test info rc.dateformat:m/d/Y rc.dateformat.report:__ rc.report.info.dateformat:}; +like ($output, qr/__/ms, 'Date formatted according to dateformat.report'); + +# Similar for dateformat +$output = qx{../src/task rc:bug.rc test info rc.dateformat:__ rc.dateformat.report: rc.report.info.dateformat:}; +like ($output, qr/__/ms, 'Date formatted according to dateformat'); + +### Cleanup. +unlink qw(pending.data completed.data undo.data backlog.data synch.key bug.rc); +ok (! -r 'pending.data' && + ! -r 'completed.data' && + ! -r 'undo.data' && + ! -r 'backlog.data' && + ! -r 'synch.key' && + ! -r 'bug.rc', 'Cleanup'); + +exit 0;