[PATCH/RFC 2/7] pack-objects: add sparse-prefix
- From
- Robin Ruede <r.ruede@gmail.com>
- Date
- Jul 28, 2016, 16:02 UTC
- Message-ID
- <20160728160226.24018-3-r.ruede@gmail.com>
- In-Reply-To
- <20160728160226.24018-1-r.ruede@gmail.com>
this allows creating packs that contain only the blobs relevant to a specific subdirectory, e.g.
echo HEAD | git pack-objects --revs --sparse-prefix=/contrib/
will create a pack containing the complete history of HEAD, including all commits, all trees, and the files in the contrib directory.
Signed-off-by: Robin Ruede <r.ruede@gmail.com> --- builtin/pack-objects.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index a2f8cfd..0674f57 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -2621,6 +2621,8 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) struct argv_array rp = ARGV_ARRAY_INIT; int rev_list_unpacked = 0, rev_list_all = 0, rev_list_reflog = 0; int rev_list_index = 0; + const char *sparse_prefix = NULL; + struct option pack_objects_options[] = { OPT_SET_INT('q', "quiet", &progress, N_("do not show progress meter"), 0), @@ -2685,6 +2687,8 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) N_("create thin packs")), OPT_BOOL(0, "shallow", &shallow, N_("create packs suitable for shallow fetches")), + OPT_STRING(0, "sparse-prefix", &sparse_prefix, N_("path"), + N_("only include blobs relevant for sparse checkout (implies --revs)")), OPT_BOOL(0, "honor-pack-keep", &ignore_packed_keep, N_("ignore packs that have companion .keep file")), OPT_INTEGER(0, "compression", &pack_compression_level, @@ -2725,6 +2729,13 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) } else argv_array_push(&rp, "--objects"); + if (sparse_prefix) { + use_internal_rev_list = 1; + // with bitmaps the path of the blobs is not known + use_bitmap_index = 0; + argv_array_push(&rp, "--sparse-prefix"); + argv_array_push(&rp, sparse_prefix); + } if (rev_list_all) { use_internal_rev_list = 1; argv_array_push(&rp, "--all");
-- 2.9.1.283.g3ca5b4c.dirty