Merge branch 'jk/diff-graph-cleanup'

Refactors a lot of repetitive code sequence from the graph drawing
code and adds it to the combined diff output.

* jk/diff-graph-cleanup:
  combine-diff.c: teach combined diffs about line prefix
  diff.c: use diff_line_prefix() where applicable
  diff: add diff_line_prefix function
  diff.c: make constant string arguments const
  diff: write prefix to the correct file
  graph: output padding for merge subsequent parents
This commit is contained in:
Junio C Hamano 2013-02-14 10:29:59 -08:00
commit a1d68bea89
4 changed files with 79 additions and 114 deletions

View file

@ -526,7 +526,8 @@ static void show_line_to_eol(const char *line, int len, const char *reset)
saw_cr_at_eol ? "\r" : ""); saw_cr_at_eol ? "\r" : "");
} }
static void dump_sline(struct sline *sline, unsigned long cnt, int num_parent, static void dump_sline(struct sline *sline, const char *line_prefix,
unsigned long cnt, int num_parent,
int use_color, int result_deleted) int use_color, int result_deleted)
{ {
unsigned long mark = (1UL<<num_parent); unsigned long mark = (1UL<<num_parent);
@ -582,7 +583,7 @@ static void dump_sline(struct sline *sline, unsigned long cnt, int num_parent,
rlines -= null_context; rlines -= null_context;
} }
fputs(c_frag, stdout); printf("%s%s", line_prefix, c_frag);
for (i = 0; i <= num_parent; i++) putchar(combine_marker); for (i = 0; i <= num_parent; i++) putchar(combine_marker);
for (i = 0; i < num_parent; i++) for (i = 0; i < num_parent; i++)
show_parent_lno(sline, lno, hunk_end, i, null_context); show_parent_lno(sline, lno, hunk_end, i, null_context);
@ -614,7 +615,7 @@ static void dump_sline(struct sline *sline, unsigned long cnt, int num_parent,
struct sline *sl = &sline[lno++]; struct sline *sl = &sline[lno++];
ll = (sl->flag & no_pre_delete) ? NULL : sl->lost_head; ll = (sl->flag & no_pre_delete) ? NULL : sl->lost_head;
while (ll) { while (ll) {
fputs(c_old, stdout); printf("%s%s", line_prefix, c_old);
for (j = 0; j < num_parent; j++) { for (j = 0; j < num_parent; j++) {
if (ll->parent_map & (1UL<<j)) if (ll->parent_map & (1UL<<j))
putchar('-'); putchar('-');
@ -627,6 +628,7 @@ static void dump_sline(struct sline *sline, unsigned long cnt, int num_parent,
if (cnt < lno) if (cnt < lno)
break; break;
p_mask = 1; p_mask = 1;
fputs(line_prefix, stdout);
if (!(sl->flag & (mark-1))) { if (!(sl->flag & (mark-1))) {
/* /*
* This sline was here to hang the * This sline was here to hang the
@ -680,11 +682,13 @@ static void reuse_combine_diff(struct sline *sline, unsigned long cnt,
static void dump_quoted_path(const char *head, static void dump_quoted_path(const char *head,
const char *prefix, const char *prefix,
const char *path, const char *path,
const char *line_prefix,
const char *c_meta, const char *c_reset) const char *c_meta, const char *c_reset)
{ {
static struct strbuf buf = STRBUF_INIT; static struct strbuf buf = STRBUF_INIT;
strbuf_reset(&buf); strbuf_reset(&buf);
strbuf_addstr(&buf, line_prefix);
strbuf_addstr(&buf, c_meta); strbuf_addstr(&buf, c_meta);
strbuf_addstr(&buf, head); strbuf_addstr(&buf, head);
quote_two_c_style(&buf, prefix, path, 0); quote_two_c_style(&buf, prefix, path, 0);
@ -696,6 +700,7 @@ static void show_combined_header(struct combine_diff_path *elem,
int num_parent, int num_parent,
int dense, int dense,
struct rev_info *rev, struct rev_info *rev,
const char *line_prefix,
int mode_differs, int mode_differs,
int show_file_header) int show_file_header)
{ {
@ -714,8 +719,8 @@ static void show_combined_header(struct combine_diff_path *elem,
show_log(rev); show_log(rev);
dump_quoted_path(dense ? "diff --cc " : "diff --combined ", dump_quoted_path(dense ? "diff --cc " : "diff --combined ",
"", elem->path, c_meta, c_reset); "", elem->path, line_prefix, c_meta, c_reset);
printf("%sindex ", c_meta); printf("%s%sindex ", line_prefix, c_meta);
for (i = 0; i < num_parent; i++) { for (i = 0; i < num_parent; i++) {
abb = find_unique_abbrev(elem->parent[i].sha1, abb = find_unique_abbrev(elem->parent[i].sha1,
abbrev); abbrev);
@ -734,11 +739,12 @@ static void show_combined_header(struct combine_diff_path *elem,
DIFF_STATUS_ADDED) DIFF_STATUS_ADDED)
added = 0; added = 0;
if (added) if (added)
printf("%snew file mode %06o", printf("%s%snew file mode %06o",
c_meta, elem->mode); line_prefix, c_meta, elem->mode);
else { else {
if (deleted) if (deleted)
printf("%sdeleted file ", c_meta); printf("%s%sdeleted file ",
line_prefix, c_meta);
printf("mode "); printf("mode ");
for (i = 0; i < num_parent; i++) { for (i = 0; i < num_parent; i++) {
printf("%s%06o", i ? "," : "", printf("%s%06o", i ? "," : "",
@ -755,16 +761,16 @@ static void show_combined_header(struct combine_diff_path *elem,
if (added) if (added)
dump_quoted_path("--- ", "", "/dev/null", dump_quoted_path("--- ", "", "/dev/null",
c_meta, c_reset); line_prefix, c_meta, c_reset);
else else
dump_quoted_path("--- ", a_prefix, elem->path, dump_quoted_path("--- ", a_prefix, elem->path,
c_meta, c_reset); line_prefix, c_meta, c_reset);
if (deleted) if (deleted)
dump_quoted_path("+++ ", "", "/dev/null", dump_quoted_path("+++ ", "", "/dev/null",
c_meta, c_reset); line_prefix, c_meta, c_reset);
else else
dump_quoted_path("+++ ", b_prefix, elem->path, dump_quoted_path("+++ ", b_prefix, elem->path,
c_meta, c_reset); line_prefix, c_meta, c_reset);
} }
static void show_patch_diff(struct combine_diff_path *elem, int num_parent, static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
@ -782,6 +788,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
struct userdiff_driver *userdiff; struct userdiff_driver *userdiff;
struct userdiff_driver *textconv = NULL; struct userdiff_driver *textconv = NULL;
int is_binary; int is_binary;
const char *line_prefix = diff_line_prefix(opt);
context = opt->context; context = opt->context;
userdiff = userdiff_find_by_path(elem->path); userdiff = userdiff_find_by_path(elem->path);
@ -901,7 +908,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
} }
if (is_binary) { if (is_binary) {
show_combined_header(elem, num_parent, dense, rev, show_combined_header(elem, num_parent, dense, rev,
mode_differs, 0); line_prefix, mode_differs, 0);
printf("Binary files differ\n"); printf("Binary files differ\n");
free(result); free(result);
return; return;
@ -962,8 +969,8 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
if (show_hunks || mode_differs || working_tree_file) { if (show_hunks || mode_differs || working_tree_file) {
show_combined_header(elem, num_parent, dense, rev, show_combined_header(elem, num_parent, dense, rev,
mode_differs, 1); line_prefix, mode_differs, 1);
dump_sline(sline, cnt, num_parent, dump_sline(sline, line_prefix, cnt, num_parent,
opt->use_color, result_deleted); opt->use_color, result_deleted);
} }
free(result); free(result);
@ -986,6 +993,7 @@ static void show_raw_diff(struct combine_diff_path *p, int num_parent, struct re
{ {
struct diff_options *opt = &rev->diffopt; struct diff_options *opt = &rev->diffopt;
int line_termination, inter_name_termination, i; int line_termination, inter_name_termination, i;
const char *line_prefix = diff_line_prefix(opt);
line_termination = opt->line_termination; line_termination = opt->line_termination;
inter_name_termination = '\t'; inter_name_termination = '\t';
@ -995,7 +1003,10 @@ static void show_raw_diff(struct combine_diff_path *p, int num_parent, struct re
if (rev->loginfo && !rev->no_commit_id) if (rev->loginfo && !rev->no_commit_id)
show_log(rev); show_log(rev);
if (opt->output_format & DIFF_FORMAT_RAW) { if (opt->output_format & DIFF_FORMAT_RAW) {
printf("%s", line_prefix);
/* As many colons as there are parents */ /* As many colons as there are parents */
for (i = 0; i < num_parent; i++) for (i = 0; i < num_parent; i++)
putchar(':'); putchar(':');
@ -1033,6 +1044,7 @@ void show_combined_diff(struct combine_diff_path *p,
struct rev_info *rev) struct rev_info *rev)
{ {
struct diff_options *opt = &rev->diffopt; struct diff_options *opt = &rev->diffopt;
if (!p->len) if (!p->len)
return; return;
if (opt->output_format & (DIFF_FORMAT_RAW | if (opt->output_format & (DIFF_FORMAT_RAW |
@ -1143,8 +1155,10 @@ void diff_tree_combined(const unsigned char *sha1,
if (show_log_first && i == 0) { if (show_log_first && i == 0) {
show_log(rev); show_log(rev);
if (rev->verbose_header && opt->output_format) if (rev->verbose_header && opt->output_format)
putchar(opt->line_termination); printf("%s%c", diff_line_prefix(opt),
opt->line_termination);
} }
diff_flush(&diffopts); diff_flush(&diffopts);
} }
@ -1172,7 +1186,8 @@ void diff_tree_combined(const unsigned char *sha1,
if (opt->output_format & DIFF_FORMAT_PATCH) { if (opt->output_format & DIFF_FORMAT_PATCH) {
if (needsep) if (needsep)
putchar(opt->line_termination); printf("%s%c", diff_line_prefix(opt),
opt->line_termination);
for (p = paths; p; p = p->next) { for (p = paths; p; p = p->next) {
if (p->len) if (p->len)
show_patch_diff(p, num_parent, dense, show_patch_diff(p, num_parent, dense,

131
diff.c
View file

@ -402,12 +402,7 @@ static void emit_line_0(struct diff_options *o, const char *set, const char *res
int nofirst; int nofirst;
FILE *file = o->file; FILE *file = o->file;
if (o->output_prefix) { fputs(diff_line_prefix(o), file);
struct strbuf *msg = NULL;
msg = o->output_prefix(o, o->output_prefix_data);
assert(msg);
fwrite(msg->buf, msg->len, 1, file);
}
if (len == 0) { if (len == 0) {
has_trailing_newline = (first == '\n'); has_trailing_newline = (first == '\n');
@ -625,13 +620,7 @@ static void emit_rewrite_diff(const char *name_a,
char *data_one, *data_two; char *data_one, *data_two;
size_t size_one, size_two; size_t size_one, size_two;
struct emit_callback ecbdata; struct emit_callback ecbdata;
char *line_prefix = ""; const char *line_prefix = diff_line_prefix(o);
struct strbuf *msgbuf;
if (o && o->output_prefix) {
msgbuf = o->output_prefix(o, o->output_prefix_data);
line_prefix = msgbuf->buf;
}
if (diff_mnemonic_prefix && DIFF_OPT_TST(o, REVERSE_DIFF)) { if (diff_mnemonic_prefix && DIFF_OPT_TST(o, REVERSE_DIFF)) {
a_prefix = o->b_prefix; a_prefix = o->b_prefix;
@ -827,18 +816,14 @@ static void fn_out_diff_words_aux(void *priv, char *line, unsigned long len)
int minus_first, minus_len, plus_first, plus_len; int minus_first, minus_len, plus_first, plus_len;
const char *minus_begin, *minus_end, *plus_begin, *plus_end; const char *minus_begin, *minus_end, *plus_begin, *plus_end;
struct diff_options *opt = diff_words->opt; struct diff_options *opt = diff_words->opt;
struct strbuf *msgbuf; const char *line_prefix;
char *line_prefix = "";
if (line[0] != '@' || parse_hunk_header(line, len, if (line[0] != '@' || parse_hunk_header(line, len,
&minus_first, &minus_len, &plus_first, &plus_len)) &minus_first, &minus_len, &plus_first, &plus_len))
return; return;
assert(opt); assert(opt);
if (opt->output_prefix) { line_prefix = diff_line_prefix(opt);
msgbuf = opt->output_prefix(opt, opt->output_prefix_data);
line_prefix = msgbuf->buf;
}
/* POSIX requires that first be decremented by one if len == 0... */ /* POSIX requires that first be decremented by one if len == 0... */
if (minus_len) { if (minus_len) {
@ -962,14 +947,10 @@ static void diff_words_show(struct diff_words_data *diff_words)
struct diff_words_style *style = diff_words->style; struct diff_words_style *style = diff_words->style;
struct diff_options *opt = diff_words->opt; struct diff_options *opt = diff_words->opt;
struct strbuf *msgbuf; const char *line_prefix;
char *line_prefix = "";
assert(opt); assert(opt);
if (opt->output_prefix) { line_prefix = diff_line_prefix(opt);
msgbuf = opt->output_prefix(opt, opt->output_prefix_data);
line_prefix = msgbuf->buf;
}
/* special case: only removal */ /* special case: only removal */
if (!diff_words->plus.text.size) { if (!diff_words->plus.text.size) {
@ -1105,6 +1086,16 @@ const char *diff_get_color(int diff_use_color, enum color_diff ix)
return ""; return "";
} }
const char *diff_line_prefix(struct diff_options *opt)
{
struct strbuf *msgbuf;
if (!opt->output_prefix)
return "";
msgbuf = opt->output_prefix(opt, opt->output_prefix_data);
return msgbuf->buf;
}
static unsigned long sane_truncate_line(struct emit_callback *ecb, char *line, unsigned long len) static unsigned long sane_truncate_line(struct emit_callback *ecb, char *line, unsigned long len)
{ {
const char *cp; const char *cp;
@ -1145,13 +1136,7 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
const char *plain = diff_get_color(ecbdata->color_diff, DIFF_PLAIN); const char *plain = diff_get_color(ecbdata->color_diff, DIFF_PLAIN);
const char *reset = diff_get_color(ecbdata->color_diff, DIFF_RESET); const char *reset = diff_get_color(ecbdata->color_diff, DIFF_RESET);
struct diff_options *o = ecbdata->opt; struct diff_options *o = ecbdata->opt;
char *line_prefix = ""; const char *line_prefix = diff_line_prefix(o);
struct strbuf *msgbuf;
if (o && o->output_prefix) {
msgbuf = o->output_prefix(o, o->output_prefix_data);
line_prefix = msgbuf->buf;
}
if (ecbdata->header) { if (ecbdata->header) {
fprintf(ecbdata->opt->file, "%s", ecbdata->header->buf); fprintf(ecbdata->opt->file, "%s", ecbdata->header->buf);
@ -1475,16 +1460,11 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options)
const char *reset, *add_c, *del_c; const char *reset, *add_c, *del_c;
const char *line_prefix = ""; const char *line_prefix = "";
int extra_shown = 0; int extra_shown = 0;
struct strbuf *msg = NULL;
if (data->nr == 0) if (data->nr == 0)
return; return;
if (options->output_prefix) { line_prefix = diff_line_prefix(options);
msg = options->output_prefix(options, options->output_prefix_data);
line_prefix = msg->buf;
}
count = options->stat_count ? options->stat_count : data->nr; count = options->stat_count ? options->stat_count : data->nr;
reset = diff_get_color_opt(options, DIFF_RESET); reset = diff_get_color_opt(options, DIFF_RESET);
@ -1736,12 +1716,7 @@ static void show_shortstats(struct diffstat_t *data, struct diff_options *option
dels += deleted; dels += deleted;
} }
} }
if (options->output_prefix) { fprintf(options->file, "%s", diff_line_prefix(options));
struct strbuf *msg = NULL;
msg = options->output_prefix(options,
options->output_prefix_data);
fprintf(options->file, "%s", msg->buf);
}
print_stat_summary(options->file, total_files, adds, dels); print_stat_summary(options->file, total_files, adds, dels);
} }
@ -1755,12 +1730,7 @@ static void show_numstat(struct diffstat_t *data, struct diff_options *options)
for (i = 0; i < data->nr; i++) { for (i = 0; i < data->nr; i++) {
struct diffstat_file *file = data->files[i]; struct diffstat_file *file = data->files[i];
if (options->output_prefix) { fprintf(options->file, "%s", diff_line_prefix(options));
struct strbuf *msg = NULL;
msg = options->output_prefix(options,
options->output_prefix_data);
fprintf(options->file, "%s", msg->buf);
}
if (file->is_binary) if (file->is_binary)
fprintf(options->file, "-\t-\t"); fprintf(options->file, "-\t-\t");
@ -1802,13 +1772,7 @@ static long gather_dirstat(struct diff_options *opt, struct dirstat_dir *dir,
{ {
unsigned long this_dir = 0; unsigned long this_dir = 0;
unsigned int sources = 0; unsigned int sources = 0;
const char *line_prefix = ""; const char *line_prefix = diff_line_prefix(opt);
struct strbuf *msg = NULL;
if (opt->output_prefix) {
msg = opt->output_prefix(opt, opt->output_prefix_data);
line_prefix = msg->buf;
}
while (dir->nr) { while (dir->nr) {
struct dirstat_file *f = dir->files; struct dirstat_file *f = dir->files;
@ -2058,15 +2022,10 @@ static void checkdiff_consume(void *priv, char *line, unsigned long len)
const char *reset = diff_get_color(data->o->use_color, DIFF_RESET); const char *reset = diff_get_color(data->o->use_color, DIFF_RESET);
const char *set = diff_get_color(data->o->use_color, DIFF_FILE_NEW); const char *set = diff_get_color(data->o->use_color, DIFF_FILE_NEW);
char *err; char *err;
char *line_prefix = ""; const char *line_prefix;
struct strbuf *msgbuf;
assert(data->o); assert(data->o);
if (data->o->output_prefix) { line_prefix = diff_line_prefix(data->o);
msgbuf = data->o->output_prefix(data->o,
data->o->output_prefix_data);
line_prefix = msgbuf->buf;
}
if (line[0] == '+') { if (line[0] == '+') {
unsigned bad; unsigned bad;
@ -2123,7 +2082,8 @@ static unsigned char *deflate_it(char *data,
return deflated; return deflated;
} }
static void emit_binary_diff_body(FILE *file, mmfile_t *one, mmfile_t *two, char *prefix) static void emit_binary_diff_body(FILE *file, mmfile_t *one, mmfile_t *two,
const char *prefix)
{ {
void *cp; void *cp;
void *delta; void *delta;
@ -2184,7 +2144,8 @@ static void emit_binary_diff_body(FILE *file, mmfile_t *one, mmfile_t *two, char
free(data); free(data);
} }
static void emit_binary_diff(FILE *file, mmfile_t *one, mmfile_t *two, char *prefix) static void emit_binary_diff(FILE *file, mmfile_t *one, mmfile_t *two,
const char *prefix)
{ {
fprintf(file, "%sGIT binary patch\n", prefix); fprintf(file, "%sGIT binary patch\n", prefix);
emit_binary_diff_body(file, one, two, prefix); emit_binary_diff_body(file, one, two, prefix);
@ -2251,13 +2212,7 @@ static void builtin_diff(const char *name_a,
struct userdiff_driver *textconv_one = NULL; struct userdiff_driver *textconv_one = NULL;
struct userdiff_driver *textconv_two = NULL; struct userdiff_driver *textconv_two = NULL;
struct strbuf header = STRBUF_INIT; struct strbuf header = STRBUF_INIT;
struct strbuf *msgbuf; const char *line_prefix = diff_line_prefix(o);
char *line_prefix = "";
if (o->output_prefix) {
msgbuf = o->output_prefix(o, o->output_prefix_data);
line_prefix = msgbuf->buf;
}
if (DIFF_OPT_TST(o, SUBMODULE_LOG) && if (DIFF_OPT_TST(o, SUBMODULE_LOG) &&
(!one->mode || S_ISGITLINK(one->mode)) && (!one->mode || S_ISGITLINK(one->mode)) &&
@ -2956,14 +2911,9 @@ static void fill_metainfo(struct strbuf *msg,
{ {
const char *set = diff_get_color(use_color, DIFF_METAINFO); const char *set = diff_get_color(use_color, DIFF_METAINFO);
const char *reset = diff_get_color(use_color, DIFF_RESET); const char *reset = diff_get_color(use_color, DIFF_RESET);
struct strbuf *msgbuf; const char *line_prefix = diff_line_prefix(o);
char *line_prefix = "";
*must_show_header = 1; *must_show_header = 1;
if (o->output_prefix) {
msgbuf = o->output_prefix(o, o->output_prefix_data);
line_prefix = msgbuf->buf;
}
strbuf_init(msg, PATH_MAX * 2 + 300); strbuf_init(msg, PATH_MAX * 2 + 300);
switch (p->status) { switch (p->status) {
case DIFF_STATUS_COPIED: case DIFF_STATUS_COPIED:
@ -3900,12 +3850,8 @@ static void diff_flush_raw(struct diff_filepair *p, struct diff_options *opt)
{ {
int line_termination = opt->line_termination; int line_termination = opt->line_termination;
int inter_name_termination = line_termination ? '\t' : '\0'; int inter_name_termination = line_termination ? '\t' : '\0';
if (opt->output_prefix) {
struct strbuf *msg = NULL;
msg = opt->output_prefix(opt, opt->output_prefix_data);
fprintf(opt->file, "%s", msg->buf);
}
fprintf(opt->file, "%s", diff_line_prefix(opt));
if (!(opt->output_format & DIFF_FORMAT_NAME_STATUS)) { if (!(opt->output_format & DIFF_FORMAT_NAME_STATUS)) {
fprintf(opt->file, ":%06o %06o %s ", p->one->mode, p->two->mode, fprintf(opt->file, ":%06o %06o %s ", p->one->mode, p->two->mode,
diff_unique_abbrev(p->one->sha1, opt->abbrev)); diff_unique_abbrev(p->one->sha1, opt->abbrev));
@ -4175,12 +4121,7 @@ static void show_rename_copy(FILE *file, const char *renamecopy, struct diff_fil
static void diff_summary(struct diff_options *opt, struct diff_filepair *p) static void diff_summary(struct diff_options *opt, struct diff_filepair *p)
{ {
FILE *file = opt->file; FILE *file = opt->file;
char *line_prefix = ""; const char *line_prefix = diff_line_prefix(opt);
if (opt->output_prefix) {
struct strbuf *buf = opt->output_prefix(opt, opt->output_prefix_data);
line_prefix = buf->buf;
}
switch(p->status) { switch(p->status) {
case DIFF_STATUS_DELETED: case DIFF_STATUS_DELETED:
@ -4481,13 +4422,9 @@ void diff_flush(struct diff_options *options)
if (output_format & DIFF_FORMAT_PATCH) { if (output_format & DIFF_FORMAT_PATCH) {
if (separator) { if (separator) {
if (options->output_prefix) { fprintf(options->file, "%s%c",
struct strbuf *msg = NULL; diff_line_prefix(options),
msg = options->output_prefix(options, options->line_termination);
options->output_prefix_data);
fwrite(msg->buf, msg->len, 1, stdout);
}
putc(options->line_termination, options->file);
if (options->stat_sep) { if (options->stat_sep) {
/* attach patch instead of inline */ /* attach patch instead of inline */
fputs(options->stat_sep, options->file); fputs(options->stat_sep, options->file);

3
diff.h
View file

@ -174,6 +174,9 @@ const char *diff_get_color(int diff_use_color, enum color_diff ix);
diff_get_color((o)->use_color, ix) diff_get_color((o)->use_color, ix)
const char *diff_line_prefix(struct diff_options *);
extern const char mime_boundary_leader[]; extern const char mime_boundary_leader[];
extern void diff_tree_setup_paths(const char **paths, struct diff_options *); extern void diff_tree_setup_paths(const char **paths, struct diff_options *);

10
graph.c
View file

@ -1227,6 +1227,16 @@ void graph_show_commit(struct git_graph *graph)
if (!graph) if (!graph)
return; return;
/*
* When showing a diff of a merge against each of its parents, we
* are called once for each parent without graph_update having been
* called. In this case, simply output a single padding line.
*/
if (graph_is_commit_finished(graph)) {
graph_show_padding(graph);
shown_commit_line = 1;
}
while (!shown_commit_line && !graph_is_commit_finished(graph)) { while (!shown_commit_line && !graph_is_commit_finished(graph)) {
shown_commit_line = graph_next_line(graph, &msgbuf); shown_commit_line = graph_next_line(graph, &msgbuf);
fwrite(msgbuf.buf, sizeof(char), msgbuf.len, stdout); fwrite(msgbuf.buf, sizeof(char), msgbuf.len, stdout);