Merge branch 'tr/log-tree-optim'
Optimize "log" that shows the difference between the parent and the child. * tr/log-tree-optim: Avoid loading commits twice in log with diffs
This commit is contained in:
commit
48799d1c6b
13
log-tree.c
13
log-tree.c
@ -709,11 +709,14 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
|
||||
{
|
||||
int showed_log;
|
||||
struct commit_list *parents;
|
||||
unsigned const char *sha1 = commit->object.sha1;
|
||||
unsigned const char *sha1;
|
||||
|
||||
if (!opt->diff && !DIFF_OPT_TST(&opt->diffopt, EXIT_WITH_STATUS))
|
||||
return 0;
|
||||
|
||||
parse_commit(commit);
|
||||
sha1 = commit->tree->object.sha1;
|
||||
|
||||
/* Root commit? */
|
||||
parents = commit->parents;
|
||||
if (!parents) {
|
||||
@ -736,7 +739,9 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
|
||||
* parent, showing summary diff of the others
|
||||
* we merged _in_.
|
||||
*/
|
||||
diff_tree_sha1(parents->item->object.sha1, sha1, "", &opt->diffopt);
|
||||
parse_commit(parents->item);
|
||||
diff_tree_sha1(parents->item->tree->object.sha1,
|
||||
sha1, "", &opt->diffopt);
|
||||
log_tree_diff_flush(opt);
|
||||
return !opt->loginfo;
|
||||
}
|
||||
@ -749,7 +754,9 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
|
||||
for (;;) {
|
||||
struct commit *parent = parents->item;
|
||||
|
||||
diff_tree_sha1(parent->object.sha1, sha1, "", &opt->diffopt);
|
||||
parse_commit(parent);
|
||||
diff_tree_sha1(parent->tree->object.sha1,
|
||||
sha1, "", &opt->diffopt);
|
||||
log_tree_diff_flush(opt);
|
||||
|
||||
showed_log |= !opt->loginfo;
|
||||
|
Loading…
Reference in New Issue
Block a user