Signed-off-by: Nguyễn Thái Ngọc Duy <[email protected]>
---
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html