Opencvs showed the incorrect time for status.

Changed it to do what GNU does which is taking the
actual time string from the entries line.

(not on the list, cc me)

.joris

Index: cvs.h
===================================================================
RCS file: /cvs/src/usr.bin/cvs/cvs.h,v
retrieving revision 1.181
diff -u -p -u -r1.181 cvs.h
--- cvs.h       20 Sep 2011 12:43:45 -0000      1.181
+++ cvs.h       12 Feb 2015 19:45:05 -0000
@@ -249,6 +249,7 @@ struct cvs_ent {
        char            *ce_name;
        char            *ce_opts;
        char            *ce_tag;
+       char            *ce_time;
        time_t           ce_date;
        time_t           ce_mtime;
        u_int16_t        ce_type;
Index: entries.c
===================================================================
RCS file: /cvs/src/usr.bin/cvs/entries.c,v
retrieving revision 1.103
diff -u -p -u -r1.103 entries.c
--- entries.c   16 Jan 2015 06:40:07 -0000      1.103
+++ entries.c   12 Feb 2015 19:45:05 -0000
@@ -151,6 +151,7 @@ cvs_ent_parse(const char *entry)
        ent->ce_rev = NULL;
        ent->ce_date = -1;
        ent->ce_tag = NULL;
+       ent->ce_time = NULL;
 
        if (ent->ce_type == CVS_ENT_FILE) {
                if (*fields[2] == '-') {
@@ -186,6 +187,8 @@ cvs_ent_parse(const char *entry)
                        p = fields[3];
                        if (strncmp(fields[3], "Result of merge+", 16) == 0)
                                p += 16;
+
+                       ent->ce_time = xstrdup(p);
 
                        /* Date field can be a '+=' with remote to indicate
                         * conflict.  In this case do nothing. */
Index: status.c
===================================================================
RCS file: /cvs/src/usr.bin/cvs/status.c,v
retrieving revision 1.94
diff -u -p -u -r1.94 status.c
--- status.c    16 Jan 2015 06:40:07 -0000      1.94
+++ status.c    12 Feb 2015 19:45:05 -0000
@@ -176,9 +176,8 @@ cvs_status_local(struct cvs_file *cf)
                rcsnum_tostr(cf->file_ent->ce_rev, revbuf, sizeof(revbuf));
 
                if (cf->file_ent->ce_conflict == NULL) {
-                       ctime_r(&(cf->file_ent->ce_mtime), timebuf);
-                       if (timebuf[strlen(timebuf) - 1] == '\n')
-                               timebuf[strlen(timebuf) - 1] = '\0';
+                       (void)strlcpy(timebuf, cf->file_ent->ce_time,
+                           sizeof(timebuf));
                } else {
                        len = strlcpy(timebuf, cf->file_ent->ce_conflict,
                            sizeof(timebuf));
@@ -189,7 +188,7 @@ cvs_status_local(struct cvs_file *cf)
                (void)strlcpy(buf, revbuf, sizeof(buf));
                if (cvs_server_active == 0) {
                        (void)strlcat(buf, "\t", sizeof(buf));
-                       (void)strlcat(buf, timebuf, sizeof(buf));
+                       (void)strlcat(buf, cf->file_ent->ce_time, sizeof(buf));
                }
        }
 

Reply via email to