On 14/05/2022 01:42, Pádraig Brady wrote:
On 13/05/2022 20:10, t0th wrote:
Man page of date command should make explicit that -d and -r options are
mutually exclusive.
Right. More accurately, we might have a sentence to say that:
"All options to specify the date to display are mutually exclusive.
I.e.: --date, --file, --reference, --resolution".
I've pushed the attached 2 patches
to document the current situation at least.
cheers,
Padraig
From b09a23ec3f20003729b652ff1141f76de5e29e7f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <p...@draigbrady.com>
Date: Sun, 24 Jul 2022 20:49:29 +0100
Subject: [PATCH] doc: date: clarify which options are mutually exclusive
* src/date.c (usage): Specify that --date, --file, --reference,
and --resolution are mutually exclusive.
* doc/coreutils.texi (Options for date): Likewise.
Addresses https://bugs.gnu.org/55401
---
doc/coreutils.texi | 4 ++++
src/date.c | 5 +++++
2 files changed, 9 insertions(+)
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
index e0c87d1ad..53257f7d9 100644
--- a/doc/coreutils.texi
+++ b/doc/coreutils.texi
@@ -16426,6 +16426,10 @@ relative to Universal Time rather than to the local time zone.
The program accepts the following options. Also see @ref{Common options}.
Except for @option{-u}, these options are all GNU extensions to POSIX.
+All options that specify the date to display are mutually exclusive.
+I.e.: @option{--date}, @option{--file}, @option{--reference},
+@option{--resolution}.
+
@table @samp
@item -d @var{datestr}
diff --git a/src/date.c b/src/date.c
index 7f2ac801d..ff5c548c0 100644
--- a/src/date.c
+++ b/src/date.c
@@ -183,6 +183,11 @@ With -s, or with [MMDDhhmm[[CC]YY][.ss]], set the date and time.\n\
fputs (VERSION_OPTION_DESCRIPTION, stdout);
fputs (_("\
\n\
+All options that specify the date to display are mutually exclusive.\n\
+I.e.: --date, --file, --reference, --resolution.\n\
+"), stdout);
+ fputs (_("\
+\n\
FORMAT controls the output. Interpreted sequences are:\n\
\n\
%% a literal %\n\
--
2.26.2
From 854e0351216869b8e79391e08b156127d1508beb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <p...@draigbrady.com>
Date: Sun, 24 Jul 2022 19:24:18 +0100
Subject: [PATCH] date: --debug: diagnose discarded -d or -s options
* src/date.c: (main): Track and diagnose whether any
-d or -s options are dropped, as users may think
multiple options are supported, given they can be relative.
* tests/misc/date-debug.sh: Add a test case.
* NEWS: Mention the improvement.
---
NEWS | 5 +++++
src/date.c | 12 ++++++++++++
tests/misc/date-debug.sh | 10 ++++++++++
3 files changed, 27 insertions(+)
diff --git a/NEWS b/NEWS
index b5b8990f8..3113d4236 100644
--- a/NEWS
+++ b/NEWS
@@ -36,6 +36,11 @@ GNU coreutils NEWS -*- outline -*-
factor now accepts the --exponents (-h) option to print factors
in the form p^e, rather than repeating the prime p, e times.
+** Improvements
+
+ date --debug now diagnoses if multiple --date or --set options are
+ specified, as only the last specified is significant in that case.
+
* Noteworthy changes in release 9.1 (2022-04-15) [stable]
diff --git a/src/date.c b/src/date.c
index 9a282e2f5..7f2ac801d 100644
--- a/src/date.c
+++ b/src/date.c
@@ -403,6 +403,8 @@ main (int argc, char **argv)
char *reference = NULL;
struct stat refstats;
bool ok;
+ bool discarded_datestr = false;
+ bool discarded_set_datestr = false;
initialize_main (&argc, &argv);
set_program_name (argv[0]);
@@ -420,6 +422,8 @@ main (int argc, char **argv)
switch (optc)
{
case 'd':
+ if (datestr)
+ discarded_datestr = true;
datestr = optarg;
break;
case DEBUG_DATE_PARSING_OPTION:
@@ -469,6 +473,8 @@ main (int argc, char **argv)
new_format = rfc_email_format;
break;
case 's':
+ if (set_datestr)
+ discarded_set_datestr = true;
set_datestr = optarg;
set_date = true;
break;
@@ -511,6 +517,12 @@ main (int argc, char **argv)
usage (EXIT_FAILURE);
}
+ if (discarded_datestr && (parse_datetime_flags & PARSE_DATETIME_DEBUG))
+ error (0, 0, _("only using last of multiple -d options"));
+
+ if (discarded_set_datestr && (parse_datetime_flags & PARSE_DATETIME_DEBUG))
+ error (0, 0, _("only using last of multiple -s options"));
+
if (optind < argc)
{
if (optind + 1 < argc)
diff --git a/tests/misc/date-debug.sh b/tests/misc/date-debug.sh
index 0b5217611..5c38dee41 100755
--- a/tests/misc/date-debug.sh
+++ b/tests/misc/date-debug.sh
@@ -298,4 +298,14 @@ sed '1s/(Y-M-D) [0-9][0-9][0-9][0-9]-/(Y-M-D) XXXX-/' out9_t > out9 \
compare exp9 out9 || fail=1
+# Diagnose discarded -d arguments
+echo 'date: only using last of multiple -d options' > exp10 \
+ || framework_failure_
+cat exp9 >> exp10 || framework_failure_
+date -u --debug -d 'discard' -d 'Apr 11 22:59:00 2011' > out10_t 2>&1 || fail=1
+sed '2s/(Y-M-D) [0-9][0-9][0-9][0-9]-/(Y-M-D) XXXX-/' out10_t >> out10 \
+ || framework_failure_
+compare exp10 out10 || fail=1
+
+
Exit $fail
--
2.26.2