fix times (and timezone) - stagit-gopher - A git gopher frontend. (mirror)
 (HTM) git clone git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 462ba66ee7e0ae16f41d4fff9c8540913c3941a9
 (DIR) parent 7a1da0b9853093781dd1b130d63619b17ecc8c01
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Sun,  1 May 2016 16:10:17 +0200
       
       fix times (and timezone)
       
       - in the index and log show the short time (GMT).
       - in the Atom feed use GMT time.
       - for commits show the time + offset.
       
       Diffstat:
         M stagit-index.c                      |      12 +++---------
         M stagit.c                            |      38 ++++++++++++++++++++++---------
       
       2 files changed, 30 insertions(+), 20 deletions(-)
       ---
 (DIR) diff --git a/stagit-index.c b/stagit-index.c
       @@ -42,25 +42,19 @@ xmlencode(FILE *fp, const char *s, size_t len)
        }
        
        void
       -printtimeformat(FILE *fp, const git_time *intime, const char *fmt)
       +printtimeshort(FILE *fp, const git_time *intime)
        {
                struct tm *intm;
                time_t t;
                char out[32];
        
       -        t = (time_t) intime->time + (intime->offset * 60);
       +        t = (time_t)intime->time;
                if (!(intm = gmtime(&t)))
                        return;
       -        strftime(out, sizeof(out), fmt, intm);
       +        strftime(out, sizeof(out), "%Y-%m-%d %H:%M", intm);
                fputs(out, fp);
        }
        
       -void
       -printtimeshort(FILE *fp, const git_time *intime)
       -{
       -        printtimeformat(fp, intime, "%Y-%m-%d %H:%M");
       -}
       -
        int
        writeheader(FILE *fp)
        {
 (DIR) diff --git a/stagit.c b/stagit.c
       @@ -268,35 +268,51 @@ mkdirp(const char *path)
        }
        
        void
       -printtimeformat(FILE *fp, const git_time *intime, const char *fmt)
       +printtimez(FILE *fp, const git_time *intime)
        {
                struct tm *intm;
                time_t t;
                char out[32];
        
       -        t = (time_t) intime->time + (intime->offset * 60);
       +        t = (time_t)intime->time;
                if (!(intm = gmtime(&t)))
                        return;
       -        strftime(out, sizeof(out), fmt, intm);
       +        strftime(out, sizeof(out), "%Y-%m-%dT%H:%M:%SZ", intm);
                fputs(out, fp);
        }
        
        void
       -printtimez(FILE *fp, const git_time *intime)
       -{
       -        printtimeformat(fp, intime, "%Y-%m-%dT%H:%M:%SZ");
       -}
       -
       -void
        printtime(FILE *fp, const git_time *intime)
        {
       -        printtimeformat(fp, intime, "%a %b %e %T %Y");
       +        struct tm *intm;
       +        time_t t;
       +        int offset, sign = '+';
       +        char out[32];
       +
       +        offset = intime->offset * 60;
       +        t = (time_t)intime->time + offset;
       +        if (!(intm = gmtime(&t)))
       +                return;
       +        strftime(out, sizeof(out), "%a %b %e %H:%M:%S", intm);
       +        if (offset < 0) {
       +                offset = -offset;
       +                sign = '-';
       +        }
       +        fprintf(fp, "%s %c%02d%02d", out, sign, offset / 60, offset % 60);
        }
        
        void
        printtimeshort(FILE *fp, const git_time *intime)
        {
       -        printtimeformat(fp, intime, "%Y-%m-%d %H:%M");
       +        struct tm *intm;
       +        time_t t;
       +        char out[32];
       +
       +        t = (time_t)intime->time;
       +        if (!(intm = gmtime(&t)))
       +                return;
       +        strftime(out, sizeof(out), "%Y-%m-%d %H:%M", intm);
       +        fputs(out, fp);
        }
        
        int