[PATCH v2 03/13] loose: add a flag to control whether we write mapped OIDs
- From
Christian Couder <christian.couder@gmail.com>
- Date
- Oct 23, 2026, 07:25 UTC
- Message-ID
- <20261023072559.3204273-4-christian.couder@gmail.com>
- In-Reply-To
- <20261023072559.3204273-1-christian.couder@gmail.com>
From: "brian m. carlson" <sandals@crustytoothpaste.net>
Right now, we always write the object to the loose object map. However, in the future, we'll need to temporarily store some object ID mappings in memory so that we can rewrite other objects, such as when we're indexing packs. Let's make this easier by setting a flag indicating whether we want to write this to disk.
The bottom six bits will be used for an object type in a future commit, so pick 1 << 6 as the write bit to avoid conflicts.
Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Christian Couder <christian.couder@gmail.com> --- loose.c | 5 +++-- loose.h | 6 +++++- odb/source-loose.c | 4 ++-- 3 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/loose.c b/loose.c index 8d7ea27448..090681b4b3 100644 --- a/loose.c +++ b/loose.c @@ -212,7 +212,8 @@ static int write_one_object(struct odb_source_loose *loose, int source_add_loose_object_map(struct odb_source_loose *loose, const struct object_id *oid, - const struct object_id *compat_oid) + const struct object_id *compat_oid, + int flags) { int inserted = 0; @@ -220,7 +221,7 @@ int source_add_loose_object_map(struct odb_source_loose *loose, return 0; inserted = insert_loose_map(loose, oid, compat_oid); - if (inserted) + if (inserted && (flags & OBJ_MAP_WRITE)) return write_one_object(loose, oid, compat_oid); return 0; } diff --git a/loose.h b/loose.h index 6f0c8554ca..19d3be26a3 100644 --- a/loose.h +++ b/loose.h @@ -3,6 +3,9 @@ #include "khash.h" +/* Should we write this object to disk? */ +#define OBJ_MAP_WRITE (1 << 6) + struct repository; struct odb_source_loose; @@ -27,6 +30,7 @@ int source_loose_object_map_oid(struct odb_source_loose *loose, struct object_id *dest); int source_add_loose_object_map(struct odb_source_loose *loose, const struct object_id *oid, - const struct object_id *compat_oid); + const struct object_id *compat_oid, + int flags); #endif diff --git a/odb/source-loose.c b/odb/source-loose.c index 3c0c85f3e3..b58184f31d 100644 --- a/odb/source-loose.c +++ b/odb/source-loose.c @@ -848,7 +848,7 @@ static int odb_source_loose_write_object(struct odb_source *source, return -1; if (compat_oid) - return source_add_loose_object_map(loose, oid, compat_oid); + return source_add_loose_object_map(loose, oid, compat_oid, OBJ_MAP_WRITE); return 0; } @@ -970,7 +970,7 @@ static int odb_source_loose_write_object_stream(struct odb_source *source, err = finalize_object_file_flags(loose->base.odb->repo, tmp_file.buf, filename.buf, FOF_SKIP_COLLISION_CHECK); if (!err && compat) - err = source_add_loose_object_map(loose, oid, &compat_oid); + err = source_add_loose_object_map(loose, oid, &compat_oid, OBJ_MAP_WRITE); cleanup: strbuf_release(&tmp_file); strbuf_release(&filename);
-- 2.56.0.215.g47fdf2208c