Re: [PATCH 08/12] object-file-convert: stop depending on `the_repository`

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

 



On 25/03/03 09:47AM, Patrick Steinhardt wrote:
> There are multiple sites in "object-file-convert.c" where we use the
> global `the_repository` variable, either explicitly or implicitly by
> using `the_hash_algo`. All of these callsites are transitively called
> from `convert_object_file()`, which indeed has no repo as input.
> 
> Refactor the function so that it receives a repository as parameter and

s/parameter/a &/

> pass it through to all internal functions to get rid of the dependency.
> Remove the `USE_THE_REPOSITORY_VARIABLE` define.
> 
> Signed-off-by: Patrick Steinhardt <ps@xxxxxx>
> ---
>  builtin/tag.c         |  2 +-
>  commit.c              |  2 +-
>  object-file-convert.c | 29 ++++++++++++++++-------------
>  object-file-convert.h |  3 ++-
>  object-file.c         |  7 ++++---
>  5 files changed, 24 insertions(+), 19 deletions(-)
> 
> diff --git a/builtin/tag.c b/builtin/tag.c
> index d3e0943b734..7c173535cb3 100644
> --- a/builtin/tag.c
> +++ b/builtin/tag.c
> @@ -172,7 +172,7 @@ static int do_sign(struct strbuf *buffer, struct object_id **compat_oid,
>  	if (compat) {
>  		const struct git_hash_algo *algo = the_repository->hash_algo;
>  
> -		if (convert_object_file(&compat_buf, algo, compat,
> +		if (convert_object_file(the_repository ,&compat_buf, algo, compat,
>  					buffer->buf, buffer->len, OBJ_TAG, 1))
>  			goto out;
>  		if (sign_buffer(&compat_buf, &compat_sig, keyid))
> diff --git a/commit.c b/commit.c
> index 6efdb03997d..48aeefaad31 100644
> --- a/commit.c
> +++ b/commit.c
> @@ -1380,7 +1380,7 @@ static int convert_commit_extra_headers(const struct commit_extra_header *orig,
>  		struct commit_extra_header *new;
>  		CALLOC_ARRAY(new, 1);
>  		if (!strcmp(orig->key, "mergetag")) {
> -			if (convert_object_file(&out, algo, compat,
> +			if (convert_object_file(the_repository, &out, algo, compat,
>  						orig->value, orig->len,
>  						OBJ_TAG, 1)) {
>  				free(new);
> diff --git a/object-file-convert.c b/object-file-convert.c
> index eba71955cf7..7ab875afe6c 100644
> --- a/object-file-convert.c
> +++ b/object-file-convert.c
> @@ -1,4 +1,3 @@
> -#define USE_THE_REPOSITORY_VARIABLE

Looking good :)

>  #define DISABLE_SIGN_COMPARE_WARNINGS
>  
>  #include "git-compat-util.h"
> @@ -63,7 +62,8 @@ static int decode_tree_entry_raw(struct object_id *oid, const char **path,
>  	return 0;
>  }
>  
> -static int convert_tree_object(struct strbuf *out,
> +static int convert_tree_object(struct repository *repo,
> +			       struct strbuf *out,
>  			       const struct git_hash_algo *from,
>  			       const struct git_hash_algo *to,
>  			       const char *buffer, size_t size)
> @@ -78,7 +78,7 @@ static int convert_tree_object(struct strbuf *out,
>  		if (decode_tree_entry_raw(&entry_oid, &path, &pathlen, from, p,
>  					  end - p))
>  			return error(_("failed to decode tree entry"));
> -		if (repo_oid_to_algop(the_repository, &entry_oid, to, &mapped_oid))
> +		if (repo_oid_to_algop(repo, &entry_oid, to, &mapped_oid))
>  			return error(_("failed to map tree entry for %s"), oid_to_hex(&entry_oid));
>  		strbuf_add(out, p, path - p);
>  		strbuf_add(out, path, pathlen);
> @@ -88,7 +88,8 @@ static int convert_tree_object(struct strbuf *out,
>  	return 0;
>  }
>  
> -static int convert_tag_object(struct strbuf *out,
> +static int convert_tag_object(struct repository *repo,
> +			      struct strbuf *out,
>  			      const struct git_hash_algo *from,
>  			      const struct git_hash_algo *to,
>  			      const char *buffer, size_t size)
> @@ -105,7 +106,7 @@ static int convert_tag_object(struct strbuf *out,
>  		return error("bogus tag object");
>  	if (parse_oid_hex_algop(buffer + 7, &oid, &p, from) < 0)
>  		return error("bad tag object ID");
> -	if (repo_oid_to_algop(the_repository, &oid, to, &mapped_oid))
> +	if (repo_oid_to_algop(repo, &oid, to, &mapped_oid))
>  		return error("unable to map tree %s in tag object",
>  			     oid_to_hex(&oid));
>  	size -= ((p + 1) - buffer);
> @@ -139,7 +140,8 @@ static int convert_tag_object(struct strbuf *out,
>  	return 0;
>  }
>  
> -static int convert_commit_object(struct strbuf *out,
> +static int convert_commit_object(struct repository *repo,
> +				 struct strbuf *out,
>  				 const struct git_hash_algo *from,
>  				 const struct git_hash_algo *to,
>  				 const char *buffer, size_t size)
> @@ -165,7 +167,7 @@ static int convert_commit_object(struct strbuf *out,
>  			    (p != eol))
>  				return error(_("bad %s in commit"), "tree");
>  
> -			if (repo_oid_to_algop(the_repository, &oid, to, &mapped_oid))
> +			if (repo_oid_to_algop(repo, &oid, to, &mapped_oid))
>  				return error(_("unable to map %s %s in commit object"),
>  					     "tree", oid_to_hex(&oid));
>  			strbuf_addf(out, "tree %s\n", oid_to_hex(&mapped_oid));
> @@ -177,7 +179,7 @@ static int convert_commit_object(struct strbuf *out,
>  			    (p != eol))
>  				return error(_("bad %s in commit"), "parent");
>  
> -			if (repo_oid_to_algop(the_repository, &oid, to, &mapped_oid))
> +			if (repo_oid_to_algop(repo, &oid, to, &mapped_oid))
>  				return error(_("unable to map %s %s in commit object"),
>  					     "parent", oid_to_hex(&oid));
>  
> @@ -202,7 +204,7 @@ static int convert_commit_object(struct strbuf *out,
>  			}
>  
>  			/* Compute the new tag object */
> -			if (convert_tag_object(&new_tag, from, to, tag.buf, tag.len)) {
> +			if (convert_tag_object(repo, &new_tag, from, to, tag.buf, tag.len)) {
>  				strbuf_release(&tag);
>  				strbuf_release(&new_tag);
>  				return -1;
> @@ -241,7 +243,8 @@ static int convert_commit_object(struct strbuf *out,
>  	return 0;
>  }
>  
> -int convert_object_file(struct strbuf *outbuf,
> +int convert_object_file(struct repository *repo,
> +			struct strbuf *outbuf,
>  			const struct git_hash_algo *from,
>  			const struct git_hash_algo *to,
>  			const void *buf, size_t len,
> @@ -256,13 +259,13 @@ int convert_object_file(struct strbuf *outbuf,
>  
>  	switch (type) {
>  	case OBJ_COMMIT:
> -		ret = convert_commit_object(outbuf, from, to, buf, len);
> +		ret = convert_commit_object(repo, outbuf, from, to, buf, len);
>  		break;
>  	case OBJ_TREE:
> -		ret = convert_tree_object(outbuf, from, to, buf, len);
> +		ret = convert_tree_object(repo, outbuf, from, to, buf, len);
>  		break;
>  	case OBJ_TAG:
> -		ret = convert_tag_object(outbuf, from, to, buf, len);
> +		ret = convert_tag_object(repo, outbuf, from, to, buf, len);
>  		break;
>  	default:
>  		/* Not implemented yet, so fail. */
> diff --git a/object-file-convert.h b/object-file-convert.h
> index a4f802aa8ee..9b3cc5e533d 100644
> --- a/object-file-convert.h
> +++ b/object-file-convert.h
> @@ -14,7 +14,8 @@ int repo_oid_to_algop(struct repository *repo, const struct object_id *src,
>   * Convert an object file from one hash algorithm to another algorithm.
>   * Return -1 on failure, 0 on success.
>   */
> -int convert_object_file(struct strbuf *outbuf,
> +int convert_object_file(struct repository *repo,
> +			struct strbuf *outbuf,
>  			const struct git_hash_algo *from,
>  			const struct git_hash_algo *to,
>  			const void *buf, size_t len,
> diff --git a/object-file.c b/object-file.c
> index b3e0276b2a4..b0e237a2acc 100644
> --- a/object-file.c
> +++ b/object-file.c
> @@ -1793,7 +1793,7 @@ static int oid_object_info_convert(struct repository *r,
>  		if (type == -1)
>  			return -1;
>  		if (type != OBJ_BLOB) {
> -			ret = convert_object_file(&outbuf,
> +			ret = convert_object_file(the_repository, &outbuf,
>  						  the_hash_algo, input_algo,
>  						  content, size, type, !do_die);
>  			free(content);
> @@ -2510,7 +2510,7 @@ int write_object_file_flags(const void *buf, unsigned long len,
>  			hash_object_file(compat, buf, len, type, &compat_oid);
>  		else {
>  			struct strbuf converted = STRBUF_INIT;
> -			convert_object_file(&converted, algo, compat,
> +			convert_object_file(the_repository, &converted, algo, compat,
>  					    buf, len, type, 0);
>  			hash_object_file(compat, converted.buf, converted.len,
>  					 type, &compat_oid);
> @@ -2550,7 +2550,8 @@ int write_object_file_literally(const void *buf, unsigned long len,
>  					 &compat_oid);
>  		else if (compat_type != -1) {
>  			struct strbuf converted = STRBUF_INIT;
> -			convert_object_file(&converted, algo, compat,
> +			convert_object_file(the_repository,
> +					    &converted, algo, compat,
>  					    buf, len, compat_type, 0);
>  			hash_object_file(compat, converted.buf, converted.len,
>  					 compat_type, &compat_oid);
> 
> -- 
> 2.49.0.rc0.375.gae4b89d849.dirty
> 
> 




[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