]> git.ipfire.org Git - thirdparty/git.git/commitdiff
odb: allow `odb_find_source()` to fail
authorPatrick Steinhardt <ps@pks.im>
Mon, 11 Aug 2025 13:46:42 +0000 (15:46 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 11 Aug 2025 16:22:21 +0000 (09:22 -0700)
When trying to locate a source for an unknown object directory we will
die right away. In subsequent patches we will add new callsites though
that want to handle this situation gracefully instead.

Refactor the function to return a `NULL` pointer if the source could not
be found and adapt the callsites to die instead. Introduce a new wrapper
`odb_find_source_or_die()` that continues to die in case the source
could not be found.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/commit-graph.c
midx-write.c
odb.c
odb.h

index 25018a0b9df4645829aea08d74c30d90f0b564b0..33fb7a5145c69407ae047aed462eccc1d466b653 100644 (file)
@@ -101,7 +101,7 @@ static int graph_verify(int argc, const char **argv, const char *prefix,
        if (opts.progress)
                flags |= COMMIT_GRAPH_WRITE_PROGRESS;
 
-       source = odb_find_source(the_repository->objects, opts.obj_dir);
+       source = odb_find_source_or_die(the_repository->objects, opts.obj_dir);
        graph_name = get_commit_graph_filename(source);
        chain_name = get_commit_graph_chain_filename(source);
        if (open_commit_graph(graph_name, &fd, &st))
@@ -289,7 +289,7 @@ static int graph_write(int argc, const char **argv, const char *prefix,
            git_env_bool(GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS, 0))
                flags |= COMMIT_GRAPH_WRITE_BLOOM_FILTERS;
 
-       source = odb_find_source(the_repository->objects, opts.obj_dir);
+       source = odb_find_source_or_die(the_repository->objects, opts.obj_dir);
 
        if (opts.reachable) {
                if (write_commit_graph_reachable(source, flags, &write_opts))
index c1ae62d3549425585077447da73803bf50e6e5a6..d38caceadb4fa46596a66e60d543b4f652f5024c 100644 (file)
@@ -916,7 +916,7 @@ cleanup:
 static struct multi_pack_index *lookup_multi_pack_index(struct repository *r,
                                                        const char *object_dir)
 {
-       struct odb_source *source = odb_find_source(r->objects, object_dir);
+       struct odb_source *source = odb_find_source_or_die(r->objects, object_dir);
        return get_multi_pack_index(source);
 }
 
diff --git a/odb.c b/odb.c
index 1761a50840ddf80a69c610708daec037cea15502..4e7f14be4a004c3b65f111bb1b64f9771f942ecc 100644 (file)
--- a/odb.c
+++ b/odb.c
@@ -464,6 +464,12 @@ struct odb_source *odb_find_source(struct object_database *odb, const char *obj_
        free(obj_dir_real);
        strbuf_release(&odb_path_real);
 
+       return source;
+}
+
+struct odb_source *odb_find_source_or_die(struct object_database *odb, const char *obj_dir)
+{
+       struct odb_source *source = odb_find_source(odb, obj_dir);
        if (!source)
                die(_("could not find object directory matching %s"), obj_dir);
        return source;
diff --git a/odb.h b/odb.h
index f9300439bab3af3191c878e945181fae9b9a8447..312921077b857a4b832ab02d53ae734e5de1ffc0 100644 (file)
--- a/odb.h
+++ b/odb.h
@@ -186,11 +186,14 @@ struct object_database *odb_new(struct repository *repo);
 void odb_clear(struct object_database *o);
 
 /*
- * Find source by its object directory path. Dies in case the source couldn't
- * be found.
+ * Find source by its object directory path. Returns a `NULL` pointer in case
+ * the source could not be found.
  */
 struct odb_source *odb_find_source(struct object_database *odb, const char *obj_dir);
 
+/* Same as `odb_find_source()`, but dies in case the source doesn't exist. */
+struct odb_source *odb_find_source_or_die(struct object_database *odb, const char *obj_dir);
+
 /*
  * Replace the current writable object directory with the specified temporary
  * object directory; returns the former primary source.