@matheusbsbs / matheus-bagliano / commits / 10edf37796
Fork 0

never fallback relative times to absolute

Previously, for dates older than 12 months we fell back to just giving the absolute time. This can be a bit jarring when reading a list of times. Instead, let's switch to "Y years, M months" for five years, and then just "Y years" after that. No particular reason on the 5 year cutoff except that it seemed reasonable to me. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Feb 24, 2009 at 00:42 UTC 10edf37796badc58239eb3e5d1e8e608f6e1473c
1 file changed +19 -1
date.c
+19 -1
@@ -133,7 +133,25 @@ const char *show_date(unsigned long time, int tz, enum date_mode mode)
133 snprintf(timebuf, sizeof(timebuf), "%lu months ago", (diff + 15) / 30);
134 return timebuf;
135 }
136 - /* Else fall back on absolute format.. */
136 + /* Give years and months for 5 years or so */
137 + if (diff < 1825) {
138 + unsigned long years = (diff + 183) / 365;
139 + unsigned long months = (diff % 365 + 15) / 30;
140 + int n;
141 + n = snprintf(timebuf, sizeof(timebuf), "%lu year%s",
142 + years, (years > 1 ? "s" : ""));
143 + if (months)
144 + snprintf(timebuf + n, sizeof(timebuf) - n,
145 + ", %lu month%s ago",
146 + months, (months > 1 ? "s" : ""));
147 + else
148 + snprintf(timebuf + n, sizeof(timebuf) - n,
149 + " ago");
150 + return timebuf;
151 + }
152 + /* Otherwise, just years. Centuries is probably overkill. */
153 + snprintf(timebuf, sizeof(timebuf), "%lu years ago", (diff + 183) / 365);
154 + return timebuf;
155 }
156
157 if (mode == DATE_LOCAL)