diff options
| author | Junio C Hamano <gitster@pobox.com> | 2019-02-05 14:26:10 -0800 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2019-02-05 14:26:10 -0800 |
| commit | 09b2e40944f297d6cabe0fb0ce2e3a72e610f657 (patch) | |
| tree | b072876ef22d7227d649e40998400d81f2fdeb86 /revision.c | |
| parent | 073312b4c7a15d484d2ffdc2eb4a406df9cf9c55 (diff) | |
| parent | ec0c5798ee9376382d44163d38156fd47e8001c2 (diff) | |
| download | git-09b2e40944f297d6cabe0fb0ce2e3a72e610f657.tar.gz | |
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.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/revision.c b/revision.c index 119947ced0..8f886fe8c6 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; |
