Merge branch 'js/log-to-diffopt-file'
The commands in the "log/diff" family have had an FILE* pointer in the data structure they pass around for a long time, but some codepaths used to always write to the standard output. As a preparatory step to make "git format-patch" available to the internal callers, these codepaths have been updated to consistently write into that FILE* instead. * js/log-to-diffopt-file: mingw: fix the shortlog --output=<file> test diff: do not color output when --color=auto and --output=<file> is given t4211: ensure that log respects --output=<file> shortlog: respect the --output=<file> setting format-patch: use stdout directly format-patch: avoid freopen() format-patch: explicitly switch off color when writing to files shortlog: support outputting to streams other than stdout graph: respect the diffopt.file setting line-log: respect diffopt's configured output file stream log-tree: respect diffopt's configured output file stream log: prepare log/log-tree to reuse the diffopt.close_file attribute
This commit is contained in:
69
log-tree.c
69
log-tree.c
@ -159,12 +159,12 @@ void load_ref_decorations(int flags)
|
||||
}
|
||||
}
|
||||
|
||||
static void show_parents(struct commit *commit, int abbrev)
|
||||
static void show_parents(struct commit *commit, int abbrev, FILE *file)
|
||||
{
|
||||
struct commit_list *p;
|
||||
for (p = commit->parents; p ; p = p->next) {
|
||||
struct commit *parent = p->item;
|
||||
printf(" %s", find_unique_abbrev(parent->object.oid.hash, abbrev));
|
||||
fprintf(file, " %s", find_unique_abbrev(parent->object.oid.hash, abbrev));
|
||||
}
|
||||
}
|
||||
|
||||
@ -172,7 +172,7 @@ static void show_children(struct rev_info *opt, struct commit *commit, int abbre
|
||||
{
|
||||
struct commit_list *p = lookup_decoration(&opt->children, &commit->object);
|
||||
for ( ; p; p = p->next) {
|
||||
printf(" %s", find_unique_abbrev(p->item->object.oid.hash, abbrev));
|
||||
fprintf(opt->diffopt.file, " %s", find_unique_abbrev(p->item->object.oid.hash, abbrev));
|
||||
}
|
||||
}
|
||||
|
||||
@ -286,11 +286,11 @@ void show_decorations(struct rev_info *opt, struct commit *commit)
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
|
||||
if (opt->show_source && commit->util)
|
||||
printf("\t%s", (char *) commit->util);
|
||||
fprintf(opt->diffopt.file, "\t%s", (char *) commit->util);
|
||||
if (!opt->show_decorations)
|
||||
return;
|
||||
format_decorations(&sb, commit, opt->diffopt.use_color);
|
||||
fputs(sb.buf, stdout);
|
||||
fputs(sb.buf, opt->diffopt.file);
|
||||
strbuf_release(&sb);
|
||||
}
|
||||
|
||||
@ -364,18 +364,18 @@ void log_write_email_headers(struct rev_info *opt, struct commit *commit,
|
||||
subject = "Subject: ";
|
||||
}
|
||||
|
||||
printf("From %s Mon Sep 17 00:00:00 2001\n", name);
|
||||
fprintf(opt->diffopt.file, "From %s Mon Sep 17 00:00:00 2001\n", name);
|
||||
graph_show_oneline(opt->graph);
|
||||
if (opt->message_id) {
|
||||
printf("Message-Id: <%s>\n", opt->message_id);
|
||||
fprintf(opt->diffopt.file, "Message-Id: <%s>\n", opt->message_id);
|
||||
graph_show_oneline(opt->graph);
|
||||
}
|
||||
if (opt->ref_message_ids && opt->ref_message_ids->nr > 0) {
|
||||
int i, n;
|
||||
n = opt->ref_message_ids->nr;
|
||||
printf("In-Reply-To: <%s>\n", opt->ref_message_ids->items[n-1].string);
|
||||
fprintf(opt->diffopt.file, "In-Reply-To: <%s>\n", opt->ref_message_ids->items[n-1].string);
|
||||
for (i = 0; i < n; i++)
|
||||
printf("%s<%s>\n", (i > 0 ? "\t" : "References: "),
|
||||
fprintf(opt->diffopt.file, "%s<%s>\n", (i > 0 ? "\t" : "References: "),
|
||||
opt->ref_message_ids->items[i].string);
|
||||
graph_show_oneline(opt->graph);
|
||||
}
|
||||
@ -432,7 +432,7 @@ static void show_sig_lines(struct rev_info *opt, int status, const char *bol)
|
||||
reset = diff_get_color_opt(&opt->diffopt, DIFF_RESET);
|
||||
while (*bol) {
|
||||
eol = strchrnul(bol, '\n');
|
||||
printf("%s%.*s%s%s", color, (int)(eol - bol), bol, reset,
|
||||
fprintf(opt->diffopt.file, "%s%.*s%s%s", color, (int)(eol - bol), bol, reset,
|
||||
*eol ? "\n" : "");
|
||||
graph_show_oneline(opt->graph);
|
||||
bol = (*eol) ? (eol + 1) : eol;
|
||||
@ -553,17 +553,17 @@ void show_log(struct rev_info *opt)
|
||||
|
||||
if (!opt->graph)
|
||||
put_revision_mark(opt, commit);
|
||||
fputs(find_unique_abbrev(commit->object.oid.hash, abbrev_commit), stdout);
|
||||
fputs(find_unique_abbrev(commit->object.oid.hash, abbrev_commit), opt->diffopt.file);
|
||||
if (opt->print_parents)
|
||||
show_parents(commit, abbrev_commit);
|
||||
show_parents(commit, abbrev_commit, opt->diffopt.file);
|
||||
if (opt->children.name)
|
||||
show_children(opt, commit, abbrev_commit);
|
||||
show_decorations(opt, commit);
|
||||
if (opt->graph && !graph_is_commit_finished(opt->graph)) {
|
||||
putchar('\n');
|
||||
putc('\n', opt->diffopt.file);
|
||||
graph_show_remainder(opt->graph);
|
||||
}
|
||||
putchar(opt->diffopt.line_termination);
|
||||
putc(opt->diffopt.line_termination, opt->diffopt.file);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -589,7 +589,7 @@ void show_log(struct rev_info *opt)
|
||||
if (opt->diffopt.line_termination == '\n' &&
|
||||
!opt->missing_newline)
|
||||
graph_show_padding(opt->graph);
|
||||
putchar(opt->diffopt.line_termination);
|
||||
putc(opt->diffopt.line_termination, opt->diffopt.file);
|
||||
}
|
||||
opt->shown_one = 1;
|
||||
|
||||
@ -607,28 +607,28 @@ void show_log(struct rev_info *opt)
|
||||
log_write_email_headers(opt, commit, &ctx.subject, &extra_headers,
|
||||
&ctx.need_8bit_cte);
|
||||
} else if (opt->commit_format != CMIT_FMT_USERFORMAT) {
|
||||
fputs(diff_get_color_opt(&opt->diffopt, DIFF_COMMIT), stdout);
|
||||
fputs(diff_get_color_opt(&opt->diffopt, DIFF_COMMIT), opt->diffopt.file);
|
||||
if (opt->commit_format != CMIT_FMT_ONELINE)
|
||||
fputs("commit ", stdout);
|
||||
fputs("commit ", opt->diffopt.file);
|
||||
|
||||
if (!opt->graph)
|
||||
put_revision_mark(opt, commit);
|
||||
fputs(find_unique_abbrev(commit->object.oid.hash, abbrev_commit),
|
||||
stdout);
|
||||
opt->diffopt.file);
|
||||
if (opt->print_parents)
|
||||
show_parents(commit, abbrev_commit);
|
||||
show_parents(commit, abbrev_commit, opt->diffopt.file);
|
||||
if (opt->children.name)
|
||||
show_children(opt, commit, abbrev_commit);
|
||||
if (parent)
|
||||
printf(" (from %s)",
|
||||
fprintf(opt->diffopt.file, " (from %s)",
|
||||
find_unique_abbrev(parent->object.oid.hash,
|
||||
abbrev_commit));
|
||||
fputs(diff_get_color_opt(&opt->diffopt, DIFF_RESET), stdout);
|
||||
fputs(diff_get_color_opt(&opt->diffopt, DIFF_RESET), opt->diffopt.file);
|
||||
show_decorations(opt, commit);
|
||||
if (opt->commit_format == CMIT_FMT_ONELINE) {
|
||||
putchar(' ');
|
||||
putc(' ', opt->diffopt.file);
|
||||
} else {
|
||||
putchar('\n');
|
||||
putc('\n', opt->diffopt.file);
|
||||
graph_show_oneline(opt->graph);
|
||||
}
|
||||
if (opt->reflog_info) {
|
||||
@ -704,7 +704,7 @@ void show_log(struct rev_info *opt)
|
||||
}
|
||||
|
||||
if (opt->show_log_size) {
|
||||
printf("log size %i\n", (int)msgbuf.len);
|
||||
fprintf(opt->diffopt.file, "log size %i\n", (int)msgbuf.len);
|
||||
graph_show_oneline(opt->graph);
|
||||
}
|
||||
|
||||
@ -720,11 +720,11 @@ void show_log(struct rev_info *opt)
|
||||
if (opt->graph)
|
||||
graph_show_commit_msg(opt->graph, &msgbuf);
|
||||
else
|
||||
fwrite(msgbuf.buf, sizeof(char), msgbuf.len, stdout);
|
||||
fwrite(msgbuf.buf, sizeof(char), msgbuf.len, opt->diffopt.file);
|
||||
if (opt->use_terminator && !commit_format_is_empty(opt->commit_format)) {
|
||||
if (!opt->missing_newline)
|
||||
graph_show_padding(opt->graph);
|
||||
putchar(opt->diffopt.line_termination);
|
||||
putc(opt->diffopt.line_termination, opt->diffopt.file);
|
||||
}
|
||||
|
||||
strbuf_release(&msgbuf);
|
||||
@ -761,7 +761,7 @@ int log_tree_diff_flush(struct rev_info *opt)
|
||||
struct strbuf *msg = NULL;
|
||||
msg = opt->diffopt.output_prefix(&opt->diffopt,
|
||||
opt->diffopt.output_prefix_data);
|
||||
fwrite(msg->buf, msg->len, 1, stdout);
|
||||
fwrite(msg->buf, msg->len, 1, opt->diffopt.file);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -776,8 +776,8 @@ int log_tree_diff_flush(struct rev_info *opt)
|
||||
*/
|
||||
if (!opt->shown_dashes &&
|
||||
(pch & opt->diffopt.output_format) == pch)
|
||||
printf("---");
|
||||
putchar('\n');
|
||||
fprintf(opt->diffopt.file, "---");
|
||||
putc('\n', opt->diffopt.file);
|
||||
}
|
||||
}
|
||||
diff_flush(&opt->diffopt);
|
||||
@ -864,17 +864,18 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
|
||||
int log_tree_commit(struct rev_info *opt, struct commit *commit)
|
||||
{
|
||||
struct log_info log;
|
||||
int shown;
|
||||
int shown, close_file = opt->diffopt.close_file;
|
||||
|
||||
log.commit = commit;
|
||||
log.parent = NULL;
|
||||
opt->loginfo = &log;
|
||||
opt->diffopt.close_file = 0;
|
||||
|
||||
if (opt->line_level_traverse)
|
||||
return line_log_print(opt, commit);
|
||||
|
||||
if (opt->track_linear && !opt->linear && !opt->reverse_output_stage)
|
||||
printf("\n%s\n", opt->break_bar);
|
||||
fprintf(opt->diffopt.file, "\n%s\n", opt->break_bar);
|
||||
shown = log_tree_diff(opt, commit, &log);
|
||||
if (!shown && opt->loginfo && opt->always_show_header) {
|
||||
log.parent = NULL;
|
||||
@ -882,8 +883,10 @@ int log_tree_commit(struct rev_info *opt, struct commit *commit)
|
||||
shown = 1;
|
||||
}
|
||||
if (opt->track_linear && !opt->linear && opt->reverse_output_stage)
|
||||
printf("\n%s\n", opt->break_bar);
|
||||
fprintf(opt->diffopt.file, "\n%s\n", opt->break_bar);
|
||||
opt->loginfo = NULL;
|
||||
maybe_flush_or_die(stdout, "stdout");
|
||||
maybe_flush_or_die(opt->diffopt.file, "stdout");
|
||||
if (close_file)
|
||||
fclose(opt->diffopt.file);
|
||||
return shown;
|
||||
}
|
||||
|
Reference in New Issue
Block a user