- Allows the 'projects' and 'tags' commands to be list all used
  projects/tags, not just the ones used in current pending tasks.
  Controlled by the 'list.all.projects' and 'list.all.tags' configuration
  variables (thanks to Dirk Deimeke).
- Added unit tests.
- Updated man pages.
This commit is contained in:
Paul Beckingham 2010-06-20 13:06:24 -04:00
parent 8572080677
commit 2c7552222a
6 changed files with 171 additions and 8 deletions

View file

@ -16,6 +16,10 @@
'task config' is now only used to set new configuration values.
+ Added feature #298, supporting a configurable number of future recurring
tasks that are generated.
+ Added feature #412, which allows the 'projects' and 'tags' commands to be
list all used projects/tags, not just the ones used in current pending tasks.
Controlled by the 'list.all.projects' and 'list.all.tags' configuration
variables (thanks to Dirk Deimeke).
+ Improvements to the man pages (thanks to T. Charles Yun).
+ Fixed bug #406 so that task now includes command aliases in the _commands
helper command used by shell completion scripts.

View file

@ -212,12 +212,24 @@ May be yes or no, and determines whether the tab completion scripts consider all
the project names you have used, or just the ones used in active tasks. The
default value is "no".
.TP
.B list.all.projects=yes
May be yes or no, and determines whether 'projects' command lists all the project
names you have used, or just the ones used in active tasks. The default value is
"no".
.TP
.B complete.all.tags=yes
May be yes or no, and determines whether the tab completion scripts consider all
the tag names you have used, or just the ones used in active tasks. The default
value is "no".
.TP
.B list.all.tags=yes
May be yes or no, and determines whether the 'tags' command lists all the tag
names you have used, or just the ones used in active tasks. The default value is
"no".
.TP
.B search.case.sensitive=yes
May be yes or no, and determines whether keyword lookup and substitutions on the

View file

@ -138,12 +138,14 @@ std::string Config::defaults =
"\n"
"_forcecolor=no # Forces color to be on, even for non TTY output\n"
"blanklines=true # Use more whitespace in output\n"
"complete.all.projects=no # Include old project names in 'projects' command\n" // TODO
"complete.all.tags=no # Include old tag names in 'tags' command\n" // TODO
"complete.all.projects=no # Include old project names in '_projects' command\n"
"complete.all.tags=no # Include old tag names in '_ags' command\n"
"list.all.projects=no # Include old project names in 'projects' command\n"
"list.all.tags=no # Include old tag names in 'tags' command\n"
"debug=no # Display diagnostics\n"
"hooks=off # Hook system master switch\n"
"fontunderline=yes # Uses underlines rather than -------\n"
"shell.prompt=task> # Prompt used by the shell command\n" // TODO
"shell.prompt=task> # Prompt used by the shell command\n"
"\n"
"# Import heuristics - alternate names for fields (comma-separated list of names)\n"
"#import.synonym.bg=?\n"

View file

@ -187,11 +187,15 @@ int handleProjects (std::string &outs)
if (context.hooks.trigger ("pre-projects-command"))
{
std::stringstream out;
context.filter.push_back (Att ("status", "pending"));
std::vector <Task> tasks;
context.tdb.lock (context.config.getBoolean ("locking"));
int quantity = context.tdb.loadPending (tasks, context.filter);
int quantity;
if (context.config.getBoolean ("list.all.projects"))
quantity = context.tdb.load (tasks, context.filter);
else
quantity = context.tdb.loadPending (tasks, context.filter);
context.tdb.commit ();
context.tdb.unlock ();
@ -318,11 +322,14 @@ int handleTags (std::string &outs)
{
std::stringstream out;
context.filter.push_back (Att ("status", "pending"));
std::vector <Task> tasks;
context.tdb.lock (context.config.getBoolean ("locking"));
int quantity = context.tdb.loadPending (tasks, context.filter);
int quantity = 0;
if (context.config.getBoolean ("list.all.tags"))
quantity += context.tdb.load (tasks, context.filter);
else
quantity += context.tdb.loadPending (tasks, context.filter);
context.tdb.commit ();
context.tdb.unlock ();

69
src/tests/list.all.projects.t Executable file
View file

@ -0,0 +1,69 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2010, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 10;
# Create the rc file.
if (open my $fh, '>', 'projects.rc')
{
print $fh "data.location=.\n";
close $fh;
ok (-r 'projects.rc', 'Created projects.rc');
}
# Create a data set of two tasks, with unique project names, one
# pending, one completed.
qx{../task rc:projects.rc add project:p1 one};
qx{../task rc:projects.rc add project:p2 two};
qx{../task rc:projects.rc done 1};
my $output = qx{../task rc:projects.rc ls};
unlike ($output, qr/p1/, 'p1 done');
like ($output, qr/p2/, 'p2 pending');
$output = qx{../task rc:projects.rc projects};
unlike ($output, qr/p1/, 'p1 done');
like ($output, qr/p2/, 'p2 pending');
$output = qx{../task rc:projects.rc rc.list.all.projects:yes projects};
like ($output, qr/p1/, 'p1 listed');
like ($output, qr/p2/, 'p2 listed');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'undo.data';
ok (!-r 'undo.data', 'Removed undo.data');
unlink 'projects.rc';
ok (!-r 'projects.rc', 'Removed projects.rc');
exit 0;

69
src/tests/list.all.tags.t Executable file
View file

@ -0,0 +1,69 @@
#! /usr/bin/perl
################################################################################
## task - a command line task list manager.
##
## Copyright 2006 - 2010, Paul Beckingham.
## All rights reserved.
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 2 of the License, or (at your option) any later
## version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, write to the
##
## Free Software Foundation, Inc.,
## 51 Franklin Street, Fifth Floor,
## Boston, MA
## 02110-1301
## USA
##
################################################################################
use strict;
use warnings;
use Test::More tests => 10;
# Create the rc file.
if (open my $fh, '>', 'tags.rc')
{
print $fh "data.location=.\n";
close $fh;
ok (-r 'tags.rc', 'Created tags.rc');
}
# Create a data set of two tasks, with unique project names, one
# pending, one completed.
qx{../task rc:tags.rc add +t1 one};
qx{../task rc:tags.rc add +t2 two};
qx{../task rc:tags.rc done 1};
my $output = qx{../task rc:tags.rc long};
unlike ($output, qr/t1/, 't1 done');
like ($output, qr/t2/, 't2 pending');
$output = qx{../task rc:tags.rc tags};
unlike ($output, qr/t1/, 't1 done');
like ($output, qr/t2/, 't2 pending');
$output = qx{../task rc:tags.rc rc.list.all.tags:yes tags};
like ($output, qr/t1/, 't1 listed');
like ($output, qr/t2/, 't2 listed');
# Cleanup.
unlink 'pending.data';
ok (!-r 'pending.data', 'Removed pending.data');
unlink 'undo.data';
ok (!-r 'undo.data', 'Removed undo.data');
unlink 'tags.rc';
ok (!-r 'tags.rc', 'Removed tags.rc');
exit 0;