From: Kristoffer Haugsbakk Date: Wed, 11 Feb 2026 23:13:36 GMT Subject: cat-file: dies with --batch if reflog entry is out of bounds Message-ID: <2b07489b-1689-4ecd-9cda-012540fe56e2@app.fastmail.com> $ git cat-file --batch HEAD@{7} branch@{20} fatal: log for 'branch' only has 5 entries [died] This is a known limitation. It used to just die without any flags until recently in 393bbb21 (object-name: make get_oid quietly return an error, 2025-06-12).[1] That added a `GET_OID_GENTLY` flag which is respected here. If that is set it returns normally from the function with an error. Before that I was looking at `builtin/cat-file.c` and guessing that `GET_OID_GENTLY` would be the thing that made `--batch` loop on. But it seems to be the lack of `GET_OID_ONLY_TO_DIE`; that flag seems to be used when you do a one object lookup like `git cat-file commit HEAD`. And it is indeed not set for the batch modes. `GET_OID_GENTLY` from commit 393bbb21 was added it seems so that a commit in the same series could try to look up a reflog entry in `builtin/stash.c` and give its own error message. And go to `cleanup` as well. It’s the only user/usage. I’m pretty new to git-cat-file(1) but it seems very consistent in returning “missing” for object names that don’t exist, “little red riding hood” and malformed rev expressions. Is this the only could-be-an-object input it will die on? [1]: https://lore.kernel.org/git/20250508234458.3665894-2-sandals@crustytoothpaste.net/#t -- Kristoffer Haugsbakk code at khaugsbakk.name