From: Dana How <danahow@gmail.com>
To: Junio C Hamano <junkio@cox.net>
Cc: Git Mailing List <git@vger.kernel.org>, danahow@gmail.com
Subject: [PATCH 4/8] git-repack --max-pack-size: add fixup_header_footer()
Date: Mon, 30 Apr 2007 16:21:15 -0700 [thread overview]
Message-ID: <463679EB.2010301@gmail.com> (raw)
Add our own version of the one in fast-import.c here.
Needed later to correct bad object count in header for split pack.
Signed-off-by: Dana L. How <danahow@gmail.com>
---
builtin-pack-objects.c | 36 ++++++++++++++++++++++++++++++++++++
1 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c
index bc45ca6..98066bf 100644
--- a/builtin-pack-objects.c
+++ b/builtin-pack-objects.c
@@ -562,6 +562,42 @@ static off_t write_one(struct sha1file *f,
return offset + size;
}
+static void fixup_header_footer(int pack_fd, unsigned char *pack_file_sha1,
+ char *pack_name, uint32_t object_count)
+{
+ static const int buf_sz = 128 * 1024;
+ SHA_CTX c;
+ struct pack_header hdr;
+ char *buf;
+
+ if (lseek(pack_fd, 0, SEEK_SET) != 0)
+ die("Failed seeking to start: %s", strerror(errno));
+ if (read_in_full(pack_fd, &hdr, sizeof(hdr)) != sizeof(hdr))
+ die("Unable to reread header of %s", pack_name);
+ if (lseek(pack_fd, 0, SEEK_SET) != 0)
+ die("Failed seeking to start: %s", strerror(errno));
+ hdr.hdr_entries = htonl(object_count);
+ write_or_die(pack_fd, &hdr, sizeof(hdr));
+
+ SHA1_Init(&c);
+ SHA1_Update(&c, &hdr, sizeof(hdr));
+
+ buf = xmalloc(buf_sz);
+ for (;;) {
+ size_t n = xread(pack_fd, buf, buf_sz);
+ if (!n)
+ break;
+ if (n < 0)
+ die("Failed to checksum %s", pack_name);
+ SHA1_Update(&c, buf, n);
+ }
+ free(buf);
+
+ SHA1_Final(pack_file_sha1, &c);
+ write_or_die(pack_fd, pack_file_sha1, 20);
+ close(pack_fd);
+}
+
/* forward declarations for write_pack_file */
static void write_index_file(off_t last_obj_offset, unsigned char *sha1);
static int adjust_perm(const char *path, mode_t mode);
--
1.5.2.rc0.766.gba60-dirty
next reply other threads:[~2007-04-30 23:22 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-04-30 23:21 Dana How [this message]
2007-05-01 5:06 ` [PATCH 4/8] git-repack --max-pack-size: add fixup_header_footer() Shawn O. Pearce
2007-05-01 5:41 ` Dana How
2007-05-01 6:03 ` Shawn O. Pearce
2007-05-01 7:32 ` Johannes Schindelin
2007-05-01 17:48 ` Nicolas Pitre
2007-05-01 17:58 ` Dana How
2007-05-01 18:39 ` Nicolas Pitre
-- strict thread matches above, loose matches on Subject: below --
2007-04-08 23:22 Dana How
2007-04-09 0:04 ` Junio C Hamano
2007-04-09 0:18 ` Nicolas Pitre
2007-04-09 17:38 ` Shawn O. Pearce
2007-04-09 18:30 ` Nicolas Pitre
2007-04-09 18:40 ` Shawn O. Pearce
2007-04-09 19:11 ` Dana How
2007-04-09 19:33 ` Nicolas Pitre
2007-04-09 21:38 ` Dana How
2007-04-09 23:22 ` Nicolas Pitre
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=463679EB.2010301@gmail.com \
--to=danahow@gmail.com \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
/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.