About This Patch: ----------------- This patch has almost no reuse of previous patch's commits, because this one redesigned the exclusion for various object types and reoganized the commits. Commit (1): objects.c: introduce `exclude_level` enum This commit introduce a new enum named `exclude_level` in object.c, it contains three enumerated values: "ET_SELF", "ET_INCLUDE" and "ET_REACHABLE". The commit only makes the definitions, without any implementations. Commit (2): Introduce function `match_packfile_uri_exclusions` This one move the codes used for matching the URI protocols from `want_found_object` to new function `match_packfile_uri_exclusions`. The purpose is to improve code readability related to the feature and make preparation for further extension about the matching and exclusion for multiple object types. Commit (3): Replace `show_data` with structure `show_info` There is no feature related codes in this commit. This commit modified the parameters in function `show_object` by replacing `show_data` with a new structure `show_info`, this is another way of implementation about the previous commit[1] in patch v5. Commit (4): Introduce `uploadpack.excludeobject` configuration This commit introduce a new and backward-compatible configuration named `uploadpack.excludeobject`, the diff between old and new: uploadpack.blobPackfileUri=<object-hash> <pack-hash> <uri> uploadpack.excludeobject=<object-hash> <level> <pack-hash> <uri> The <level> is correspond to the exclusion scope of the given object, and it's mentioned as `exclude_value` in object.c by "Commit (1)". Commit (6,8,10): Implementations for excluding commits, trees and tags Commit (7,9,11): Tests for excluding excluding commits, trees and tags Commit (12): Corresponding documentation modifications bundle-uri And packfile-uri ---------------------------- Ævar Arnfjörð Bjarmason post a new feature patchset[2] named "bundle-uri", it supports to let client download the full or incremental bundles directly without any negotiations with the server (full clone first and in a MVP progress now). I'm sorry if I misleading the meanings and please point it out. In "packfile-uri", different with "bundle-uri", happens in the span of packing objects during git-upload-pack on the server. This is an experimental feature, originally designed as a CDN for large BLOB objects, but it's not yet fully functional. I'm currently working on it for making it support other types of objects. I also noticed that some opinions about the two features are mentioned in the patch[2], so I cc to Stolee in this patch, I hope I did not disturb you. [1] https://public-inbox.org/git/xmqqlf4oc4u1.fsf@gitster.g/ [2] https://lore.kernel.org/git/RFC-cover-00.13-0000000000-20210805T150534Z-avarab@xxxxxxxxx/ Teng Long (12): objects.c: introduce `exclude_level` enum Introduce function `match_packfile_uri_exclusions` Replace `show_data` with structure `show_info` Introduce `uploadpack.excludeobject` configuration t5702: test cases for `uploadpack.excludeobject` packfile-uri: support for excluding commits t5702: test cases for excluding commits packfile-uri: support for excluding trees t5702: test cases for excluding trees packfile-uri: support for excluding tags t5702: test cases for excluding tags packfile-uri.txt: support multiple object types Documentation/technical/packfile-uri.txt | 74 +- builtin/describe.c | 9 +- builtin/pack-objects.c | 236 +++++-- builtin/rev-list.c | 11 +- bundle.c | 5 +- list-objects.c | 74 +- list-objects.h | 11 +- object.c | 21 +- object.h | 16 +- pack-bitmap.c | 16 +- reachable.c | 11 +- revision.c | 47 +- revision.h | 12 + shallow.c | 4 +- t/t5702-protocol-v2.sh | 856 +++++++++++++++++++++-- upload-pack.c | 7 + 16 files changed, 1253 insertions(+), 157 deletions(-) Range-diff against v5: 1: 3a885678c9 = 1: 3a885678c9 objects.c: introduce `exclude_level` enum 2: 36426b4d9f = 2: 36426b4d9f Introduce function `match_packfile_uri_exclusions` 3: dced036f89 = 3: dced036f89 Replace `show_data` with structure `show_info` 4: b1d779b26a = 4: b1d779b26a Introduce `uploadpack.excludeobject` configuration 5: f643db3c71 = 5: f643db3c71 t5702: test cases for `uploadpack.excludeobject` 6: c29efeac21 = 6: c29efeac21 packfile-uri: support for excluding commits 7: ca72efd22e = 7: ca72efd22e t5702: test cases for excluding commits 8: c7a885ebec = 8: c7a885ebec packfile-uri: support for excluding trees 9: 5fc79a9a32 = 9: 5fc79a9a32 t5702: test cases for excluding trees 10: 16c41c40a2 = 10: 16c41c40a2 packfile-uri: support for excluding tags 11: 171ece533b = 11: 171ece533b t5702: test cases for excluding tags 12: 79fc2c23cf = 12: 79fc2c23cf packfile-uri.txt: support multiple object types -- 2.31.1.453.g945ddc3a74.dirty