From dc23c0e307351a6e48025026ad9545936e90507c Mon Sep 17 00:00:00 2001 From: Jonas Fonseca Date: Thu, 7 Sep 2006 23:28:53 +0200 Subject: [PATCH] Add poor man's "show most recent tag" by using git-describe In the diff view, the "Refs:" lines will now sport the output of git-describe by appending it as the last reference to the line. Now, it should probably be optional and I mostly added it because I wanted to do a little tig hacking. Anyway, let's hope it will be useful. --- tig.c | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/tig.c b/tig.c index 08cdd41..97e3d0d 100644 --- a/tig.c +++ b/tig.c @@ -2067,6 +2067,34 @@ pager_draw(struct view *view, struct line *line, unsigned int lineno) return TRUE; } +static bool +add_describe_ref(char *buf, int *bufpos, char *commit_id, const char *sep) +{ + char refbuf[1024]; + char *ref = NULL; + FILE *pipe; + + if (!string_format(refbuf, "git describe %s", commit_id)) + return TRUE; + + pipe = popen(refbuf, "r"); + if (!pipe) + return TRUE; + + if ((ref = fgets(refbuf, sizeof(refbuf), pipe))) + ref = chomp_string(ref); + pclose(pipe); + + if (!ref || !*ref) + return TRUE; + + /* This is the only fatal call, since it can "corrupt" the buffer. */ + if (!string_nformat(buf, 1024, bufpos, "%s%s", sep, ref)) + return FALSE; + + return TRUE; +} + static void add_pager_refs(struct view *view, struct line *line) { @@ -2075,12 +2103,16 @@ add_pager_refs(struct view *view, struct line *line) struct ref **refs; int bufpos = 0, refpos = 0; const char *sep = "Refs: "; + bool is_tag = FALSE; assert(line->type == LINE_COMMIT); refs = get_refs(commit_id); - if (!refs) + if (!refs) { + if (view == VIEW(REQ_VIEW_DIFF)) + goto try_add_describe_ref; return; + } do { struct ref *ref = refs[refpos]; @@ -2089,8 +2121,16 @@ add_pager_refs(struct view *view, struct line *line) if (!string_format_from(buf, &bufpos, fmt, sep, ref->name)) return; sep = ", "; + if (ref->tag) + is_tag = TRUE; } while (refs[refpos++]->next); + if (!is_tag && view == VIEW(REQ_VIEW_DIFF)) { +try_add_describe_ref: + if (!add_describe_ref(buf, &bufpos, commit_id, sep)) + return; + } + if (!realloc_lines(view, view->line_size + 1)) return; -- 2.30.2