Skip to content

Commit

Permalink
combine-diff: move show_log_first logic/action out of paths scanning
Browse files Browse the repository at this point in the history
Judging from sample outputs and tests nothing changes in diff -c output,
and this change will help later patches, when we'll be refactoring paths
scanning into its own function with several variants - the
show_log_first logic / code will stay common to all of them.

NOTE: only now we have to take care to explicitly not show anything if
    parents array is empty, as in fact there are some clients in Git code,
    which calls diff_tree_combined() in such a way.

Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Kirill Smelkov authored and Junio C Hamano committed Feb 24, 2014
1 parent fce135c commit 51af188
Showing 1 changed file with 14 additions and 10 deletions.
24 changes: 14 additions & 10 deletions combine-diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -1311,6 +1311,20 @@ void diff_tree_combined(const unsigned char *sha1,
struct combine_diff_path *p, *paths = NULL;
int i, num_paths, needsep, show_log_first, num_parent = parents->nr;

/* nothing to do, if no parents */
if (!num_parent)
return;

show_log_first = !!rev->loginfo && !rev->no_commit_id;
needsep = 0;
if (show_log_first) {
show_log(rev);

if (rev->verbose_header && opt->output_format)
printf("%s%c", diff_line_prefix(opt),
opt->line_termination);
}

diffopts = *opt;
copy_pathspec(&diffopts.pathspec, &opt->pathspec);
diffopts.output_format = DIFF_FORMAT_NO_OUTPUT;
Expand All @@ -1319,8 +1333,6 @@ void diff_tree_combined(const unsigned char *sha1,
/* tell diff_tree to emit paths in sorted (=tree) order */
diffopts.orderfile = NULL;

show_log_first = !!rev->loginfo && !rev->no_commit_id;
needsep = 0;
/* find set of paths that everybody touches */
for (i = 0; i < num_parent; i++) {
/* show stat against the first parent even
Expand All @@ -1336,14 +1348,6 @@ void diff_tree_combined(const unsigned char *sha1,
diffcore_std(&diffopts);
paths = intersect_paths(paths, i, num_parent);

if (show_log_first && i == 0) {
show_log(rev);

if (rev->verbose_header && opt->output_format)
printf("%s%c", diff_line_prefix(opt),
opt->line_termination);
}

/* if showing diff, show it in requested order */
if (diffopts.output_format != DIFF_FORMAT_NO_OUTPUT &&
opt->orderfile) {
Expand Down

0 comments on commit 51af188

Please sign in to comment.