public inbox for git@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/14] odb: generic object name handling
@ 2026-03-19  6:52 Patrick Steinhardt
  2026-03-19  6:52 ` [PATCH 01/14] oidtree: modernize the code a bit Patrick Steinhardt
                   ` (14 more replies)
  0 siblings, 15 replies; 47+ messages in thread
From: Patrick Steinhardt @ 2026-03-19  6:52 UTC (permalink / raw)
  To: git

Hi,

this patch series refactors handling of object names to become pluggable
and thus generic. This includes:

  - Disambiguation of object names with a common prefix. This is
    required to list candidate objects in case the user has passed a
    non-unique prefix.

  - Abbreviating an object ID to the shortest prefix required while
    staying unique.

The logic to compute these operations is specific to the backend, but
not generic. This patch series fixes that by moving the functionality
into the respective backends.

This patch series may feel somewhat unexiting, but it's not. Especially
abbreviating object IDs is done in lots of places, so this functionality
is overall quite critical. So starting with this series, it is now
possible to do all kinds of local work with an alternative backend:
git-commit(1), git-log(1), git-rev-parse(1), git-merge(1) and many other
commands now work as expected. My MongoDB proof of concept [1] only
requires two commits (the object format extension) on top. And no, I
don't endorse MongoDB or propose it as a future potential backend. It
simply had a good C API that was easy to use.

Of course, other functionality, especially everything that involves
packfiles, doesn't yet work.

This patch series is built on top of ca1db8a0f7 (The 17th batch,
2026-03-16) with ps/object-counting at 6801ffd37d (odb: introduce
generic object counting, 2026-03-12) merged into it.

Thanks!

Patrick

[1]: https://gitlab.com/gitlab-org/git/-/merge_requests/454

---
Patrick Steinhardt (14):
      oidtree: modernize the code a bit
      oidtree: extend iteration to allow for arbitrary return codes
      odb: introduce `struct odb_for_each_object_options`
      object-name: move logic to iterate through loose prefixed objects
      object-name: move logic to iterate through packed prefixed objects
      object-name: extract function to parse object ID prefixes
      object-name: backend-generic `repo_collect_ambiguous()`
      object-name: backend-generic `get_short_oid()`
      object-name: merge `update_candidates()` and `match_prefix()`
      object-name: abbreviate loose object names without `disambiguate_state`
      object-name: simplify computing common prefixes
      object-name: move logic to compute loose abbreviation length
      object-file: move logic to compute packed abbreviation length
      odb: introduce generic `odb_find_abbrev_len()`

 builtin/cat-file.c       |   7 +-
 builtin/pack-objects.c   |  12 +-
 cbtree.c                 |  21 ++-
 cbtree.h                 |  11 +-
 commit-graph.c           |   5 +-
 hash.c                   |  18 ++
 hash.h                   |   3 +
 object-file.c            |  73 +++++++-
 object-file.h            |  21 ++-
 object-name.c            | 437 ++++++++---------------------------------------
 odb.c                    |  99 ++++++++++-
 odb.h                    |  39 +++++
 odb/source-files.c       |  33 +++-
 odb/source.h             |  30 +++-
 oidtree.c                |  65 +++----
 oidtree.h                |  48 +++++-
 packfile.c               | 297 +++++++++++++++++++++++++++++++-
 packfile.h               |   7 +-
 t/unit-tests/u-oidtree.c |  18 +-
 19 files changed, 774 insertions(+), 470 deletions(-)


---
base-commit: b052aca69d64d2d8e28e7ce97dcb1beb3d94515a
change-id: 20260313-b4-pks-odb-source-abbrev-a84c51222bca


^ permalink raw reply	[flat|nested] 47+ messages in thread

end of thread, other threads:[~2026-03-23  6:22 UTC | newest]

