mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
object-file-convert: stop depending on the_repository
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 a parameter and 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@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
1a6768d1dd
commit
f6e174b2d8
@@ -172,7 +172,7 @@ static int do_sign(struct strbuf *buffer, struct object_id **compat_oid,
|
|||||||
if (compat) {
|
if (compat) {
|
||||||
const struct git_hash_algo *algo = the_repository->hash_algo;
|
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))
|
buffer->buf, buffer->len, OBJ_TAG, 1))
|
||||||
goto out;
|
goto out;
|
||||||
if (sign_buffer(&compat_buf, &compat_sig, keyid))
|
if (sign_buffer(&compat_buf, &compat_sig, keyid))
|
||||||
|
|||||||
2
commit.c
2
commit.c
@@ -1380,7 +1380,7 @@ static int convert_commit_extra_headers(const struct commit_extra_header *orig,
|
|||||||
struct commit_extra_header *new;
|
struct commit_extra_header *new;
|
||||||
CALLOC_ARRAY(new, 1);
|
CALLOC_ARRAY(new, 1);
|
||||||
if (!strcmp(orig->key, "mergetag")) {
|
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,
|
orig->value, orig->len,
|
||||||
OBJ_TAG, 1)) {
|
OBJ_TAG, 1)) {
|
||||||
free(new);
|
free(new);
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#define USE_THE_REPOSITORY_VARIABLE
|
|
||||||
#define DISABLE_SIGN_COMPARE_WARNINGS
|
#define DISABLE_SIGN_COMPARE_WARNINGS
|
||||||
|
|
||||||
#include "git-compat-util.h"
|
#include "git-compat-util.h"
|
||||||
@@ -63,7 +62,8 @@ static int decode_tree_entry_raw(struct object_id *oid, const char **path,
|
|||||||
return 0;
|
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 *from,
|
||||||
const struct git_hash_algo *to,
|
const struct git_hash_algo *to,
|
||||||
const char *buffer, size_t size)
|
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,
|
if (decode_tree_entry_raw(&entry_oid, &path, &pathlen, from, p,
|
||||||
end - p))
|
end - p))
|
||||||
return error(_("failed to decode tree entry"));
|
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));
|
return error(_("failed to map tree entry for %s"), oid_to_hex(&entry_oid));
|
||||||
strbuf_add(out, p, path - p);
|
strbuf_add(out, p, path - p);
|
||||||
strbuf_add(out, path, pathlen);
|
strbuf_add(out, path, pathlen);
|
||||||
@@ -88,7 +88,8 @@ static int convert_tree_object(struct strbuf *out,
|
|||||||
return 0;
|
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 *from,
|
||||||
const struct git_hash_algo *to,
|
const struct git_hash_algo *to,
|
||||||
const char *buffer, size_t size)
|
const char *buffer, size_t size)
|
||||||
@@ -105,7 +106,7 @@ static int convert_tag_object(struct strbuf *out,
|
|||||||
return error("bogus tag object");
|
return error("bogus tag object");
|
||||||
if (parse_oid_hex_algop(buffer + 7, &oid, &p, from) < 0)
|
if (parse_oid_hex_algop(buffer + 7, &oid, &p, from) < 0)
|
||||||
return error("bad tag object ID");
|
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",
|
return error("unable to map tree %s in tag object",
|
||||||
oid_to_hex(&oid));
|
oid_to_hex(&oid));
|
||||||
size -= ((p + 1) - buffer);
|
size -= ((p + 1) - buffer);
|
||||||
@@ -139,7 +140,8 @@ static int convert_tag_object(struct strbuf *out,
|
|||||||
return 0;
|
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 *from,
|
||||||
const struct git_hash_algo *to,
|
const struct git_hash_algo *to,
|
||||||
const char *buffer, size_t size)
|
const char *buffer, size_t size)
|
||||||
@@ -165,7 +167,7 @@ static int convert_commit_object(struct strbuf *out,
|
|||||||
(p != eol))
|
(p != eol))
|
||||||
return error(_("bad %s in commit"), "tree");
|
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"),
|
return error(_("unable to map %s %s in commit object"),
|
||||||
"tree", oid_to_hex(&oid));
|
"tree", oid_to_hex(&oid));
|
||||||
strbuf_addf(out, "tree %s\n", oid_to_hex(&mapped_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))
|
(p != eol))
|
||||||
return error(_("bad %s in commit"), "parent");
|
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"),
|
return error(_("unable to map %s %s in commit object"),
|
||||||
"parent", oid_to_hex(&oid));
|
"parent", oid_to_hex(&oid));
|
||||||
|
|
||||||
@@ -202,7 +204,7 @@ static int convert_commit_object(struct strbuf *out,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Compute the new tag object */
|
/* 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(&tag);
|
||||||
strbuf_release(&new_tag);
|
strbuf_release(&new_tag);
|
||||||
return -1;
|
return -1;
|
||||||
@@ -241,7 +243,8 @@ static int convert_commit_object(struct strbuf *out,
|
|||||||
return 0;
|
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 *from,
|
||||||
const struct git_hash_algo *to,
|
const struct git_hash_algo *to,
|
||||||
const void *buf, size_t len,
|
const void *buf, size_t len,
|
||||||
@@ -256,13 +259,13 @@ int convert_object_file(struct strbuf *outbuf,
|
|||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case OBJ_COMMIT:
|
case OBJ_COMMIT:
|
||||||
ret = convert_commit_object(outbuf, from, to, buf, len);
|
ret = convert_commit_object(repo, outbuf, from, to, buf, len);
|
||||||
break;
|
break;
|
||||||
case OBJ_TREE:
|
case OBJ_TREE:
|
||||||
ret = convert_tree_object(outbuf, from, to, buf, len);
|
ret = convert_tree_object(repo, outbuf, from, to, buf, len);
|
||||||
break;
|
break;
|
||||||
case OBJ_TAG:
|
case OBJ_TAG:
|
||||||
ret = convert_tag_object(outbuf, from, to, buf, len);
|
ret = convert_tag_object(repo, outbuf, from, to, buf, len);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* Not implemented yet, so fail. */
|
/* Not implemented yet, so fail. */
|
||||||
|
|||||||
@@ -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.
|
* Convert an object file from one hash algorithm to another algorithm.
|
||||||
* Return -1 on failure, 0 on success.
|
* 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 *from,
|
||||||
const struct git_hash_algo *to,
|
const struct git_hash_algo *to,
|
||||||
const void *buf, size_t len,
|
const void *buf, size_t len,
|
||||||
|
|||||||
@@ -1793,7 +1793,7 @@ static int oid_object_info_convert(struct repository *r,
|
|||||||
if (type == -1)
|
if (type == -1)
|
||||||
return -1;
|
return -1;
|
||||||
if (type != OBJ_BLOB) {
|
if (type != OBJ_BLOB) {
|
||||||
ret = convert_object_file(&outbuf,
|
ret = convert_object_file(the_repository, &outbuf,
|
||||||
the_hash_algo, input_algo,
|
the_hash_algo, input_algo,
|
||||||
content, size, type, !do_die);
|
content, size, type, !do_die);
|
||||||
free(content);
|
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);
|
hash_object_file(compat, buf, len, type, &compat_oid);
|
||||||
else {
|
else {
|
||||||
struct strbuf converted = STRBUF_INIT;
|
struct strbuf converted = STRBUF_INIT;
|
||||||
convert_object_file(&converted, algo, compat,
|
convert_object_file(the_repository, &converted, algo, compat,
|
||||||
buf, len, type, 0);
|
buf, len, type, 0);
|
||||||
hash_object_file(compat, converted.buf, converted.len,
|
hash_object_file(compat, converted.buf, converted.len,
|
||||||
type, &compat_oid);
|
type, &compat_oid);
|
||||||
@@ -2550,7 +2550,8 @@ int write_object_file_literally(const void *buf, unsigned long len,
|
|||||||
&compat_oid);
|
&compat_oid);
|
||||||
else if (compat_type != -1) {
|
else if (compat_type != -1) {
|
||||||
struct strbuf converted = STRBUF_INIT;
|
struct strbuf converted = STRBUF_INIT;
|
||||||
convert_object_file(&converted, algo, compat,
|
convert_object_file(the_repository,
|
||||||
|
&converted, algo, compat,
|
||||||
buf, len, compat_type, 0);
|
buf, len, compat_type, 0);
|
||||||
hash_object_file(compat, converted.buf, converted.len,
|
hash_object_file(compat, converted.buf, converted.len,
|
||||||
compat_type, &compat_oid);
|
compat_type, &compat_oid);
|
||||||
|
|||||||
Reference in New Issue
Block a user