Add tool to render git's "<utcseconds> <zone>" into an RFC2822-compliant
string, because I don't think date(1) can do it. Use same for 'git log'
output.

Signed-off-by: David Woodhouse <[EMAIL PROTECTED]>

--- Makefile
+++ Makefile    2005-04-18 15:40:43.000000000 +1000
@@ -14,7 +14,7 @@
 
 PROG=   update-cache show-diff init-db write-tree read-tree commit-tree \
        cat-file fsck-cache checkout-cache diff-tree rev-tree show-files \
-       check-files ls-tree merge-base
+       check-files ls-tree merge-base show-date
 
 SCRIPT=        parent-id tree-id git gitXnormid.sh gitadd.sh gitaddremote.sh \
        gitcommit.sh gitdiff-do gitdiff.sh gitlog.sh gitls.sh gitlsobj.sh \
--- gitlog.sh
+++ gitlog.sh   2005-04-18 15:39:38.000000000 +1000
@@ -13,6 +13,23 @@
 
 rev-tree $base | sort -rn | while read time commit parents; do
        echo commit ${commit%:*};
-       cat-file commit $commit
+       cat-file commit $commit | while read type rest ; do
+               case "$type" in
+                   "author"|"committer")
+                       DATESTAMP="`echo $rest | cut -f2 -d\>`"
+                       RFC2822DATE="`show-date $DATESTAMP 2>/dev/null || echo 
$DATESTAMP`"
+                       echo $type $rest | sed "s/$DATESTAMP\$/ $RFC2822DATE/"
+                       ;;
+
+                   "")
+                       echo ""
+                       cat
+                       ;;
+                   *)
+                       echo $type $rest
+                       ;;
+               esac
+           done
+                   
        echo -e "\n--------------------------"
 done
--- show-date.c.orig    2005-04-18 15:43:06.000000000 +1000
+++ show-date.c 2005-04-18 15:42:15.000000000 +1000
@@ -0,0 +1,48 @@
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "cache.h"
+
+static const char *month_names[] = {
+        "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+        "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+};
+
+static const char *weekday_names[] = {
+        "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+};
+
+int main(int argc, char **argv)
+{
+       time_t t;
+       int offset;
+       char *p;
+       struct tm tm;
+
+       if (argc != 3)
+               usage("usage: show-date <seconds> <zone>");
+
+       t = strtol(argv[1], &p, 0);
+       if (*p || !t)
+               usage("usage: show-date <seconds> <zone>");
+
+       if (argv[2][0] != '-' && argv[2][0] != '+')
+               usage("usage: show-date <seconds> <zone>");
+
+       offset = strtol(argv[2]+1, &p, 10);
+       if (*p || p!= argv[2]+5)
+               usage("usage: show-date <seconds> <zone>");
+
+       if (argv[2][0] == '-')
+               offset = -offset;
+
+       offset = 60 * (offset % 100 + (offset / 100 * 60));
+
+       t += offset;
+       gmtime_r(&t, &tm);
+
+       printf("%s, %d %s %04d %02d:%02d:%02d %s\n",
+              weekday_names[tm.tm_wday], tm.tm_mday, month_names[tm.tm_mon],
+              tm.tm_year+1900, tm.tm_hour, tm.tm_min, tm.tm_sec, argv[2]);
+       return 0;
+}

-- 
dwmw2

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to