From: Dmitry Ivankov <divanorama@gmail.com>
To: git@vger.kernel.org
Cc: Jonathan Nieder <jrnieder@gmail.com>,
"Shawn O. Pearce" <spearce@spearce.org>,
David Barr <davidbarr@google.com>,
Dmitry Ivankov <divanorama@gmail.com>
Subject: [PATCH/WIP 1/7] fast-import: extract object preparation function
Date: Thu, 28 Jul 2011 10:46:04 +0600 [thread overview]
Message-ID: <1311828370-30477-2-git-send-email-divanorama@gmail.com> (raw)
In-Reply-To: <1311828370-30477-1-git-send-email-divanorama@gmail.com>
We're constructing raw objects and compute their sha1's in fast-import
just before saving them.
Extract header and sha1 computations so that we can get sha1 without
actually saving the object.
Signed-off-by: Dmitry Ivankov <divanorama@gmail.com>
---
fast-import.c | 32 +++++++++++++++++++++++++-------
1 files changed, 25 insertions(+), 7 deletions(-)
diff --git a/fast-import.c b/fast-import.c
index 9e8d186..05cc55e 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -1005,6 +1005,30 @@ static void cycle_packfile(void)
start_packfile();
}
+static void prepare_object_hash(
+ enum object_type type,
+ struct strbuf *dat,
+ unsigned char *hdr_out,
+ unsigned long *hdrlen_out,
+ unsigned char *sha1_out
+)
+{
+ unsigned char hdr_[96];
+ unsigned char *hdr = hdr_out ? hdr_out : hdr_;
+ unsigned long hdrlen;
+ git_SHA_CTX c;
+
+ hdrlen = sprintf((char *)hdr,"%s %lu", typename(type),
+ (unsigned long)dat->len) + 1;
+ git_SHA1_Init(&c);
+ git_SHA1_Update(&c, hdr, hdrlen);
+ git_SHA1_Update(&c, dat->buf, dat->len);
+ git_SHA1_Final(sha1_out, &c);
+
+ if (hdrlen_out)
+ *hdrlen_out = hdrlen;
+}
+
static int store_object(
enum object_type type,
struct strbuf *dat,
@@ -1017,15 +1041,9 @@ static int store_object(
unsigned char hdr[96];
unsigned char sha1[20];
unsigned long hdrlen, deltalen;
- git_SHA_CTX c;
git_zstream s;
- hdrlen = sprintf((char *)hdr,"%s %lu", typename(type),
- (unsigned long)dat->len) + 1;
- git_SHA1_Init(&c);
- git_SHA1_Update(&c, hdr, hdrlen);
- git_SHA1_Update(&c, dat->buf, dat->len);
- git_SHA1_Final(sha1, &c);
+ prepare_object_hash(type, dat, hdr, &hdrlen, sha1);
if (sha1out)
hashcpy(sha1out, sha1);
--
1.7.3.4
next prev parent reply other threads:[~2011-07-28 4:43 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-28 4:46 [PATCH/WIP 0/7] was: long fast-import errors out "failed to apply delta" Dmitry Ivankov
2011-07-28 4:46 ` Dmitry Ivankov [this message]
2011-07-28 4:46 ` [PATCH/WIP 2/7] fast-import: be saner with temporary trees Dmitry Ivankov
2011-07-28 7:27 ` Jonathan Nieder
2011-07-28 4:46 ` [PATCH/WIP 3/7] fast-import: fix a data corruption in parse_ls Dmitry Ivankov
2011-07-28 7:34 ` Jonathan Nieder
2011-07-28 4:46 ` [PATCH/WIP 4/7] fast-import: fix data corruption in store_tree Dmitry Ivankov
2011-07-28 7:42 ` Jonathan Nieder
2011-07-28 8:11 ` Dmitry Ivankov
2011-07-28 4:46 ` [PATCH/WIP 5/7] fast-import: extract tree_content reading function Dmitry Ivankov
2011-07-28 4:46 ` [PATCH/WIP 6/7] fast-import: workaround data corruption Dmitry Ivankov
2011-07-28 6:31 ` Jonathan Nieder
2011-07-28 4:46 ` [PATCH/WIP 7/7] fast-import: fix data corruption in load_tree Dmitry Ivankov
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=1311828370-30477-2-git-send-email-divanorama@gmail.com \
--to=divanorama@gmail.com \
--cc=davidbarr@google.com \
--cc=git@vger.kernel.org \
--cc=jrnieder@gmail.com \
--cc=spearce@spearce.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.