- Fixed bug #1023, which applied default.project and default.priority during
  modification (thanks to Christoph Lange).
- Added unit tests.
- Added Christoph to the AUTHORS file.
This commit is contained in:
Paul Beckingham 2012-07-04 16:44:16 -04:00
parent d16f434899
commit b0b8bfe1d2
6 changed files with 80 additions and 6 deletions

View file

@ -144,4 +144,5 @@ suggestions:
Bruno Bigras Bruno Bigras
Hyde Stevenson Hyde Stevenson
Martin U Martin U
Christoph Lange

View file

@ -92,6 +92,8 @@ Bugs
that lack description or entry date (thanks to Nicholas Rabenau). that lack description or entry date (thanks to Nicholas Rabenau).
+ Fixed bug #1017, which exported invalid JSON when there were no tasks (thanks + Fixed bug #1017, which exported invalid JSON when there were no tasks (thanks
to Nicholas Rabenau). to Nicholas Rabenau).
+ Fixed bug #1023, which applied default.project and default.priority during
modification (thanks to Christoph Lange).
------ old releases ------------------------------ ------ old releases ------------------------------

View file

@ -477,7 +477,7 @@ void TDB2::add (Task& task)
void TDB2::modify (Task& task) 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 (); task.validate (false);
// Find task, overwrite it. // Find task, overwrite it.
Task original; Task original;

View file

@ -1066,7 +1066,7 @@ void Task::substitute (
// 2) To provide suitable warnings about odd states // 2) To provide suitable warnings about odd states
// 3) To generate errors when the inconsistencies are not fixable // 3) To generate errors when the inconsistencies are not fixable
// //
void Task::validate () void Task::validate (bool applyDefault /* = true */)
{ {
Task::status status = getStatus (); Task::status status = getStatus ();
@ -1105,7 +1105,7 @@ void Task::validate ()
setEnd (); setEnd ();
// Override with default.project, if not specified. // Override with default.project, if not specified.
if (! has ("project")) if (applyDefault && ! has ("project"))
{ {
std::string defaultProject = context.config.get ("default.project"); std::string defaultProject = context.config.get ("default.project");
if (defaultProject != "" && if (defaultProject != "" &&
@ -1114,7 +1114,7 @@ void Task::validate ()
} }
// Override with default.priority, if not specified. // Override with default.priority, if not specified.
if (get ("priority") == "") if (applyDefault && get ("priority") == "")
{ {
std::string defaultPriority = context.config.get ("default.priority"); std::string defaultPriority = context.config.get ("default.priority");
if (defaultPriority != "" && if (defaultPriority != "" &&
@ -1123,7 +1123,7 @@ void Task::validate ()
} }
// Override with default.due, if not specified. // Override with default.due, if not specified.
if (get ("due") == "") if (applyDefault && get ("due") == "")
{ {
std::string defaultDue = context.config.get ("default.due"); std::string defaultDue = context.config.get ("default.due");
if (defaultDue != "" && if (defaultDue != "" &&

View file

@ -102,7 +102,7 @@ public:
void substitute (const std::string&, const std::string&, bool); void substitute (const std::string&, const std::string&, bool);
void validate (); void validate (bool applyDefault = true);
float urgency_c () const; float urgency_c () const;
float urgency (); float urgency ();

71
test/bug.1023.t Executable file
View file

@ -0,0 +1,71 @@
#! /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 => 7;
# Create the rc file.
if (open my $fh, '>', 'bug.rc')
{
print $fh "data.location=.\n",
"default.project=home\n";
close $fh;
ok (-r 'bug.rc', 'Created bug.rc');
}
# Bug 1023: rc.default.project gets applied during modify, and should not.
qx{../src/task rc:bug.rc add foo project:garden 2>&1};
qx{../src/task rc:bug.rc add bar 2>&1};
qx{../src/task rc:bug.rc add baz rc.default.project= 2>&1};
my $output = qx{../src/task rc:bug.rc 1 info 2>&1};
like ($output, qr/Project\s*garden/, "default project not applied when otherwise specified.");
$output = qx{../src/task rc:bug.rc 2 info 2>&1};
like ($output, qr/Project\s*home/, "default project applied when blank.");
$output = qx{../src/task rc:bug.rc 3 modify +tag 2>&1};
unlike ($output, qr/Project\s*home/, "default project not applied on modification.");
qx{../src/task rc:bug.rc 1 modify project: 2>&1};
$output = qx{../src/task rc:bug.rc 1 info 2>&1};
unlike ($output, qr/Project\s*garden/, "default project not re-applied on attribute removal.");
unlike ($output, qr/Project\s*home/, "default project not re-applied on attribute removal.");
# 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;