* [PATCH] Simplify code outputting relative timestamps in git log
@ 2006-08-27 14:23 Nikolai Weibull
2006-08-27 14:27 ` Nikolai Weibull
0 siblings, 1 reply; 2+ messages in thread
From: Nikolai Weibull @ 2006-08-27 14:23 UTC (permalink / raw)
To: git; +Cc: Nikolai Weibull, Nikolai Weibull
From: Nikolai Weibull <now@puritan.pcp.ath.cx>
The code that outputs relative timestamps is repetitive and can be
simplified by using an array to deal with the various cutoffs. This makes
it easier to modify and remove the cutoffs if we in the future desire to do
so.
Signed-off-by: Nikolai Weibull <now@bitwi.se>
---
date.c | 63 +++++++++++++++++++++++++++++++--------------------------------
1 files changed, 31 insertions(+), 32 deletions(-)
diff --git a/date.c b/date.c
index e387dcd..5891fa8 100644
--- a/date.c
+++ b/date.c
@@ -64,6 +64,29 @@ const char *show_date(unsigned long time
static char timebuf[200];
if (relative) {
+ static struct {
+ char name[8];
+ unsigned long cutoff;
+ unsigned long factor;
+ unsigned long term;
+ } cutoffs[] = {
+#define CUTOFF(name, cutoff, factor, ceiling) \
+ { (name), (cutoff) * (factor), (factor), (ceiling) }
+#define MINUTES(minutes) ((minutes) * 60)
+#define HOURS(hours) ((hours) * MINUTES(60))
+#define DAYS(days) ((days) * HOURS(24))
+ CUTOFF("seconds", 90, 1, 0),
+ CUTOFF("minutes", 90, MINUTES(1), 30),
+ CUTOFF("hours", 36, HOURS(1), MINUTES(30)),
+ CUTOFF("days", 14, DAYS(1), HOURS(12)),
+ CUTOFF("weeks", 12, DAYS(7), HOURS(12)),
+ CUTOFF("months", 12, DAYS(30), HOURS(12))
+#undef MINUTES
+#undef DAYS
+#undef HOURS
+#undef CUTOFF
+ };
+ int i;
unsigned long diff;
time_t t = gm_time_t(time, tz);
struct timeval now;
@@ -71,39 +94,15 @@ const char *show_date(unsigned long time
if (now.tv_sec < t)
return "in the future";
diff = now.tv_sec - t;
- if (diff < 90) {
- snprintf(timebuf, sizeof(timebuf), "%lu seconds ago", diff);
- return timebuf;
- }
- /* Turn it into minutes */
- diff = (diff + 30) / 60;
- if (diff < 90) {
- snprintf(timebuf, sizeof(timebuf), "%lu minutes ago", diff);
- return timebuf;
- }
- /* Turn it into hours */
- diff = (diff + 30) / 60;
- if (diff < 36) {
- snprintf(timebuf, sizeof(timebuf), "%lu hours ago", diff);
- return timebuf;
- }
- /* We deal with number of days from here on */
- diff = (diff + 12) / 24;
- if (diff < 14) {
- snprintf(timebuf, sizeof(timebuf), "%lu days ago", diff);
- return timebuf;
- }
- /* Say weeks for the past 10 weeks or so */
- if (diff < 70) {
- snprintf(timebuf, sizeof(timebuf), "%lu weeks ago", (diff + 3) / 7);
- return timebuf;
- }
- /* Say months for the past 12 months or so */
- if (diff < 360) {
- snprintf(timebuf, sizeof(timebuf), "%lu months ago", (diff + 15) / 30);
- return timebuf;
+ for (i = 0; i < ARRAY_SIZE(cutoffs); i++) {
+ if (diff < cutoffs[i].cutoff) {
+ snprintf(timebuf, sizeof(timebuf), "%lu %s ago",
+ (diff + cutoffs[i].term) / cutoffs[i].factor,
+ cutoffs[i].name);
+ return timebuf;
+ }
}
- /* Else fall back on absolute format.. */
+ /* If we went beyond the month cutoff, use absolute format. */
}
tm = time_to_tm(time, tz);
--
1.4.2.GIT-dirty
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] Simplify code outputting relative timestamps in git log
2006-08-27 14:23 [PATCH] Simplify code outputting relative timestamps in git log Nikolai Weibull
@ 2006-08-27 14:27 ` Nikolai Weibull
0 siblings, 0 replies; 2+ messages in thread
From: Nikolai Weibull @ 2006-08-27 14:27 UTC (permalink / raw)
To: git; +Cc: Nikolai Weibull
On 8/27/06, Nikolai Weibull <now@bitwi.se> wrote:
> From: Nikolai Weibull <now@puritan.pcp.ath.cx>
Hm...why is format-patch not using user.email?
> The code that outputs relative timestamps is repetitive and can be
> simplified by using an array to deal with the various cutoffs. This makes
> it easier to modify and remove the cutoffs if we in the future desire to do
> so.
I just realized that I forgot to update the cutoffs to those in the
repository. I was playing around with other cutoffs. I'll send a new
patch if it is of any interest.
nikolai
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2006-08-27 14:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-27 14:23 [PATCH] Simplify code outputting relative timestamps in git log Nikolai Weibull
2006-08-27 14:27 ` Nikolai Weibull
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox