summary refs log tree commit diff
path: root/csum-file.h
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2011-11-17 16:26:54 -0800
committerJunio C Hamano <gitster@pobox.com>2011-11-30 14:27:59 -0800
commit6c526148644475acbc047faaeb57d42fde1f667d (patch)
tree1bf8400d2f5dff6ea15775b8b8af47af2e740617 /csum-file.h
parent0e990530ae6d6c6805d31c666953541f762dd402 (diff)
csum-file: introduce sha1file_checkpoint
It is useful to be able to rewind a check-summed file to a certain
previous state after writing data into it using sha1write() API. The
fast-import command does this after streaming a blob data to the packfile
being generated and then noticing that the same blob has already been
written, and it does this with a private code truncate_pack() that is
commented as "Yes, this is a layering violation".

Introduce two API functions, sha1file_checkpoint(), that allows the caller
to save a state of a sha1file, and then later revert it to the saved state.
Use it to reimplement truncate_pack().

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'csum-file.h')
-rw-r--r--csum-file.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/csum-file.h b/csum-file.h
index 6a7967c6bf..3b540bdc21 100644
--- a/csum-file.h
+++ b/csum-file.h
@@ -17,6 +17,15 @@ struct sha1file {
 	unsigned char buffer[8192];
 };
 
+/* Checkpoint */
+struct sha1file_checkpoint {
+	off_t offset;
+	git_SHA_CTX ctx;
+};
+
+extern void sha1file_checkpoint(struct sha1file *, struct sha1file_checkpoint *);
+extern int sha1file_truncate(struct sha1file *, struct sha1file_checkpoint *);
+
 /* sha1close flags */
 #define CSUM_CLOSE	1
 #define CSUM_FSYNC	2