From: "Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: stolee@gmail.com, avarab@gmail.com, gitster@pobox.com,
zhiyou.jx@alibaba-inc.com, jonathantanmy@google.com,
Derrick Stolee <derrickstolee@github.com>
Subject: [PATCH 00/11] Partial bundles
Date: Wed, 23 Feb 2022 17:55:00 +0000 [thread overview]
Message-ID: <pull.1159.git.1645638911.gitgitgadget@gmail.com> (raw)
While discussing bundle-URIs [1], it came to my attention that bundles have
no way to specify an object filter, so bundles cannot be used with partial
clones.
[1]
https://lore.kernel.org/git/7fab28bf-54e7-d0e9-110a-53fad6244cc9@gmail.com/
This series provides a way to fix that by adding a 'filter' capability to
the bundle file format and allowing one to create a partial bundle with 'git
bundle create --filter=blob:none '.
There are a couple things that I want to point out about this implementation
that could use some high-level feedback:
1. I moved the '--filter' parsing into setup_revisions() instead of adding
another place to parse it. This works for 'git bundle' but it also
allows it to be parsed successfully in commands such as 'git diff' which
doesn't make sense. Options such as '--objects' are already being parsed
there, and they don't make sense either, so I want some thoughts on
this.
2. If someone uses 'git clone partial.bdl partial' where 'partial.bdl' is a
filtered bundle, then the clone will fail with a message such as
fatal: missing blob object '9444604d515c0b162e37e59accd54a0bac50ed2e' fatal:
remote did not send all necessary objects
This might be fine. We don't expect users to clone partial bundles or fetch
partial bundles into an unfiltered repo and these failures are expected. It
is possible that we could put in custom logic to fail faster by reading the
bundle header for a filter.
Generally, the idea is to open this up as a potential way to bootstrap a
clone of a partial clone using a set of precomputed partial bundles.
Thanks, -Stolee
Derrick Stolee (11):
index-pack: document and test the --promisor option
revision: put object filter into struct rev_info
pack-objects: use rev.filter when possible
pack-bitmap: drop filter in prepare_bitmap_walk()
list-objects: consolidate traverse_commit_list[_filtered]
MyFirstObjectWalk: update recommended usage
bundle: safely handle --objects option
bundle: parse filter capability
rev-list: move --filter parsing into revision.c
bundle: create filtered bundles
bundle: unbundle promisor packs
Documentation/MyFirstObjectWalk.txt | 44 ++++++---------
Documentation/git-index-pack.txt | 8 +++
builtin/pack-objects.c | 9 +--
builtin/rev-list.c | 29 +++-------
bundle.c | 87 ++++++++++++++++++++++++-----
bundle.h | 3 +
list-objects-filter-options.c | 2 +-
list-objects-filter-options.h | 5 ++
list-objects.c | 25 +++------
list-objects.h | 12 +++-
pack-bitmap.c | 24 ++++----
pack-bitmap.h | 2 -
reachable.c | 2 +-
revision.c | 11 ++++
revision.h | 4 ++
t/t5300-pack-object.sh | 4 +-
t/t6020-bundle-misc.sh | 48 ++++++++++++++++
17 files changed, 215 insertions(+), 104 deletions(-)
base-commit: 45fe28c951c3e70666ee4ef8379772851a8e4d32
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1159%2Fderrickstolee%2Fbundle%2Fpartial-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1159/derrickstolee/bundle/partial-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1159
--
gitgitgadget
next reply other threads:[~2022-02-23 17:55 UTC|newest]
Thread overview: 114+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-23 17:55 Derrick Stolee via GitGitGadget [this message]
2022-02-23 17:55 ` [PATCH 01/11] index-pack: document and test the --promisor option Derrick Stolee via GitGitGadget
2022-02-23 17:55 ` [PATCH 02/11] revision: put object filter into struct rev_info Derrick Stolee via GitGitGadget
2022-03-04 22:15 ` Junio C Hamano
2022-03-07 13:59 ` Derrick Stolee
2022-03-07 16:46 ` Junio C Hamano
2022-02-23 17:55 ` [PATCH 03/11] pack-objects: use rev.filter when possible Derrick Stolee via GitGitGadget
2022-03-04 22:25 ` Junio C Hamano
2022-02-23 17:55 ` [PATCH 04/11] pack-bitmap: drop filter in prepare_bitmap_walk() Derrick Stolee via GitGitGadget
2022-03-04 22:26 ` Junio C Hamano
2022-02-23 17:55 ` [PATCH 05/11] list-objects: consolidate traverse_commit_list[_filtered] Derrick Stolee via GitGitGadget
2022-03-04 22:30 ` Junio C Hamano
2022-02-23 17:55 ` [PATCH 06/11] MyFirstObjectWalk: update recommended usage Derrick Stolee via GitGitGadget
2022-03-04 22:33 ` Junio C Hamano
2022-03-07 14:05 ` Derrick Stolee
2022-03-07 16:47 ` Junio C Hamano
2022-02-23 17:55 ` [PATCH 07/11] bundle: safely handle --objects option Derrick Stolee via GitGitGadget
2022-02-28 16:00 ` Jeff Hostetler
2022-03-04 22:58 ` Junio C Hamano
2022-03-07 14:09 ` Derrick Stolee
2022-03-04 22:57 ` Junio C Hamano
2022-03-07 15:35 ` Ævar Arnfjörð Bjarmason
2022-02-23 17:55 ` [PATCH 08/11] bundle: parse filter capability Derrick Stolee via GitGitGadget
2022-03-07 15:38 ` Ævar Arnfjörð Bjarmason
2022-03-07 16:14 ` Derrick Stolee
2022-03-07 16:22 ` Ævar Arnfjörð Bjarmason
2022-03-07 16:29 ` Derrick Stolee
2022-03-07 15:55 ` Ævar Arnfjörð Bjarmason
2022-02-23 17:55 ` [PATCH 09/11] rev-list: move --filter parsing into revision.c Derrick Stolee via GitGitGadget
2022-02-23 17:55 ` [PATCH 10/11] bundle: create filtered bundles Derrick Stolee via GitGitGadget
2022-03-04 23:35 ` Junio C Hamano
2022-03-07 14:14 ` Derrick Stolee
2022-03-07 16:49 ` Junio C Hamano
2022-03-07 15:44 ` Ævar Arnfjörð Bjarmason
2022-02-23 17:55 ` [PATCH 11/11] bundle: unbundle promisor packs Derrick Stolee via GitGitGadget
2022-03-04 23:43 ` Junio C Hamano
2022-03-07 14:48 ` Derrick Stolee
2022-03-07 16:56 ` Junio C Hamano
2022-03-07 18:57 ` Derrick Stolee
2022-03-07 19:40 ` Junio C Hamano
2022-03-07 19:49 ` Derrick Stolee
2022-03-07 19:54 ` Junio C Hamano
2022-03-07 20:20 ` Derrick Stolee
2022-03-07 21:35 ` Junio C Hamano
2022-03-07 15:47 ` Ævar Arnfjörð Bjarmason
2022-03-07 16:10 ` Derrick Stolee
2022-02-28 17:00 ` [PATCH 00/11] Partial bundles Jeff Hostetler
2022-02-28 17:54 ` Derrick Stolee
2022-03-01 18:03 ` Jeff Hostetler
2022-03-04 19:19 ` Derrick Stolee
2022-03-07 14:55 ` Ævar Arnfjörð Bjarmason
2022-03-07 14:59 ` Derrick Stolee
2022-03-07 21:50 ` [PATCH v2 00/12] " Derrick Stolee via GitGitGadget
2022-03-07 21:50 ` [PATCH v2 01/12] index-pack: document and test the --promisor option Derrick Stolee via GitGitGadget
2022-03-07 21:50 ` [PATCH v2 02/12] revision: put object filter into struct rev_info Derrick Stolee via GitGitGadget
2022-03-07 21:50 ` [PATCH v2 03/12] pack-objects: use rev.filter when possible Derrick Stolee via GitGitGadget
2022-03-07 21:50 ` [PATCH v2 04/12] pack-bitmap: drop filter in prepare_bitmap_walk() Derrick Stolee via GitGitGadget
2022-03-07 21:50 ` [PATCH v2 05/12] list-objects: consolidate traverse_commit_list[_filtered] Derrick Stolee via GitGitGadget
2022-03-07 21:50 ` [PATCH v2 06/12] MyFirstObjectWalk: update recommended usage Derrick Stolee via GitGitGadget
2022-03-07 21:50 ` [PATCH v2 07/12] bundle: safely handle --objects option Derrick Stolee via GitGitGadget
2022-03-08 9:37 ` Ævar Arnfjörð Bjarmason
2022-03-08 13:45 ` Derrick Stolee
2022-03-08 13:53 ` Ævar Arnfjörð Bjarmason
2022-03-07 21:50 ` [PATCH v2 08/12] bundle: parse filter capability Derrick Stolee via GitGitGadget
2022-03-08 9:25 ` Ævar Arnfjörð Bjarmason
2022-03-08 13:43 ` Derrick Stolee
2022-03-07 21:50 ` [PATCH v2 09/12] rev-list: move --filter parsing into revision.c Derrick Stolee via GitGitGadget
2022-03-07 21:50 ` [PATCH v2 10/12] bundle: create filtered bundles Derrick Stolee via GitGitGadget
2022-03-07 21:50 ` [PATCH v2 11/12] bundle: unbundle promisor packs Derrick Stolee via GitGitGadget
2022-03-07 21:50 ` [PATCH v2 12/12] clone: fail gracefully when cloning filtered bundle Derrick Stolee via GitGitGadget
2022-03-07 22:11 ` [PATCH v2 00/12] Partial bundles Junio C Hamano
2022-03-08 14:39 ` [PATCH v3 " Derrick Stolee via GitGitGadget
2022-03-08 14:39 ` [PATCH v3 01/12] index-pack: document and test the --promisor option Derrick Stolee via GitGitGadget
2022-03-08 14:39 ` [PATCH v3 02/12] revision: put object filter into struct rev_info Derrick Stolee via GitGitGadget
2022-03-08 14:39 ` [PATCH v3 03/12] pack-objects: use rev.filter when possible Derrick Stolee via GitGitGadget
2022-03-08 14:39 ` [PATCH v3 04/12] pack-bitmap: drop filter in prepare_bitmap_walk() Derrick Stolee via GitGitGadget
2022-03-08 14:39 ` [PATCH v3 05/12] list-objects: consolidate traverse_commit_list[_filtered] Derrick Stolee via GitGitGadget
2022-03-09 13:24 ` Ævar Arnfjörð Bjarmason
2022-03-08 14:39 ` [PATCH v3 06/12] MyFirstObjectWalk: update recommended usage Derrick Stolee via GitGitGadget
2022-03-08 14:39 ` [PATCH v3 07/12] list-objects: handle NULL function pointers Ævar Arnfjörð Bjarmason via GitGitGadget
2022-03-08 17:26 ` Junio C Hamano
2022-03-09 13:40 ` Ævar Arnfjörð Bjarmason
2022-03-09 14:16 ` Derrick Stolee
2022-03-09 18:32 ` Junio C Hamano
2022-03-08 14:39 ` [PATCH v3 08/12] bundle: parse filter capability Derrick Stolee via GitGitGadget
2022-03-08 17:29 ` Junio C Hamano
2022-03-09 14:35 ` Derrick Stolee
2022-03-09 13:30 ` Ævar Arnfjörð Bjarmason
2022-03-08 14:39 ` [PATCH v3 09/12] rev-list: move --filter parsing into revision.c Derrick Stolee via GitGitGadget
2022-03-08 14:39 ` [PATCH v3 10/12] bundle: create filtered bundles Derrick Stolee via GitGitGadget
2022-03-08 14:39 ` [PATCH v3 11/12] bundle: unbundle promisor packs Derrick Stolee via GitGitGadget
2022-03-08 14:39 ` [PATCH v3 12/12] clone: fail gracefully when cloning filtered bundle Derrick Stolee via GitGitGadget
2022-03-08 16:10 ` Derrick Stolee
2022-03-08 17:19 ` Junio C Hamano
2022-03-09 16:01 ` [PATCH v4 00/13] Partial bundles Derrick Stolee via GitGitGadget
2022-03-09 16:01 ` [PATCH v4 01/13] index-pack: document and test the --promisor option Derrick Stolee via GitGitGadget
2022-03-09 16:01 ` [PATCH v4 02/13] list-objects-filter-options: create copy helper Derrick Stolee via GitGitGadget
2022-03-09 16:01 ` [PATCH v4 03/13] revision: put object filter into struct rev_info Derrick Stolee via GitGitGadget
2022-03-09 18:48 ` Junio C Hamano
2022-03-09 16:01 ` [PATCH v4 04/13] pack-objects: use rev.filter when possible Derrick Stolee via GitGitGadget
2022-03-10 13:11 ` Ævar Arnfjörð Bjarmason
2022-03-10 13:33 ` Derrick Stolee
2022-03-10 14:24 ` Ævar Arnfjörð Bjarmason
2022-03-09 16:01 ` [PATCH v4 05/13] pack-bitmap: drop filter in prepare_bitmap_walk() Derrick Stolee via GitGitGadget
2022-03-09 16:01 ` [PATCH v4 06/13] list-objects: consolidate traverse_commit_list[_filtered] Derrick Stolee via GitGitGadget
2022-03-09 16:01 ` [PATCH v4 07/13] MyFirstObjectWalk: update recommended usage Derrick Stolee via GitGitGadget
2022-03-09 16:01 ` [PATCH v4 08/13] list-objects: handle NULL function pointers Ævar Arnfjörð Bjarmason via GitGitGadget
2022-03-09 16:01 ` [PATCH v4 09/13] bundle: parse filter capability Derrick Stolee via GitGitGadget
2022-03-09 18:41 ` Junio C Hamano
2022-03-09 18:55 ` Derrick Stolee
2022-03-09 16:01 ` [PATCH v4 10/13] rev-list: move --filter parsing into revision.c Derrick Stolee via GitGitGadget
2022-03-09 16:01 ` [PATCH v4 11/13] bundle: create filtered bundles Derrick Stolee via GitGitGadget
2022-03-09 16:01 ` [PATCH v4 12/13] bundle: unbundle promisor packs Derrick Stolee via GitGitGadget
2022-03-09 16:01 ` [PATCH v4 13/13] clone: fail gracefully when cloning filtered bundle Derrick Stolee via GitGitGadget
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.1159.git.1645638911.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=avarab@gmail.com \
--cc=derrickstolee@github.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jonathantanmy@google.com \
--cc=stolee@gmail.com \
--cc=zhiyou.jx@alibaba-inc.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).