summaryrefslogtreecommitdiff
path: root/csum-file.c
diff options
context:
space:
mode:
authorDerrick Stolee <dstolee@microsoft.com>2018-04-02 20:34:15 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-04-02 21:27:30 (GMT)
commitcfe83216e404223ce8c5f6ef79c4ba9a27ff872e (patch)
tree6f64a9ccff4777e87bd43fdf8e051a215048ae63 /csum-file.c
parentf2af9f5e02380ba3868df7daa34368945d500206 (diff)
downloadgit-cfe83216e404223ce8c5f6ef79c4ba9a27ff872e.zip
git-cfe83216e404223ce8c5f6ef79c4ba9a27ff872e.tar.gz
git-cfe83216e404223ce8c5f6ef79c4ba9a27ff872e.tar.bz2
csum-file: refactor finalize_hashfile() method
If we want to use a hashfile on the temporary file for a lockfile, then we need finalize_hashfile() to fully write the trailing hash but also keep the file descriptor open. Do this by adding a new CSUM_HASH_IN_STREAM flag along with a functional change that checks this flag before writing the checksum to the stream. This differs from previous behavior since it would be written if either CSUM_CLOSE or CSUM_FSYNC is provided. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'csum-file.c')
-rw-r--r--csum-file.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/csum-file.c b/csum-file.c
index e6c95a6..53ce37f 100644
--- a/csum-file.c
+++ b/csum-file.c
@@ -61,11 +61,11 @@ int finalize_hashfile(struct hashfile *f, unsigned char *result, unsigned int fl
the_hash_algo->final_fn(f->buffer, &f->ctx);
if (result)
hashcpy(result, f->buffer);
- if (flags & (CSUM_CLOSE | CSUM_FSYNC)) {
- /* write checksum and close fd */
+ if (flags & CSUM_HASH_IN_STREAM)
flush(f, f->buffer, the_hash_algo->rawsz);
- if (flags & CSUM_FSYNC)
- fsync_or_die(f->fd, f->name);
+ if (flags & CSUM_FSYNC)
+ fsync_or_die(f->fd, f->name);
+ if (flags & CSUM_CLOSE) {
if (close(f->fd))
die_errno("%s: sha1 file error on close", f->name);
fd = 0;