Re: [PATCH v3 5/7] path-walk: visit tags and cached objects

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux