From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH 2/4] pack-objects: support --keep
Date: Sun, 16 Mar 2014 20:35:02 +0700 [thread overview]
Message-ID: <1394976904-15395-4-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1394976904-15395-1-git-send-email-pclouds@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
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
next prev parent reply other threads:[~2014-03-16 13:34 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-16 13:34 [PATCH 0/4] Better "gc --aggressive" Nguyễn Thái Ngọc Duy
2014-03-16 13:35 ` [PATCH 1/4] environment.c: fix constness for odb_pack_keep() Nguyễn Thái Ngọc Duy
2014-03-16 13:35 ` [PATCH] index-pack: do not segfault when keep_name is NULL Nguyễn Thái Ngọc Duy
2014-03-16 13:35 ` Nguyễn Thái Ngọc Duy [this message]
2014-03-16 13:35 ` [PATCH 3/4] gc --aggressive: make --depth configurable Nguyễn Thái Ngọc Duy
[not found] ` <CAG+J_Dw=Y5d2JTOngkxH=vNg3C43nP5=y7S6VXS=aHgmBshYZQ@mail.gmail.com>
2014-03-16 23:06 ` Duy Nguyen
2014-03-16 13:35 ` [PATCH 4/4] gc --aggressive: three phase repacking Nguyễn Thái Ngọc Duy
2014-03-17 22:12 ` Junio C Hamano
2014-03-17 22:59 ` Duy Nguyen
2014-03-17 23:07 ` Junio C Hamano
2014-03-18 4:50 ` Jeff King
2014-03-18 5:00 ` Duy Nguyen
2014-03-18 5:13 ` Jeff King
2014-03-18 6:16 ` David Kastrup
2014-03-19 11:03 ` Duy Nguyen
2014-03-18 5:07 ` Jeff King
2014-03-18 5:16 ` Duy Nguyen
2014-03-18 6:19 ` Duy Nguyen
2014-03-18 7:38 ` David Kastrup
[not found] ` <CALbm-EbZSuzynXoUNEifP=Ga_mj6Fp9L9Do-mxhRdMvUEfogig@mail.gmail.com>
2014-03-20 1:31 ` Duy Nguyen
2014-03-18 6:19 ` David Kastrup
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=1394976904-15395-4-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.