Hi,
Brings log a bit more inline with its GNU counterpart
by attempting to parse the date range early on, killing
extra output from date.y and having a proper fatal message.
Any caller of date_parse() already displays its own error
messages anyway if it fails.
Additionally lets not return -1 from a function that is
declared to return an unsigned int.
.joris
Index: date.y
===================================================================
RCS file: /cvs/src/usr.bin/cvs/date.y,v
retrieving revision 1.25
diff -u -p -r1.25 date.y
--- date.y 5 Nov 2015 09:48:21 -0000 1.25
+++ date.y 22 Jun 2016 09:52:04 -0000
@@ -483,16 +483,8 @@ static TABLE const MilitaryTable[] = {
static int
yyerror(const char *s)
{
-#if !defined(TEST)
- char *str;
-
- (void)xasprintf(&str, "parsing date string: %s", s);
- cvs_log(LP_ERR, "%s", str);
- free(str);
-#endif
return (0);
}
-
static time_t
ToSeconds(time_t Hours, time_t Minutes, time_t Seconds, MERIDIAN Meridian)
Index: getlog.c
===================================================================
RCS file: /cvs/src/usr.bin/cvs/getlog.c,v
retrieving revision 1.98
diff -u -p -r1.98 getlog.c
--- getlog.c 1 Dec 2014 21:58:46 -0000 1.98
+++ getlog.c 22 Jun 2016 09:52:04 -0000
@@ -40,7 +40,7 @@
void cvs_log_local(struct cvs_file *);
static void log_rev_print(struct rcs_delta *);
static char *push_date(char *dest, const char *);
-static u_int date_select(RCSFILE *, char *);
+static int date_select(RCSFILE *, char *, u_int *);
int runflags = 0;
char *logrev = NULL;
@@ -210,6 +210,14 @@ cvs_log_local(struct cvs_file *cf)
cvs_file_classify(cf, cvs_directory_tag);
+ if (logrev != NULL)
+ nrev = cvs_revision_select(cf->file_rcs, logrev);
+ else if (logdate != NULL) {
+ if (date_select(cf->file_rcs, logdate, &nrev) == -1)
+ fatal("Can't parse date/time: %s", logdate);
+ } else
+ nrev = cf->file_rcs->rf_ndelta;
+
if (cf->file_type == CVS_DIR) {
if (verbosity > 1)
cvs_log(LP_ERR, "Logging %s", cf->file_path);
@@ -230,16 +238,6 @@ cvs_log_local(struct cvs_file *cf)
return;
}
- if (logrev != NULL)
- nrev = cvs_revision_select(cf->file_rcs, logrev);
- else if (logdate != NULL) {
- if ((nrev = date_select(cf->file_rcs, logdate)) == -1) {
- cvs_log(LP_ERR, "invalid date: %s", logdate);
- return;
- }
- } else
- nrev = cf->file_rcs->rf_ndelta;
-
cvs_printf("\nRCS file: %s", cf->file_rpath);
if (cvs_cmdop != CVS_OP_RLOG)
@@ -418,8 +416,8 @@ push_date(char *dest, const char *src)
return (dest);
}
-static u_int
-date_select(RCSFILE *file, char *date)
+static int
+date_select(RCSFILE *file, char *date, u_int *cnt)
{
int i, nrev, flags;
struct rcs_delta *rdp;
@@ -427,6 +425,7 @@ date_select(RCSFILE *file, char *date)
char *first, *last, delim;
time_t firstdate, lastdate, rcsdate;
+ *cnt = 0;
nrev = 0;
args = cvs_strsplit(date, ";");
@@ -566,7 +565,8 @@ date_select(RCSFILE *file, char *date)
}
}
+ *cnt = nrev;
cvs_argv_destroy(args);
- return (nrev);
+ return 0;
}