mirror of
https://github.com/git/git.git
synced 2026-03-13 02:13:24 +01:00
Add --graph prefix before line history output
Makes the line level log output look good when used with the '--graph' option. Signed-off-by: Bo Yang <struggleyb.nku@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
66
line.c
66
line.c
@@ -1115,6 +1115,13 @@ static void flush_lines(struct diff_options *opt, const char **ptr, const char *
|
||||
const char *p = *ptr;
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
const char *reset;
|
||||
char *line_prefix = "";
|
||||
struct strbuf *msgbuf;
|
||||
|
||||
if (opt && opt->output_prefix) {
|
||||
msgbuf = opt->output_prefix(opt, opt->output_prefix_data);
|
||||
line_prefix = msgbuf->buf;
|
||||
}
|
||||
|
||||
if (*color)
|
||||
reset = diff_get_color_opt(opt, DIFF_RESET);
|
||||
@@ -1137,7 +1144,7 @@ static void flush_lines(struct diff_options *opt, const char **ptr, const char *
|
||||
|
||||
while (*ptr < end && *lno <= elno) {
|
||||
if (**ptr == '\n') {
|
||||
fprintf(opt->file, "%s", buf.buf);
|
||||
fprintf(opt->file, "%s%s", line_prefix, buf.buf);
|
||||
if (*ptr - p)
|
||||
fwrite(p, *ptr - p, 1, opt->file);
|
||||
fprintf(opt->file, "%s\n", reset);
|
||||
@@ -1147,7 +1154,7 @@ static void flush_lines(struct diff_options *opt, const char **ptr, const char *
|
||||
(*ptr)++;
|
||||
}
|
||||
if (*lno <= elno) {
|
||||
fprintf(opt->file, "%s", buf.buf);
|
||||
fprintf(opt->file, "%s%s", line_prefix, buf.buf);
|
||||
if (*ptr - p)
|
||||
fwrite(p, *ptr - p, 1, opt->file);
|
||||
fprintf(opt->file, "%s\n", reset);
|
||||
@@ -1189,8 +1196,15 @@ static void diff_flush_chunks(struct diff_options *opt, struct line_chunk *chunk
|
||||
struct diff_line_range *range = chunk->range;
|
||||
const char *set = diff_get_color_opt(opt, DIFF_FRAGINFO);
|
||||
const char *reset = diff_get_color_opt(opt, DIFF_RESET);
|
||||
char *line_prefix = "";
|
||||
struct strbuf *msgbuf;
|
||||
int i;
|
||||
|
||||
if (opt && opt->output_prefix) {
|
||||
msgbuf = opt->output_prefix(opt, opt->output_prefix_data);
|
||||
line_prefix = msgbuf->buf;
|
||||
}
|
||||
|
||||
for (i = 0; i < range->nr; i++) {
|
||||
struct line_range *r = range->ranges + i;
|
||||
long lenp = r->pend - r->pstart + 1, pstart = r->pstart;
|
||||
@@ -1198,8 +1212,8 @@ static void diff_flush_chunks(struct diff_options *opt, struct line_chunk *chunk
|
||||
if (pstart == 0)
|
||||
lenp = 0;
|
||||
|
||||
fprintf(opt->file, "%s@@ -%ld,%ld +%ld,%ld @@%s\n",
|
||||
set, pstart, lenp, r->start, len, reset);
|
||||
fprintf(opt->file, "%s%s@@ -%ld,%ld +%ld,%ld @@%s\n",
|
||||
line_prefix, set, pstart, lenp, r->start, len, reset);
|
||||
|
||||
diff_flush_range(opt, chunk, r);
|
||||
}
|
||||
@@ -1218,6 +1232,13 @@ static void diff_flush_filepair(struct rev_info *rev, struct diff_line_range *ra
|
||||
const char *reset = diff_get_color_opt(opt, DIFF_RESET);
|
||||
struct line_chunk chunk;
|
||||
int must_show_header;
|
||||
char *line_prefix = "";
|
||||
struct strbuf *msgbuf;
|
||||
|
||||
if (opt && opt->output_prefix) {
|
||||
msgbuf = opt->output_prefix(opt, opt->output_prefix_data);
|
||||
line_prefix = msgbuf->buf;
|
||||
}
|
||||
|
||||
/*
|
||||
* the ranges that touch no different file, in this case
|
||||
@@ -1251,21 +1272,26 @@ static void diff_flush_filepair(struct rev_info *rev, struct diff_line_range *ra
|
||||
b_two = quote_two(b_prefix, name_b + (*name_b == '/'));
|
||||
lbl[0] = DIFF_FILE_VALID(one) ? a_one : "/dev/null";
|
||||
lbl[1] = DIFF_FILE_VALID(two) ? b_two : "/dev/null";
|
||||
strbuf_addf(&header, "%sdiff --git %s %s%s\n", set, a_one, b_two, reset);
|
||||
strbuf_addf(&header, "%s%sdiff --git %s %s%s\n", line_prefix,
|
||||
set, a_one, b_two, reset);
|
||||
if (lbl[0][0] == '/') {
|
||||
strbuf_addf(&header, "%snew file mode %06o%s\n", set, two->mode, reset);
|
||||
strbuf_addf(&header, "%s%snew file mode %06o%s\n",
|
||||
line_prefix, set, two->mode, reset);
|
||||
} else if (lbl[1][0] == '/') {
|
||||
strbuf_addf(&header, "%sdeleted file mode %06o%s\n", set, one->mode, reset);
|
||||
strbuf_addf(&header, "%s%sdeleted file mode %06o%s\n",
|
||||
line_prefix, set, one->mode, reset);
|
||||
} else if (one->mode != two->mode) {
|
||||
strbuf_addf(&header, "%sold mode %06o%s\n", set, one->mode, reset);
|
||||
strbuf_addf(&header, "%snew mode %06o%s\n", set, two->mode, reset);
|
||||
strbuf_addf(&header, "%s%sold mode %06o%s\n",
|
||||
line_prefix, set, one->mode, reset);
|
||||
strbuf_addf(&header, "%s%snew mode %06o%s\n",
|
||||
line_prefix, set, two->mode, reset);
|
||||
}
|
||||
|
||||
fprintf(opt->file, "%s%s", header.buf, meta.buf);
|
||||
strbuf_release(&meta);
|
||||
strbuf_release(&header);
|
||||
fprintf(opt->file, "%s--- %s%s\n", set, lbl[0], reset);
|
||||
fprintf(opt->file, "%s+++ %s%s\n", set, lbl[1], reset);
|
||||
fprintf(opt->file, "%s%s--- %s%s\n", line_prefix, set, lbl[0], reset);
|
||||
fprintf(opt->file, "%s%s+++ %s%s\n", line_prefix, set, lbl[1], reset);
|
||||
free((void *)a_one);
|
||||
free((void *)b_two);
|
||||
|
||||
@@ -1319,12 +1345,13 @@ static void flush_nontrivial_merge(struct rev_info *rev,
|
||||
meta, range->spec->path, reset);
|
||||
for (; i < range->nr; i++) {
|
||||
struct line_range *r = range->ranges + i;
|
||||
fprintf(opt->file, "%s@@ %ld,%ld @@%s\n", frag, r->start,
|
||||
fprintf(opt->file, "%s%s@@ %ld,%ld @@%s\n",
|
||||
line_prefix, frag, r->start,
|
||||
r->end - r->start + 1, reset);
|
||||
flush_lines(opt, &ptr, end, r->start, r->end,
|
||||
&lno, new, ' ');
|
||||
}
|
||||
fprintf(opt->file, "\n");
|
||||
fprintf(opt->file, "%s\n", line_prefix);
|
||||
}
|
||||
range = range->next;
|
||||
}
|
||||
@@ -1337,6 +1364,8 @@ static void line_log_flush(struct rev_info *rev, struct commit *c)
|
||||
&c->object);
|
||||
struct log_info log;
|
||||
struct diff_options *opt = &rev->diffopt;
|
||||
char *line_prefix = "";
|
||||
struct strbuf *msgbuf;
|
||||
|
||||
if (range == NULL || !(c->object.flags & NONTRIVIAL_MERGE ||
|
||||
c->object.flags & NEED_PRINT))
|
||||
@@ -1349,11 +1378,12 @@ static void line_log_flush(struct rev_info *rev, struct commit *c)
|
||||
rev->loginfo = &log;
|
||||
show_log(rev);
|
||||
rev->loginfo = NULL;
|
||||
/*
|
||||
* Add a new line after each commit message, of course we should
|
||||
* add --graph alignment later when the patches comes to master.
|
||||
*/
|
||||
fprintf(rev->diffopt.file, "\n");
|
||||
|
||||
if (opt && opt->output_prefix) {
|
||||
msgbuf = opt->output_prefix(opt, opt->output_prefix_data);
|
||||
line_prefix = msgbuf->buf;
|
||||
}
|
||||
fprintf(rev->diffopt.file, "%s\n", line_prefix);
|
||||
|
||||
if (c->object.flags & NONTRIVIAL_MERGE)
|
||||
flush_nontrivial_merge(rev, nontrivial);
|
||||
|
||||
Reference in New Issue
Block a user