[PATCH v6 00/12] packfile-uri: support excluding multiple object types
From: Teng Long <hidden>
Date: 2021-10-19 11:39:03
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@gmail.com/ (local)
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