date: add "unix" format
We already have "--date=raw", which is a Unix epoch timestamp plus a contextual timezone (either the author's or the local). But one may not care about the timezone and just want the epoch timestamp by itself. It's not hard to parse the two apart, but if you are using a pretty-print format, you may want git to show the "finished" form that the user will see. We can accomodate this by adding a new date format, "unix", which is basically "raw" without the timezone. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King committed
Jul 22, 2016 at 15:51 UTC
642833db78aa5d7a72677aa9a9b013fb9a880f19
5 files changed
+19
-1
Documentation/rev-list-options.txt
+4
@@ -751,6 +751,10 @@ Note that the `-local` option does not affect the seconds-since-epoch
751
value (which is always measured in UTC), but does switch the accompanying
752
timezone value.
753
+
754
+`--date=unix` shows the date as a Unix epoch timestamp (seconds since
755
+1970). As with `--raw`, this is always in UTC and therefore `-local`
756
+has no effect.
757
++
758
`--date=format:...` feeds the format `...` to your system `strftime`.
759
Use `--date=format:%c` to show the date in your system locale's
760
preferred format. See the `strftime` manual for a complete list of
builtin/blame.c
+3
@@ -2626,6 +2626,9 @@ parse_done:
2626
case DATE_RAW:
2627
blame_date_width = sizeof("1161298804 -0700");
2628
break;
2629
+ case DATE_UNIX:
2630
+ blame_date_width = sizeof("1161298804");
2631
+ break;
2632
case DATE_SHORT:
2633
blame_date_width = sizeof("2006-10-19");
2634
break;
cache.h
+2
-1
@@ -1223,7 +1223,8 @@ struct date_mode {
1223
DATE_ISO8601_STRICT,
1224
DATE_RFC2822,
1225
DATE_STRFTIME,
1226
- DATE_RAW
1226
+ DATE_RAW,
1227
+ DATE_UNIX
1228
} type;
1229
const char *strftime_fmt;
1230
int local;
date.c
+8
@@ -177,6 +177,12 @@ const char *show_date(unsigned long time, int tz, const struct date_mode *mode)
177
struct tm *tm;
178
static struct strbuf timebuf = STRBUF_INIT;
179
180
+ if (mode->type == DATE_UNIX) {
181
+ strbuf_reset(&timebuf);
182
+ strbuf_addf(&timebuf, "%lu", time);
183
+ return timebuf.buf;
184
+ }
185
+
186
if (mode->local)
187
tz = local_tzoffset(time);
188
@@ -792,6 +798,8 @@ static enum date_mode_type parse_date_type(const char *format, const char **end)
798
return DATE_NORMAL;
799
if (skip_prefix(format, "raw", end))
800
return DATE_RAW;
801
+ if (skip_prefix(format, "unix", end))
802
+ return DATE_UNIX;
803
if (skip_prefix(format, "format", end))
804
return DATE_STRFTIME;
805
t/t0006-date.sh
+2
@@ -46,8 +46,10 @@ check_show rfc2822 "$TIME" 'Wed, 15 Jun 2016 16:13:20 +0200'
46
check_show short "$TIME" '2016-06-15'
47
check_show default "$TIME" 'Wed Jun 15 16:13:20 2016 +0200'
48
check_show raw "$TIME" '1466000000 +0200'
49
+check_show unix "$TIME" '1466000000'
50
check_show iso-local "$TIME" '2016-06-15 14:13:20 +0000'
51
check_show raw-local "$TIME" '1466000000 +0000'
52
+check_show unix-local "$TIME" '1466000000'
53
54
# arbitrary time absurdly far in the future
55
FUTURE="5758122296 -0400"