On Fri, Dec 06, 2024 at 07:45:56PM +0000, Derrick Stolee via GitGitGadget wrote: > @@ -194,6 +201,134 @@ static void clear_strmap(struct strmap *map) > strmap_init(map); > } > > +static void setup_pending_objects(struct path_walk_info *info, > + struct path_walk_context *ctx) > +{ > + struct type_and_oid_list *tags = NULL; > + struct type_and_oid_list *tagged_blobs = NULL; > + struct type_and_oid_list *root_tree_list = NULL; > + > + if (info->tags) > + CALLOC_ARRAY(tags, 1); > + if (info->blobs) > + CALLOC_ARRAY(tagged_blobs, 1); > + if (info->trees) > + root_tree_list = strmap_get(&ctx->paths_to_lists, root_path); > + > + /* > + * Pending objects include: > + * * Commits at branch tips. > + * * Annotated tags at tag tips. > + * * Any kind of object at lightweight tag tips. > + * * Trees and blobs in the index (with an associated path). > + */ > + for (size_t i = 0; i < info->revs->pending.nr; i++) { > + struct object_array_entry *pending = info->revs->pending.objects + i; > + struct object *obj = pending->item; > + > + /* Commits will be picked up by revision walk. */ > + if (obj->type == OBJ_COMMIT) > + continue; > + > + /* Navigate annotated tag object chains. */ > + while (obj->type == OBJ_TAG) { > + struct tag *tag = lookup_tag(info->revs->repo, &obj->oid); > + if (!tag) > + break; Same here as previous comments, is this an error that we should rather report? [snip] > + if (tagged_blobs) { > + if (tagged_blobs->oids.nr) { > + const char *tagged_blob_path = "/tagged-blobs"; > + tagged_blobs->type = OBJ_BLOB; > + push_to_stack(ctx, tagged_blob_path); > + strmap_put(&ctx->paths_to_lists, tagged_blob_path, tagged_blobs); > + } else { > + oid_array_clear(&tagged_blobs->oids); > + free(tagged_blobs); > + } > + } > + if (tags) { > + if (tags->oids.nr) { > + const char *tag_path = "/tags"; > + tags->type = OBJ_TAG; > + push_to_stack(ctx, tag_path); > + strmap_put(&ctx->paths_to_lists, tag_path, tags); > + } else { > + oid_array_clear(&tags->oids); > + free(tags); > + } > + } > +} So this is kind of curious. Does that mean that a file named "tagged-blobs" would be thrown into the same bag as a tagged blob? Or are these special due to the leading "/"? Patrick