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>
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user