From: Nikolai Weibull <now@bitwi.se>
To: git@vger.kernel.org
Cc: Nikolai Weibull <now@puritan.pcp.ath.cx>, Nikolai Weibull <now@bitwi.se>
Subject: [PATCH] Simplify code outputting relative timestamps in git log
Date: Sun, 27 Aug 2006 16:23:28 +0200 [thread overview]
Message-ID: <11566886081901-git-send-email-now@bitwi.se> (raw)
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
next reply other threads:[~2006-08-27 14:23 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-27 14:23 Nikolai Weibull [this message]
2006-08-27 14:27 ` [PATCH] Simplify code outputting relative timestamps in git log Nikolai Weibull
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=11566886081901-git-send-email-now@bitwi.se \
--to=now@bitwi.se \
--cc=git@vger.kernel.org \
--cc=now@puritan.pcp.ath.cx \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox