Fix day range for queries

In "--from a --to z", a is included in the range, z not. This is
non-intuitive and disagrees with the semantics of "to" in filter options
like --filter-start-to, where "to" (and "from") are used inclusively (as
opposed to "before" and "after"). It also has the effect that "--from
today --to tomorrow" has a range of 1 day, "--to z" a range of 0 days
(otherwise not allowed), and "--to today --days -1" is allowed and
displays yesterday!

The implementation has been fixed to agree with "inclusive" semantics.
Options --from and -days with negative range are allowed, while --to and
--days are disallowed also when the range is negative.

Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
This commit is contained in:
Lars Henriksen 2018-11-08 10:12:38 +01:00 committed by Lukas Fleischer
parent 4285e88593
commit 03880a82bf

View File

@ -249,7 +249,7 @@ date_arg_from_to(long from, long to, int add_line, const char *fmt_apt,
{
long date;
for (date = from; date < to; date = date_sec_change(date, 0, 1)) {
for (date = from; date <= to; date = date_sec_change(date, 0, 1)) {
day_store_items(date, 0);
if (day_item_count(0) == 0)
continue;
@ -713,18 +713,16 @@ int parse_args(int argc, char **argv)
goto cleanup;
}
EXIT_IF(to >= 0 && range > 0, _("cannot specify a range and an end date"));
EXIT_IF(from >= 0 && range < 0, _("cannot specify a negative range and a start date"));
EXIT_IF(to >= 0 && range, _("cannot specify a range and an end date"));
if (from == -1)
from = get_today();
if (to == -1)
to = date_sec_change(from, 0, 1);
to = from;
EXIT_IF(to < from, _("end date cannot come before start date"));
if (range > 0)
to = date_sec_change(from, 0, range);
to = date_sec_change(from, 0, range - 1);
else if (range < 0)
from = date_sec_change(to, 0, range);
from = date_sec_change(to, 0, range + 1);
io_init(cfile, datadir, confdir);
io_check_dir(path_ddir);