Merge branch 'ds/lazy-load-trees'

The code has been taught to use the duplicated information stored
in the commit-graph file to learn the tree object name for a commit
to avoid opening and parsing the commit object when it makes sense
to do so.

* ds/lazy-load-trees:
  coccinelle: avoid wrong transformation suggestions from commit.cocci
  commit-graph: lazy-load trees for commits
  treewide: replace maybe_tree with accessor methods
  commit: create get_commit_tree() method
  treewide: rename tree to maybe_tree
This commit is contained in:
Junio C Hamano
2018-05-23 14:38:13 +09:00
26 changed files with 152 additions and 66 deletions

View File

@ -600,14 +600,14 @@ int notes_merge(struct notes_merge_options *o,
printf("No merge base found; doing history-less merge\n");
} else if (!bases->next) {
base_oid = &bases->item->object.oid;
base_tree_oid = &bases->item->tree->object.oid;
base_tree_oid = get_commit_tree_oid(bases->item);
if (o->verbosity >= 4)
printf("One merge base found (%.7s)\n",
oid_to_hex(base_oid));
} else {
/* TODO: How to handle multiple merge-bases? */
base_oid = &bases->item->object.oid;
base_tree_oid = &bases->item->tree->object.oid;
base_tree_oid = get_commit_tree_oid(bases->item);
if (o->verbosity >= 3)
printf("Multiple merge bases found. Using the first "
"(%.7s)\n", oid_to_hex(base_oid));
@ -634,8 +634,9 @@ int notes_merge(struct notes_merge_options *o,
goto found_result;
}
result = merge_from_diffs(o, base_tree_oid, &local->tree->object.oid,
&remote->tree->object.oid, local_tree);
result = merge_from_diffs(o, base_tree_oid,
get_commit_tree_oid(local),
get_commit_tree_oid(remote), local_tree);
if (result != 0) { /* non-trivial merge (with or without conflicts) */
/* Commit (partial) result */