Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- Documentation/git-pack-objects.txt | 4 ++++ builtin/pack-objects.c | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/Documentation/git-pack-objects.txt b/Documentation/git-pack-objects.txt index cdab9ed..8aae3b5 100644 --- a/Documentation/git-pack-objects.txt +++ b/Documentation/git-pack-objects.txt @@ -117,6 +117,10 @@ base-name:: has a .keep file to be ignored, even if it would have otherwise been packed. +--keep:: + Before moving the index into its final destination + create an empty .keep file for the associated pack file. + --incremental:: This flag causes an object already in a pack to be ignored even if it would have otherwise been packed. diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 1fb972f..46c7a57 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -57,6 +57,7 @@ static int num_preferred_base; static struct progress *progress_state; static int pack_compression_level = Z_DEFAULT_COMPRESSION; static int pack_compression_seen; +static int keep_pack; static struct packed_git *reuse_packfile; static uint32_t reuse_packfile_objects; @@ -745,6 +746,23 @@ static off_t write_reused_pack(struct sha1file *f) return reuse_packfile_offset - sizeof(struct pack_header); } +static void write_keep_file(const unsigned char *sha1) +{ + const char *msg = "pack-objects --keep\n"; + char name[PATH_MAX]; + int keep_fd = odb_pack_keep(name, sizeof(name), sha1); + if (keep_fd < 0) { + if (errno != EEXIST) + die_errno(_("cannot write keep file '%s'"), + name); + return; + } + write_or_die(keep_fd, msg, strlen(msg)); + if (close(keep_fd) != 0) + die_errno(_("cannot close written keep file '%s'"), + name); +} + static void write_pack_file(void) { uint32_t i = 0, j; @@ -805,6 +823,9 @@ static void write_pack_file(void) struct stat st; char tmpname[PATH_MAX]; + if (keep_pack) + write_keep_file(sha1); + /* * Packs are runtime accessed in their mtime * order since newer packs are more likely to contain @@ -2609,6 +2630,8 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) N_("use a bitmap index if available to speed up counting objects")), OPT_BOOL(0, "write-bitmap-index", &write_bitmap_index, N_("write a bitmap index together with the pack index")), + OPT_BOOL(0, "keep", &keep_pack, + N_("create .keep for the new pack")), OPT_END(), }; @@ -2672,6 +2695,9 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) if (!pack_to_stdout && thin) die("--thin cannot be used to build an indexable pack."); + if (pack_to_stdout && keep_pack) + die("--keep cannot be used with --stdout"); + if (keep_unreachable && unpack_unreachable) die("--keep-unreachable and --unpack-unreachable are incompatible."); -- 1.9.0.40.gaa8c3ea -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html