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:
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;
|
int showed_log;
|
||||||
struct commit_list *parents;
|
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))
|
if (!opt->diff && !DIFF_OPT_TST(&opt->diffopt, EXIT_WITH_STATUS))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
parse_commit(commit);
|
||||||
|
sha1 = commit->tree->object.sha1;
|
||||||
|
|
||||||
/* Root commit? */
|
/* Root commit? */
|
||||||
parents = commit->parents;
|
parents = commit->parents;
|
||||||
if (!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
|
* parent, showing summary diff of the others
|
||||||
* we merged _in_.
|
* 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);
|
log_tree_diff_flush(opt);
|
||||||
return !opt->loginfo;
|
return !opt->loginfo;
|
||||||
}
|
}
|
||||||
@ -749,7 +754,9 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
|
|||||||
for (;;) {
|
for (;;) {
|
||||||
struct commit *parent = parents->item;
|
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);
|
log_tree_diff_flush(opt);
|
||||||
|
|
||||||
showed_log |= !opt->loginfo;
|
showed_log |= !opt->loginfo;
|
||||||
|
Reference in New Issue
Block a user