summaryrefslogtreecommitdiff
path: root/revision.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2019-02-05 22:26:10 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-02-05 22:26:10 (GMT)
commit09b2e40944f297d6cabe0fb0ce2e3a72e610f657 (patch)
treeb072876ef22d7227d649e40998400d81f2fdeb86 /revision.c
parent073312b4c7a15d484d2ffdc2eb4a406df9cf9c55 (diff)
parentec0c5798ee9376382d44163d38156fd47e8001c2 (diff)
downloadgit-09b2e40944f297d6cabe0fb0ce2e3a72e610f657.zip
git-09b2e40944f297d6cabe0fb0ce2e3a72e610f657.tar.gz
git-09b2e40944f297d6cabe0fb0ce2e3a72e610f657.tar.bz2
Merge branch 'jt/get-reference-with-commit-graph'
Micro-optimize the code that prepares commit objects to be walked by "git rev-list" when the commit-graph is available. * jt/get-reference-with-commit-graph: revision: use commit graph in get_reference()
Diffstat (limited to 'revision.c')
-rw-r--r--revision.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/revision.c b/revision.c
index 119947c..8f886fe 100644
--- a/revision.c
+++ b/revision.c
@@ -213,7 +213,20 @@ static struct object *get_reference(struct rev_info *revs, const char *name,
{
struct object *object;
- object = parse_object(revs->repo, oid);
+ /*
+ * If the repository has commit graphs, repo_parse_commit() avoids
+ * reading the object buffer, so use it whenever possible.
+ */
+ if (oid_object_info(revs->repo, oid, NULL) == OBJ_COMMIT) {
+ struct commit *c = lookup_commit(revs->repo, oid);
+ if (!repo_parse_commit(revs->repo, c))
+ object = (struct object *) c;
+ else
+ object = NULL;
+ } else {
+ object = parse_object(revs->repo, oid);
+ }
+
if (!object) {
if (revs->ignore_missing)
return object;