Subject: Re: [PATCH 2/7] move setting of object->type to alloc_* functions

From: Ramsay Jones <[email-masked]>
Date: Sat, 12 Jul 2014 15:55:35 +0100

On 11/07/14 09:46, Jeff King wrote:

[snip]

Sorry, hit send too early ...

> diff --git a/blob.c b/blob.c
> index ae320bd..5720a38 100644
> --- a/blob.c
> +++ b/blob.c
> @@ -7,7 +7,7 @@ struct blob *lookup_blob(const unsigned char *sha1)
>  {
>  	struct object *obj = lookup_object(sha1);
>  	if (!obj)
> -		return create_object(sha1, OBJ_BLOB, alloc_blob_node());
> +		return create_object(sha1, alloc_blob_node());
>  	if (!obj->type)
>  		obj->type = OBJ_BLOB;
>  	if (obj->type != OBJ_BLOB) {
> diff --git a/builtin/blame.c b/builtin/blame.c
> index d3b256e..8f3e311 100644
> --- a/builtin/blame.c
> +++ b/builtin/blame.c
> @@ -2287,7 +2287,6 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
>  	commit = alloc_commit_node();
>  	commit->object.parsed = 1;
>  	commit->date = now;
> -	commit->object.type = OBJ_COMMIT;
>  	parent_tail = &commit->parents;
>  
>  	if (!resolve_ref_unsafe("HEAD", head_sha1, 1, NULL))
> diff --git a/commit.c b/commit.c
> index fb7897c..21ed310 100644
> --- a/commit.c
> +++ b/commit.c
> @@ -63,7 +63,7 @@ struct commit *lookup_commit(const unsigned char *sha1)
>  	struct object *obj = lookup_object(sha1);
>  	if (!obj) {
>  		struct commit *c = alloc_commit_node();
> -		return create_object(sha1, OBJ_COMMIT, c);
> +		return create_object(sha1, c);
>  	}

perhaps:
	if (!obj)
		return create_object(sha1, alloc_commit_node());

(increasing similarity with other calls here ...)

>  	if (!obj->type)
>  		obj->type = OBJ_COMMIT;
> diff --git a/object.c b/object.c
> index 9c31e9a..a950b85 100644
> --- a/object.c
> +++ b/object.c
> @@ -141,13 +141,12 @@ static void grow_object_hash(void)
>  	obj_hash_size = new_hash_size;
>  }
>  
> -void *create_object(const unsigned char *sha1, int type, void *o)
> +void *create_object(const unsigned char *sha1, void *o)
>  {
>  	struct object *obj = o;
>  
>  	obj->parsed = 0;
>  	obj->used = 0;
> -	obj->type = type;
>  	obj->flags = 0;
>  	hashcpy(obj->sha1, sha1);
>  
> @@ -163,7 +162,7 @@ struct object *lookup_unknown_object(const unsigned char *sha1)
>  {
>  	struct object *obj = lookup_object(sha1);
>  	if (!obj)
> -		obj = create_object(sha1, OBJ_NONE, alloc_object_node());
> +		obj = create_object(sha1, alloc_object_node());
>  	return obj;
>  }
>  
> diff --git a/object.h b/object.h
> index 6e12f2c..8020ace 100644
> --- a/object.h
> +++ b/object.h
> @@ -79,7 +79,7 @@ extern struct object *get_indexed_object(unsigned int);
>   */
>  struct object *lookup_object(const unsigned char *sha1);
>  
> -extern void *create_object(const unsigned char *sha1, int type, void *obj);
> +extern void *create_object(const unsigned char *sha1, void *obj);
>  
>  /*
>   * Returns the object, having parsed it to find out what it is.
> diff --git a/tag.c b/tag.c
> index 7b07921..79552c7 100644
> --- a/tag.c
> +++ b/tag.c
> @@ -40,7 +40,7 @@ struct tag *lookup_tag(const unsigned char *sha1)
>  {
>  	struct object *obj = lookup_object(sha1);
>  	if (!obj)
> -		return create_object(sha1, OBJ_TAG, alloc_tag_node());
> +		return create_object(sha1, alloc_tag_node());
>  	if (!obj->type)
>  		obj->type = OBJ_TAG;
>  	if (obj->type != OBJ_TAG) {
> diff --git a/tree.c b/tree.c
> index c8c49d7..ed66575 100644
> --- a/tree.c
> +++ b/tree.c
> @@ -183,7 +183,7 @@ struct tree *lookup_tree(const unsigned char *sha1)
>  {
>  	struct object *obj = lookup_object(sha1);
>  	if (!obj)
> -		return create_object(sha1, OBJ_TREE, alloc_tree_node());
> +		return create_object(sha1, alloc_tree_node());
>  	if (!obj->type)
>  		obj->type = OBJ_TREE;
>  	if (obj->type != OBJ_TREE) {
> 

ATB,
Ramsay Jones