Thread overview: 47+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-19  6:52 [PATCH 00/14] odb: generic object name handling Patrick Steinhardt
2026-03-19  6:52 ` [PATCH 01/14] oidtree: modernize the code a bit Patrick Steinhardt
2026-03-19 16:08   ` Junio C Hamano
2026-03-20  6:40     ` Patrick Steinhardt
2026-03-20 22:30       ` brian m. carlson
2026-03-23  6:22         ` Patrick Steinhardt
2026-03-19  6:53 ` [PATCH 02/14] oidtree: extend iteration to allow for arbitrary return codes Patrick Steinhardt
2026-03-19 16:27   ` Junio C Hamano
2026-03-20  6:40     ` Patrick Steinhardt
2026-03-19 16:27   ` Karthik Nayak
2026-03-19  6:53 ` [PATCH 03/14] odb: introduce `struct odb_for_each_object_options` Patrick Steinhardt
2026-03-19 14:25   ` Junio C Hamano
2026-03-19 14:59     ` Patrick Steinhardt
2026-03-20  9:01   ` Karthik Nayak
2026-03-19  6:53 ` [PATCH 04/14] object-name: move logic to iterate through loose prefixed objects Patrick Steinhardt
2026-03-19  6:53 ` [PATCH 05/14] object-name: move logic to iterate through packed " Patrick Steinhardt
2026-03-19  6:53 ` [PATCH 06/14] object-name: extract function to parse object ID prefixes Patrick Steinhardt
2026-03-19  6:53 ` [PATCH 07/14] object-name: backend-generic `repo_collect_ambiguous()` Patrick Steinhardt
2026-03-19 14:26   ` Junio C Hamano
2026-03-19 14:59     ` Patrick Steinhardt
2026-03-20  9:23   ` Karthik Nayak
2026-03-19  6:53 ` [PATCH 08/14] object-name: backend-generic `get_short_oid()` Patrick Steinhardt
2026-03-19  6:53 ` [PATCH 09/14] object-name: merge `update_candidates()` and `match_prefix()` Patrick Steinhardt
2026-03-19  6:53 ` [PATCH 10/14] object-name: abbreviate loose object names without `disambiguate_state` Patrick Steinhardt
2026-03-19  6:53 ` [PATCH 11/14] object-name: simplify computing common prefixes Patrick Steinhardt
2026-03-20 10:01   ` Karthik Nayak
2026-03-20 10:30     ` Patrick Steinhardt
2026-03-19  6:53 ` [PATCH 12/14] object-name: move logic to compute loose abbreviation length Patrick Steinhardt
2026-03-19  6:53 ` [PATCH 13/14] object-file: move logic to compute packed " Patrick Steinhardt
2026-03-19  6:53 ` [PATCH 14/14] odb: introduce generic `odb_find_abbrev_len()` Patrick Steinhardt
2026-03-20  7:07 ` [PATCH v2 00/14] odb: generic object name handling Patrick Steinhardt
2026-03-20  7:07   ` [PATCH v2 01/14] oidtree: modernize the code a bit Patrick Steinhardt
2026-03-20  7:07   ` [PATCH v2 02/14] oidtree: extend iteration to allow for arbitrary return codes Patrick Steinhardt
2026-03-20  7:07   ` [PATCH v2 03/14] odb: introduce `struct odb_for_each_object_options` Patrick Steinhardt
2026-03-20  7:07   ` [PATCH v2 04/14] object-name: move logic to iterate through loose prefixed objects Patrick Steinhardt
2026-03-20  7:07   ` [PATCH v2 05/14] object-name: move logic to iterate through packed " Patrick Steinhardt
2026-03-20  7:07   ` [PATCH v2 06/14] object-name: extract function to parse object ID prefixes Patrick Steinhardt
2026-03-20  7:07   ` [PATCH v2 07/14] object-name: backend-generic `repo_collect_ambiguous()` Patrick Steinhardt
2026-03-20  7:07   ` [PATCH v2 08/14] object-name: backend-generic `get_short_oid()` Patrick Steinhardt
2026-03-20  7:07   ` [PATCH v2 09/14] object-name: merge `update_candidates()` and `match_prefix()` Patrick Steinhardt
2026-03-20  7:07   ` [PATCH v2 10/14] object-name: abbreviate loose object names without `disambiguate_state` Patrick Steinhardt
2026-03-20  7:07   ` [PATCH v2 11/14] object-name: simplify computing common prefixes Patrick Steinhardt
2026-03-20  7:07   ` [PATCH v2 12/14] object-name: move logic to compute loose abbreviation length Patrick Steinhardt
2026-03-20  7:07   ` [PATCH v2 13/14] object-file: move logic to compute packed " Patrick Steinhardt
2026-03-20  7:07   ` [PATCH v2 14/14] odb: introduce generic `odb_find_abbrev_len()` Patrick Steinhardt
2026-03-20 10:04   ` [PATCH v2 00/14] odb: generic object name handling Karthik Nayak
2026-03-20 10:30     ` Patrick Steinhardt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox