[PATCH 5/6] have index-pack create .keep file more carefully
- From
Nicolas Pitre <nico@cam.org>
- Date
- Nov 1, 2006, 22:06 UTC
- Message-ID
- <11624187871572-git-send-email-nico@cam.org>
- In-Reply-To
- <1162418786390-git-send-email-nico@cam.org>
If by chance we receive a pack which content (list of objects) matches another pack that we already have, and if that pack is marked with a .keep file, then we should not overwrite it.
Signed-off-by: Nicolas Pitre <nico@cam.org> --- index-pack.c | 17 ++++++++++------- 1 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/index-pack.c b/index-pack.c index a3b55f9..8d64a88 100644 --- a/index-pack.c +++ b/index-pack.c @@ -788,14 +788,17 @@ static void final(const char *final_pack get_object_directory(), sha1_to_hex(sha1)); keep_name = name; } - keep_fd = open(keep_name, O_RDWR | O_CREAT, 0600); - if (keep_fd < 0) - die("cannot write keep file"); - if (keep_msg_len > 0) { - write_or_die(keep_fd, keep_msg, keep_msg_len); - write_or_die(keep_fd, "\n", 1); + keep_fd = open(keep_name, O_RDWR|O_CREAT|O_EXCL, 0600); + if (keep_fd < 0) { + if (errno != EEXIST) + die("cannot write keep file"); + } else { + if (keep_msg_len > 0) { + write_or_die(keep_fd, keep_msg, keep_msg_len); + write_or_die(keep_fd, "\n", 1); + } + close(keep_fd); } - close(keep_fd); } if (final_pack_name != curr_pack_name) {
-- 1.4.3.3.g87b2-dirty