diff --git a/ChangeLog b/ChangeLog index b1bfa5c98..09bb79074 100644 --- a/ChangeLog +++ b/ChangeLog @@ -57,6 +57,7 @@ Bugs + Fixed bug #1065, where CmdShow issued messages in incorrect situations. + Partially fixed #1083, which showed 'task 0 ...' when modifying a non- pending task (thanks to Aikido Guy). + + Fixed bug #1091, allowing filters to use 'urgency.over:4.5'. + Fixed bug #1110, which did not treat 'status:Completed' the same as 'status:completed' (thanks to Aikido Guy). + Fixed bug #1123, which caused the undo of a 'log' command to corrupt the data diff --git a/src/A3.cpp b/src/A3.cpp index 4a7175df0..7c8df9d89 100644 --- a/src/A3.cpp +++ b/src/A3.cpp @@ -97,7 +97,7 @@ static struct { "_hastag_", 9, 'b', 0, 'l'}, // +tag [Pseudo-op] { "_notag_", 9, 'b', 0, 'l'}, // -tag [Pseudo-op] -// { "-", 15, 'u', 1, 'r' }, // Unary minus + { "-", 15, 'u', 1, 'r' }, // Unary minus { "*", 13, 'b', 1, 'l' }, // Multiplication { "/", 13, 'b', 1, 'l' }, // Division // { "%", 13, 'b', 1, 'l' }, // Modulus diff --git a/src/E9.cpp b/src/E9.cpp index 4d19a5b17..241b51be5 100644 --- a/src/E9.cpp +++ b/src/E9.cpp @@ -337,6 +337,32 @@ void E9::operator_lt (Arg& result, Arg& left, Arg& right) : "false"; } } + else if (left._type == Arg::type_duration || + right._type == Arg::type_duration) + { + if (left._value == "" || + right._value == "") + result._value = "false"; + else + { + Duration left_duration (left._value); + Duration right_duration (right._value); + + result._value = (left_duration < right_duration) + ? "true" + : "false"; + } + } + else if (left._type == Arg::type_number || + right._type == Arg::type_number) + { + float left_number = strtof (left._value.c_str (), NULL); + float right_number = strtof (right._value.c_str (), NULL); + + result._value = (left_number < right_number) + ? "true" + : "false"; + } else { result._value = (left._value < right._value) @@ -376,6 +402,32 @@ void E9::operator_lte (Arg& result, Arg& left, Arg& right) : "false"; } } + else if (left._type == Arg::type_duration || + right._type == Arg::type_duration) + { + if (left._value == "" || + right._value == "") + result._value = "false"; + else + { + Duration left_duration (left._value); + Duration right_duration (right._value); + + result._value = (left_duration <= right_duration) + ? "true" + : "false"; + } + } + else if (left._type == Arg::type_number || + right._type == Arg::type_number) + { + float left_number = strtof (left._value.c_str (), NULL); + float right_number = strtof (right._value.c_str (), NULL); + + result._value = (left_number <= right_number) + ? "true" + : "false"; + } else { result._value = (left._value <= right._value) @@ -415,6 +467,32 @@ void E9::operator_gte (Arg& result, Arg& left, Arg& right) : "false"; } } + else if (left._type == Arg::type_duration || + right._type == Arg::type_duration) + { + if (left._value == "" || + right._value == "") + result._value = "false"; + else + { + Duration left_duration (left._value); + Duration right_duration (right._value); + + result._value = (left_duration >= right_duration) + ? "true" + : "false"; + } + } + else if (left._type == Arg::type_number || + right._type == Arg::type_number) + { + float left_number = strtof (left._value.c_str (), NULL); + float right_number = strtof (right._value.c_str (), NULL); + + result._value = (left_number >= right_number) + ? "true" + : "false"; + } else { result._value = (left._value >= right._value) @@ -453,6 +531,32 @@ void E9::operator_gt (Arg& result, Arg& left, Arg& right) : "false"; } } + else if (left._type == Arg::type_duration || + right._type == Arg::type_duration) + { + if (left._value == "" || + right._value == "") + result._value = "false"; + else + { + Duration left_duration (left._value); + Duration right_duration (right._value); + + result._value = result._value = (left_duration > right_duration) + ? "true" + : "false"; + } + } + else if (left._type == Arg::type_number || + right._type == Arg::type_number) + { + float left_number = strtof (left._value.c_str (), NULL); + float right_number = strtof (right._value.c_str (), NULL); + + result._value = (left_number > right_number) + ? "true" + : "false"; + } else { result._value = (left._value > right._value) diff --git a/test/op_gt.t b/test/op_gt.t index e231828f9..3133b5e5c 100755 --- a/test/op_gt.t +++ b/test/op_gt.t @@ -28,7 +28,7 @@ use strict; use warnings; -use Test::More tests => 22; +use Test::More tests => 26; # Create the rc file. if (open my $fh, '>', 'op.rc') @@ -76,6 +76,12 @@ like ($output, qr/two/, 'ls description > t --> two'); like ($output, qr/three/, 'ls description > t --> three'); unlike ($output, qr/four/, 'ls description > t --> !four'); +$output = qx{../src/task rc:op.rc 'urgency > 10.0' ls 2>&1}; +like ($output, qr/one/, 'ls urgency > 10 --> one'); +like ($output, qr/two/, 'ls urgency > 10 --> two'); +unlike ($output, qr/three/, 'ls urgency > 10 --> !three'); +unlike ($output, qr/four/, 'ls urgency > 10 --> !four'); + # Cleanup. unlink qw(pending.data completed.data undo.data backlog.data synch.key op.rc); ok (! -r 'pending.data' && diff --git a/test/op_gte.t b/test/op_gte.t index 6eb84b3c4..03375331f 100755 --- a/test/op_gte.t +++ b/test/op_gte.t @@ -28,7 +28,7 @@ use strict; use warnings; -use Test::More tests => 10; +use Test::More tests => 14; # Create the rc file. if (open my $fh, '>', 'op.rc') @@ -58,6 +58,12 @@ like ($output, qr/two/, 'ls description >= t --> two'); like ($output, qr/three/, 'ls description >= t --> three'); unlike ($output, qr/four/, 'ls description >= t --> !four'); +$output = qx{../src/task rc:op.rc 'urgency >= 2.0' ls 2>&1}; +like ($output, qr/one/, 'ls urgency >= 2.0 --> one'); +like ($output, qr/two/, 'ls urgency >= 2.0 --> two'); +unlike ($output, qr/three/, 'ls urgency >= 2.0 --> !three'); +unlike ($output, qr/four/, 'ls urgency >= 2.0 --> !four'); + # Cleanup. unlink qw(pending.data completed.data undo.data backlog.data synch.key op.rc); ok (! -r 'pending.data' && diff --git a/test/op_lt.t b/test/op_lt.t index 1760ce9d5..8c51271fa 100755 --- a/test/op_lt.t +++ b/test/op_lt.t @@ -28,7 +28,7 @@ use strict; use warnings; -use Test::More tests => 22; +use Test::More tests => 26; # Create the rc file. if (open my $fh, '>', 'op.rc') @@ -76,6 +76,12 @@ unlike ($output, qr/two/, 'ls description < t --> !two'); unlike ($output, qr/three/, 'ls description < t --> !three'); like ($output, qr/four/, 'ls description < t --> four'); +$output = qx{../src/task rc:op.rc 'urgency < 10.0' ls 2>&1}; +unlike ($output, qr/one/, 'ls description < 10 --> !one'); +unlike ($output, qr/two/, 'ls description < 10 --> !two'); +like ($output, qr/three/, 'ls description < 10 --> three'); +like ($output, qr/four/, 'ls description < 10 --> four'); + # Cleanup. unlink qw(pending.data completed.data undo.data backlog.data synch.key op.rc); ok (! -r 'pending.data' && diff --git a/test/op_lte.t b/test/op_lte.t index e6f214bb1..678771edd 100755 --- a/test/op_lte.t +++ b/test/op_lte.t @@ -28,7 +28,7 @@ use strict; use warnings; -use Test::More tests => 10; +use Test::More tests => 14; # Create the rc file. if (open my $fh, '>', 'op.rc') @@ -58,6 +58,12 @@ unlike ($output, qr/two/, 'ls description <= t --> !two'); unlike ($output, qr/three/, 'ls description <= t --> !three'); like ($output, qr/four/, 'ls description <= t --> four'); +$output = qx{../src/task rc:op.rc 'urgency <= 2.0' ls 2>&1}; +unlike ($output, qr/one/, 'ls urgency <= 2.0 --> !one'); +unlike ($output, qr/two/, 'ls urgency <= 2.0 --> !two'); +like ($output, qr/three/, 'ls urgency <= 2.0 --> three'); +like ($output, qr/four/, 'ls urgency <= 2.0 --> four'); + # Cleanup. unlink qw(pending.data completed.data undo.data backlog.data synch.key op.rc); ok (! -r 'pending.data' &&