]> git.ipfire.org Git - thirdparty/git.git/commitdiff
object-file: get rid of `the_repository` in `read_loose_object()`
authorPatrick Steinhardt <ps@pks.im>
Thu, 17 Jul 2025 04:56:40 +0000 (06:56 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 17 Jul 2025 05:16:17 +0000 (22:16 -0700)
The function `read_loose_object()` takes a path to an object file and
tries to parse it. As such, the function does not depend on any specific
object database but instead acts as an ODB-independent way to read a
specific file. As such, all it needs as input is a repository so that we
can derive repo settings and the hash algorithm.

That repository isn't passed in as a parameter though, as we implicitly
depend on the global `the_repository`. Refactor the function so that we
pass in the repository as a parameter.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/fsck.c
object-file.c
object-file.h

index f0854ce5d847d3aeb4415e2ee9835a495b600f01..e9112d884f021cf332230c64cd346cb8d6b5ce3c 100644 (file)
@@ -633,7 +633,7 @@ static int fsck_loose(const struct object_id *oid, const char *path,
        oi.sizep = &size;
        oi.typep = &type;
 
-       if (read_loose_object(path, oid, &real_oid, &contents, &oi) < 0) {
+       if (read_loose_object(the_repository, path, oid, &real_oid, &contents, &oi) < 0) {
                if (contents && !oideq(&real_oid, oid))
                        err = error(_("%s: hash-path mismatch, found at: %s"),
                                    oid_to_hex(&real_oid), path);
index b894379d22cc6f1a499d9a5490bdca7a8a63d379..f7c07acadc91ab2caec6c72500370987473f14aa 100644 (file)
@@ -1535,7 +1535,8 @@ static int check_stream_oid(git_zstream *stream,
        return 0;
 }
 
-int read_loose_object(const char *path,
+int read_loose_object(struct repository *repo,
+                     const char *path,
                      const struct object_id *expected_oid,
                      struct object_id *real_oid,
                      void **contents,
@@ -1574,9 +1575,9 @@ int read_loose_object(const char *path,
        }
 
        if (*oi->typep == OBJ_BLOB &&
-           *size > repo_settings_get_big_file_threshold(the_repository)) {
+           *size > repo_settings_get_big_file_threshold(repo)) {
                if (check_stream_oid(&stream, hdr, *size, path, expected_oid,
-                                    the_repository->hash_algo) < 0)
+                                    repo->hash_algo) < 0)
                        goto out_inflate;
        } else {
                *contents = unpack_loose_rest(&stream, hdr, *size, expected_oid);
@@ -1584,7 +1585,7 @@ int read_loose_object(const char *path,
                        error(_("unable to unpack contents of %s"), path);
                        goto out_inflate;
                }
-               hash_object_file(the_repository->hash_algo,
+               hash_object_file(repo->hash_algo,
                                 *contents, *size,
                                 *oi->typep, real_oid);
                if (!oideq(expected_oid, real_oid))
index 1b1ab95423d55c706f829cbdc91e1ff5eb835b49..52f7979267d08c9d0eb2839424b1d01043897dd5 100644 (file)
@@ -210,7 +210,8 @@ int check_and_freshen_file(const char *fn, int freshen);
  *
  * Returns 0 on success, negative on error (details may be written to stderr).
  */
-int read_loose_object(const char *path,
+int read_loose_object(struct repository *repo,
+                     const char *path,
                      const struct object_id *expected_oid,
                      struct object_id *real_oid,
                      void **contents,