]> Kevux Git Server - rit/commit
odb: use size_t for object_info.sizep and the size APIs
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Mon, 15 Jun 2026 11:52:29 +0000 (11:52 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 15 Jun 2026 14:45:41 +0000 (07:45 -0700)
commitc6a4629e3205fdb5af3a406477ca691de2a5ab31
tree7cdfb515b45d2fc4026c1c8df75c09c507748aee
parent7a3a78cc76da5e2eccf6fc2553a4803c56390ac5
odb: use size_t for object_info.sizep and the size APIs

When `js/objects-larger-than-4gb-on-windows` widened the streaming,
index-pack and unpack-objects code paths, in the interest of keeping the
patches somewhat reasonably-sized, it left the public ODB API still
typed in `unsigned long`. In particular `struct object_info::sizep` and
the four wrappers built on top of it (`odb_read_object`,
`odb_read_object_peeled`, `odb_read_object_info`, `odb_pretend_object`)
still return the unpacked size through `unsigned long *`, so on Windows
`cat-file -s` and the `git add` / `git status` paths for a >4 GiB blob
silently cap at 4 GiB.

Widen the field and the four wrappers. The previous commits already
widened the `unpack_entry()` cascade and pack-objects' in-core size
accessors, so most of the cascade arrives here with no further work: the
temporary shims in `packed_object_info_with_index_pos()` and in
`unpack_entry()`'s delta-base recovery path go away, the two
`SET_SIZE(entry, cast_size_t_to_ulong(canonical_size))` calls in
`check_object()` and the matching one in `drop_reused_delta()` collapse
to plain `SET_SIZE`, and `oe_get_size_slow()`'s tail
`cast_size_t_to_ulong()` is gone too.

What remains narrow are the boundaries this series does not
intend to touch: the diff, blame, textconv and fast-import machinery.

Even so, this patch is unfortunately quite large.

Assisted-by: Opus 4.7
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
65 files changed:
apply.c
archive.c
attr.c
bisect.c
blame.c
builtin/cat-file.c
builtin/difftool.c
builtin/fast-export.c
builtin/fast-import.c
builtin/fsck.c
builtin/grep.c
builtin/index-pack.c
builtin/log.c
builtin/ls-files.c
builtin/ls-tree.c
builtin/merge-tree.c
builtin/mktag.c
builtin/notes.c
builtin/pack-objects.c
builtin/repo.c
builtin/tag.c
builtin/unpack-file.c
builtin/unpack-objects.c
bundle.c
combine-diff.c
commit.c
config.c
diff.c
dir.c
entry.c
fmt-merge-msg.c
fsck.c
grep.c
http-push.c
list-objects-filter.c
mailmap.c
match-trees.c
merge-blobs.c
merge-blobs.h
merge-ort.c
notes-cache.c
notes-merge.c
notes.c
object-file.c
object.c
odb.c
odb.h
odb/source-loose.c
odb/streaming.c
pack-bitmap.c
packfile.c
path-walk.c
protocol-caps.c
read-cache.c
ref-filter.c
reflog.c
rerere.c
submodule-config.c
t/helper/test-pack-deltas.c
t/helper/test-partial-clone.c
t/unit-tests/u-odb-inmemory.c
tag.c
tree-walk.c
tree.c
xdiff-interface.c