From e502f9e7e6ceb8dfbdb94e2675355847740fc28f Mon Sep 17 00:00:00 2001 From: Pieter de Bie Date: Mon, 8 Sep 2008 01:05:41 +0200 Subject: builtin-commit.c: show on which branch a commit was added This outputs the current branch on which a commit was created, just for reference. For example: Created commit 6d42875 on master: Fix submodule invalid command error This also reminds the committer when he is on a detached HEAD: Created commit 02a7172 on detached HEAD: Also do this for 'git commit --amend' Signed-off-by: Pieter de Bie Signed-off-by: Junio C Hamano --- builtin-commit.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) (limited to 'builtin-commit.c') diff --git a/builtin-commit.c b/builtin-commit.c index 8165bb3d31..f7b90604aa 100644 --- a/builtin-commit.c +++ b/builtin-commit.c @@ -878,10 +878,37 @@ int cmd_status(int argc, const char **argv, const char *prefix) return commitable ? 0 : 1; } +static char *get_commit_format_string(void) +{ + unsigned char sha[20]; + const char *head = resolve_ref("HEAD", sha, 0, NULL); + struct strbuf buf = STRBUF_INIT; + + strbuf_addstr(&buf, "format:%h"); + + /* Are we on a detached HEAD? */ + if (!strcmp("HEAD", head)) + strbuf_addstr(&buf, " on detached HEAD"); + else if (!prefixcmp(head, "refs/heads/")) { + const char *cp; + strbuf_addstr(&buf, " on "); + for (cp = head + 11; *cp; cp++) { + if (*cp == '%') + strbuf_addstr(&buf, "%x25"); + else + strbuf_addch(&buf, *cp); + } + } + strbuf_addstr(&buf, ": %s"); + + return strbuf_detach(&buf, NULL); +} + static void print_summary(const char *prefix, const unsigned char *sha1) { struct rev_info rev; struct commit *commit; + char *format = get_commit_format_string(); commit = lookup_commit(sha1); if (!commit) @@ -899,7 +926,7 @@ static void print_summary(const char *prefix, const unsigned char *sha1) rev.verbose_header = 1; rev.show_root_diff = 1; - get_commit_format("format:%h: %s", &rev); + get_commit_format(format, &rev); rev.always_show_header = 0; rev.diffopt.detect_rename = 1; rev.diffopt.rename_limit = 100; @@ -910,10 +937,11 @@ static void print_summary(const char *prefix, const unsigned char *sha1) if (!log_tree_commit(&rev, commit)) { struct strbuf buf = STRBUF_INIT; - format_commit_message(commit, "%h: %s", &buf, DATE_NORMAL); + format_commit_message(commit, format + 7, &buf, DATE_NORMAL); printf("%s\n", buf.buf); strbuf_release(&buf); } + free(format); } static int git_commit_config(const char *k, const char *v, void *cb) -- cgit v1.2.1