From: Jonas Fonseca <fonseca@diku.dk>
To: Junio C Hamano <junkio@cox.net>
Cc: git@vger.kernel.org
Subject: [PATCH] Add --relative-date option to the revision interface
Date: Mon, 28 Aug 2006 15:52:13 +0200 [thread overview]
Message-ID: <20060828135213.GB32266@diku.dk> (raw)
In-Reply-To: <7vodu5qqd3.fsf@assigned-by-dhcp.cox.net>
Exposes the infrastructure from 9a8e35e98793af086f05d1ca9643052df9b44a74.
Signed-off-by: Jonas Fonseca <fonseca@diku.dk>
---
Junio C Hamano <junkio@cox.net> wrote Mon, Aug 28, 2006:
> - The internal is readied to be able to say "32 hours ago" in
> "git log" and friends by Linus; we do not have an UI to
> enable it yet.
Since nobody else has posted a patch, here is one.
Documentation/git-rev-list.txt | 5 +++++
builtin-rev-list.c | 2 +-
builtin-show-branch.c | 2 +-
commit.c | 20 ++++++++++++++------
commit.h | 2 +-
log-tree.c | 4 +++-
revision.c | 4 ++++
revision.h | 3 ++-
8 files changed, 31 insertions(+), 11 deletions(-)
diff --git a/Documentation/git-rev-list.txt b/Documentation/git-rev-list.txt
index dd9fff1..a446a6b 100644
--- a/Documentation/git-rev-list.txt
+++ b/Documentation/git-rev-list.txt
@@ -128,6 +128,11 @@ OPTIONS
After a failed merge, show refs that touch files having a
conflict and don't exist on all heads to merge.
+--relative-date::
+ Show dates relative to the current time, e.g. "2 hours ago".
+ Only takes effect for dates shown in human-readable format,
+ such as when using "--pretty".
+
Author
------
Written by Linus Torvalds <torvalds@osdl.org>
diff --git a/builtin-rev-list.c b/builtin-rev-list.c
index bc48a3e..ac648e9 100644
--- a/builtin-rev-list.c
+++ b/builtin-rev-list.c
@@ -85,7 +85,7 @@ static void show_commit(struct commit *c
static char pretty_header[16384];
pretty_print_commit(revs.commit_format, commit, ~0,
pretty_header, sizeof(pretty_header),
- revs.abbrev, NULL, NULL);
+ revs.abbrev, NULL, NULL, revs.relative_date);
printf("%s%c", pretty_header, hdr_termination);
}
fflush(stdout);
diff --git a/builtin-show-branch.c b/builtin-show-branch.c
index 18786f8..d7de18e 100644
--- a/builtin-show-branch.c
+++ b/builtin-show-branch.c
@@ -261,7 +261,7 @@ static void show_one_commit(struct commi
struct commit_name *name = commit->util;
if (commit->object.parsed)
pretty_print_commit(CMIT_FMT_ONELINE, commit, ~0,
- pretty, sizeof(pretty), 0, NULL, NULL);
+ pretty, sizeof(pretty), 0, NULL, NULL, 0);
else
strcpy(pretty, "(unavailable)");
if (!strncmp(pretty, "[PATCH] ", 8))
diff --git a/commit.c b/commit.c
index 307883f..3f4bc31 100644
--- a/commit.c
+++ b/commit.c
@@ -482,7 +482,8 @@ static int add_rfc2047(char *buf, const
return bp - buf;
}
-static int add_user_info(const char *what, enum cmit_fmt fmt, char *buf, const char *line)
+static int add_user_info(const char *what, enum cmit_fmt fmt, char *buf,
+ const char *line, int relative_date)
{
char *date;
int namelen;
@@ -522,14 +523,16 @@ static int add_user_info(const char *wha
}
switch (fmt) {
case CMIT_FMT_MEDIUM:
- ret += sprintf(buf + ret, "Date: %s\n", show_date(time, tz, 0));
+ ret += sprintf(buf + ret, "Date: %s\n",
+ show_date(time, tz, relative_date));
break;
case CMIT_FMT_EMAIL:
ret += sprintf(buf + ret, "Date: %s\n",
show_rfc2822_date(time, tz));
break;
case CMIT_FMT_FULLER:
- ret += sprintf(buf + ret, "%sDate: %s\n", what, show_date(time, tz, 0));
+ ret += sprintf(buf + ret, "%sDate: %s\n", what,
+ show_date(time, tz, relative_date));
break;
default:
/* notin' */
@@ -572,7 +575,10 @@ static int add_merge_info(enum cmit_fmt
return offset;
}
-unsigned long pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit, unsigned long len, char *buf, unsigned long space, int abbrev, const char *subject, const char *after_subject)
+unsigned long pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit,
+ unsigned long len, char *buf, unsigned long space,
+ int abbrev, const char *subject,
+ const char *after_subject, int relative_date)
{
int hdr = 1, body = 0;
unsigned long offset = 0;
@@ -661,12 +667,14 @@ unsigned long pretty_print_commit(enum c
if (!memcmp(line, "author ", 7))
offset += add_user_info("Author", fmt,
buf + offset,
- line + 7);
+ line + 7,
+ relative_date);
if (!memcmp(line, "committer ", 10) &&
(fmt == CMIT_FMT_FULL || fmt == CMIT_FMT_FULLER))
offset += add_user_info("Commit", fmt,
buf + offset,
- line + 10);
+ line + 10,
+ relative_date);
continue;
}
diff --git a/commit.h b/commit.h
index 779ed82..fc13de9 100644
--- a/commit.h
+++ b/commit.h
@@ -52,7 +52,7 @@ enum cmit_fmt {
};
extern enum cmit_fmt get_commit_format(const char *arg);
-extern unsigned long pretty_print_commit(enum cmit_fmt fmt, const struct commit *, unsigned long len, char *buf, unsigned long space, int abbrev, const char *subject, const char *after_subject);
+extern unsigned long pretty_print_commit(enum cmit_fmt fmt, const struct commit *, unsigned long len, char *buf, unsigned long space, int abbrev, const char *subject, const char *after_subject, int relative_date);
/** Removes the first commit from a list sorted by date, and adds all
* of its parents.
diff --git a/log-tree.c b/log-tree.c
index 031af88..54cdaa4 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -194,7 +194,9 @@ void show_log(struct rev_info *opt, cons
/*
* And then the pretty-printed message itself
*/
- len = pretty_print_commit(opt->commit_format, commit, ~0u, this_header, sizeof(this_header), abbrev, subject, extra_headers);
+ len = pretty_print_commit(opt->commit_format, commit, ~0u, this_header,
+ sizeof(this_header), abbrev, subject,
+ extra_headers, opt->relative_date);
if (opt->add_signoff)
len = append_signoff(this_header, sizeof(this_header), len,
diff --git a/revision.c b/revision.c
index 1d89d72..b588f74 100644
--- a/revision.c
+++ b/revision.c
@@ -816,6 +816,10 @@ int setup_revisions(int argc, const char
revs->simplify_history = 0;
continue;
}
+ if (!strcmp(arg, "--relative-date")) {
+ revs->relative_date = 1;
+ continue;
+ }
opts = diff_opt_parse(&revs->diffopt, argv+i, argc-i);
if (opts > 0) {
revs->diff = 1;
diff --git a/revision.h b/revision.h
index 0c3b8d9..d289781 100644
--- a/revision.h
+++ b/revision.h
@@ -55,7 +55,8 @@ struct rev_info {
/* Format info */
unsigned int shown_one:1,
- abbrev_commit:1;
+ abbrev_commit:1,
+ relative_date:1;
unsigned int abbrev;
enum cmit_fmt commit_format;
struct log_info *loginfo;
--
1.4.2.g6e47-dirty
--
Jonas Fonseca
prev parent reply other threads:[~2006-08-28 13:52 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-28 7:19 What's in git.git Junio C Hamano
2006-08-28 13:52 ` Jonas Fonseca [this message]
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=20060828135213.GB32266@diku.dk \
--to=fonseca@diku.dk \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
/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;
as well as URLs for NNTP newsgroup(s).