aboutsummaryrefslogtreecommitdiffstats
path: root/log-tree.c
diff options
context:
space:
mode:
authorJiang Xin <worldhello.net@gmail.com>2021-08-03 17:03:35 +0800
committerJiang Xin <worldhello.net@gmail.com>2021-08-03 17:03:35 +0800
commit972c9cf6aed660f3b4189a8f2adda505e67110ff (patch)
tree350bb2a29eb3360cdf36a30d8c8e7c76c3e61851 /log-tree.c
parentae4e099e7cd2fcb7abdcce1b4fe02b40d5e4a61b (diff)
parent66262451ec94d30ac4b80eb3123549cf7a788afd (diff)
downloadgit-972c9cf6aed660f3b4189a8f2adda505e67110ff.tar.gz
Merge branch 'master' of github.com:git/git
* 'master' of github.com:git/git: (397 commits) Git 2.33-rc0 The seventh batch ci/install-dependencies: handle "sparse" job package installs ci: run "apt-get update" before "apt-get install" cache-tree: prefetch in partial clone read-tree unpack-trees: refactor prefetching code pack-bitmap: check pack validity when opening bitmap bundle tests: use test_cmp instead of grep bundle tests: use ">file" not ": >file" The sixth batch doc: pull: fix rebase=false documentation pack-bitmap: clarify comment in filter_bitmap_exclude_type() doc: clarify description of 'submodule.recurse' doc/git-config: simplify "override" advice for FILES section doc/git-config: clarify GIT_CONFIG environment variable doc/git-config: explain --file instead of referring to GIT_CONFIG t0000: fix test if run with TEST_OUTPUT_DIRECTORY multi-pack-index: fix potential segfault without sub-command refs/debug: quote prefix t0000: clear GIT_SKIP_TESTS before running sub-tests ...
Diffstat (limited to 'log-tree.c')
-rw-r--r--log-tree.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/log-tree.c b/log-tree.c
index 7b823786c2..6dc4412268 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -134,7 +134,8 @@ static int add_ref_decoration(const char *refname, const struct object_id *oid,
int flags, void *cb_data)
{
struct object *obj;
- enum decoration_type type = DECORATION_NONE;
+ enum object_type objtype;
+ enum decoration_type deco_type = DECORATION_NONE;
struct decoration_filter *filter = (struct decoration_filter *)cb_data;
if (filter && !ref_filter_match(refname, filter))
@@ -155,28 +156,29 @@ static int add_ref_decoration(const char *refname, const struct object_id *oid,
return 0;
}
- obj = parse_object(the_repository, oid);
- if (!obj)
+ objtype = oid_object_info(the_repository, oid, NULL);
+ if (objtype < 0)
return 0;
+ obj = lookup_object_by_type(the_repository, oid, objtype);
if (starts_with(refname, "refs/heads/"))
- type = DECORATION_REF_LOCAL;
+ deco_type = DECORATION_REF_LOCAL;
else if (starts_with(refname, "refs/remotes/"))
- type = DECORATION_REF_REMOTE;
+ deco_type = DECORATION_REF_REMOTE;
else if (starts_with(refname, "refs/tags/"))
- type = DECORATION_REF_TAG;
+ deco_type = DECORATION_REF_TAG;
else if (!strcmp(refname, "refs/stash"))
- type = DECORATION_REF_STASH;
+ deco_type = DECORATION_REF_STASH;
else if (!strcmp(refname, "HEAD"))
- type = DECORATION_REF_HEAD;
+ deco_type = DECORATION_REF_HEAD;
- add_name_decoration(type, refname, obj);
+ add_name_decoration(deco_type, refname, obj);
while (obj->type == OBJ_TAG) {
+ if (!obj->parsed)
+ parse_object(the_repository, &obj->oid);
obj = ((struct tag *)obj)->tagged;
if (!obj)
break;
- if (!obj->parsed)
- parse_object(the_repository, &obj->oid);
add_name_decoration(DECORATION_REF_TAG, refname, obj);
}
return 0;