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 > >