coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: suggested feautre: "date --debug" - print date parsing diagnostics


From: Bernhard Voelker
Subject: Re: suggested feautre: "date --debug" - print date parsing diagnostics
Date: Mon, 25 Apr 2016 08:18:39 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.1

On 04/25/2016 12:56 AM, Assaf Gordon wrote:
> From bbeaaa332d6be7c6cca991eb0a12feaf03b70962 Mon Sep 17 00:00:00 2001
> From: Assaf Gordon <address@hidden>
> Date: Thu, 11 Feb 2016 20:00:09 -0500
> Subject: [PATCH] date: add '--debug' option

Awesome work, thanks.

> * src/date.c: (main): add '--debug' option, enable debugging
>    in gnulib's parse-datetime.y module.

s/^[ ]*//
There's no need to indent consecutive lines in the commit message.

> * tests/misc/date.pl: repeat tests with '--debug' enable, ensure
>    no regression.

Likewise.

> * tests/misc/date-debug.sh: test output of '--debug' option.
> * tests/local.mk: add above test.
> * NEWS: mention new option.
> * doc/coreutils.texi: likewise.

It's not visible here that this change relies on new gnulib
functionality ... which is not yet committed and therefore
not yet pulled in into coreutils' copy of gnulib.  As passing
over that flag into parse_datetime is quite loose (via a variable
instead of a parameter), that relation/dependency should be
mentioned I suppose.

> diff --git a/doc/coreutils.texi b/doc/coreutils.texi
> index 5630201..a9029df 100644
> --- a/doc/coreutils.texi
> +++ b/doc/coreutils.texi
> @@ -15385,6 +15385,10 @@ date -d "$(LC_TIME=C date)"
>  @end example
>  @xref{Date input formats}.
>
> +@item --debug
> +annotate the parsed date, display the effective time zone, and warn about
> +potential misuse.
> +

Please add "@opindex --debug".

Now just skimming through the test:

diff --git a/tests/misc/date-debug.sh b/tests/misc/date-debug.sh
new file mode 100755
index 0000000..1f58479
--- /dev/null
+++ b/tests/misc/date-debug.sh
@@ -0,0 +1,102 @@
+#!/bin/sh
+# Test 'date --debug' option

s/$/.$/

+
+# Copyright (C) 2004-2016 Free Software Foundation, Inc.
+
+# 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 3 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, see<http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
+print_ver_ date
+
+export LC_ALL=C
+
+remove_trailing_spaces() { sed 's/ *$//'; }

It would be better to avoid trailing spaces in the --debug output.
Do you think it's possible?

+
+##
+## Test 1: complex date string
+##
+in1='TZ="Asia/Tokyo" Sun, 90-12-11 + 3 days - 90 minutes'
+
+cat<<EOF>exp1
+date: parsed day part: Sun (day ordinal=0 number=0)
+date: parsed date part: (Y-M-D) 0090-12-11
+date: parsed relative part: +3 day(s)
+date: parsed relative part: +3 day(s) -90 minutes
+date: input timezone: +09:00 (set from TZ="Asia/Tokyo" in date string)
+date: warning: adjusting year value 90 to 1990
+date: warning: using midnight as starting time: 00:00:00
+date: warning: day (Sun) ignored when explicit dates are given
+date: starting date/time: '(Y-M-D) 1990-12-11 00:00:00 TZ=+09:00'
+date: warning: when adding relative days, it is recommended to specify 12:00pm
+date: after date adjustment (+0 years, +0 months, +3 days),
+date:     new date/time = '(Y-M-D) 1990-12-14 00:00:00 TZ=+09:00'
+date: '(Y-M-D) 1990-12-14 00:00:00 TZ=+09:00' = 661100400 epoch-seconds
+date: after time adjustment (+0 hours, -90 minutes, +0 seconds, +0 ns),
+date:     new time = 661095000 epoch-seconds
+date: output timezone: -06:00 (set from TZ="America/Belize" environment value)
+date: final: 661095000.000000000 (epoch-seconds)
+date: final: (Y-M-D) 1990-12-13 13:30:00 (UTC0)
+date: final: (Y-M-D) 1990-12-13 07:30:00 (output timezone TZ=-06:00)
+Thu Dec 13 07:30:00 CST 1990
+EOF
+
+TZ=America/Belize date --debug -d "$in1" >out1s 2>&1 || framework_failure_

... || fail=1

We only use framework_failure_ for unexpected results of commands
not being the subject of the test ... like compare, preparation, etc.

+remove_trailing_spaces < out1s > out1 || framework_failure_
+
+compare exp1 out1 || fail=1
+
+##
+## Test 2: Invalid date from Coreutils' FAQ
+##         (with explicit timezone added)
+in2='TZ="America/Edmonton" 2006-04-02 02:30:00'
+cat<<EOF>exp2
+date: parsed date part: (Y-M-D) 2006-04-02
+date: parsed time part: 02:30:00
+date: input timezone: -07:00 (set from TZ="America/Edmonton" in date string)
+date: using specified time as starting value: '02:30:00'
+date: error: invalid date/time value:
+date:     user provided time: '(Y-M-D) 2006-04-02 02:30:00 TZ=-07:00'
+date:        normalized time: '(Y-M-D) 2006-04-02 03:30:00 TZ=-07:00'
+date:                                             --
+date:      possible reasons:
+date:        non-existing due to daylight-saving time;
+date:        numeric values overflow;
+date:        missing timezone
+date: invalid date 'TZ="America/Edmonton" 2006-04-02 02:30:00'
+EOF
+
+# date should return 1 (error) for invalid date
+returns_ 1 date --debug -d "$in2" >out2s 2>&1 || framework_failure_

Likewise:
   ... || fail=1

+remove_trailing_spaces < out2s > out2 || framework_failure_
+compare exp2 out2 || fail=1
+
+##
+## Test 3: timespec (input always UTC, output is TZ-dependent)
+##
+in3='@1'
+cat<<EOF>exp3
+date: parsed number of seconds part: number of seconds: 1
+date: input timezone: +00:00 (set from '@timespec' - always UTC0)
+date: output timezone: -05:00 (set from TZ="America/Lima" environment value)
+date: final: 1.000000000 (epoch-seconds)
+date: final: (Y-M-D) 1970-01-01 00:00:01 (UTC0)
+date: final: (Y-M-D) 1969-12-31 19:00:01 (output timezone TZ=-05:00)
+Wed Dec 31 19:00:01 PET 1969
+EOF
+
+TZ=America/Lima date --debug -d "$in3" >out3s 2>&1 || framework_failure_
+remove_trailing_spaces < out3s > out3 || framework_failure_
+compare exp3 out3 || fail=1
+
+Exit $fail

Thanks & have a nice day,
Berny



reply via email to

[Prev in Thread] Current Thread [Next in Thread]