Skip to content

Commit f5c7dc2

Browse files
jeffhostetlerdscho
authored andcommitted
read-cache: close index.lock in do_write_index
Teach do_write_index() to close the index.lock file before getting the mtime and updating the istate.timestamp fields. On Windows, a file's mtime is not updated until the file is closed. On Linux, the mtime is set after the last flush. Signed-off-by: Jeff Hostetler <[email protected]>
1 parent 99ddf87 commit f5c7dc2

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

read-cache.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2181,9 +2181,10 @@ void update_index_if_able(struct index_state *istate, struct lock_file *lockfile
21812181
rollback_lock_file(lockfile);
21822182
}
21832183

2184-
static int do_write_index(struct index_state *istate, int newfd,
2184+
static int do_write_index(struct index_state *istate, struct tempfile *tempfile,
21852185
int strip_extensions)
21862186
{
2187+
int newfd = tempfile->fd;
21872188
git_SHA_CTX c;
21882189
struct cache_header hdr;
21892190
int i, err, removed, extended, hdr_version;
@@ -2295,7 +2296,11 @@ static int do_write_index(struct index_state *istate, int newfd,
22952296
return -1;
22962297
}
22972298

2298-
if (ce_flush(&c, newfd, istate->sha1) || fstat(newfd, &st))
2299+
if (ce_flush(&c, newfd, istate->sha1))
2300+
return -1;
2301+
if (close_tempfile(tempfile))
2302+
return error(_("could not close '%s'"), tempfile->filename.buf);
2303+
if (lstat(tempfile->filename.buf, &st))
22992304
return -1;
23002305
istate->timestamp.sec = (unsigned int)st.st_mtime;
23012306
istate->timestamp.nsec = ST_MTIME_NSEC(st);
@@ -2318,7 +2323,7 @@ static int commit_locked_index(struct lock_file *lk)
23182323
static int do_write_locked_index(struct index_state *istate, struct lock_file *lock,
23192324
unsigned flags)
23202325
{
2321-
int ret = do_write_index(istate, get_lock_file_fd(lock), 0);
2326+
int ret = do_write_index(istate, &lock->tempfile, 0);
23222327
if (ret)
23232328
return ret;
23242329
assert((flags & (COMMIT_LOCK | CLOSE_LOCK)) !=
@@ -2415,7 +2420,7 @@ static int write_shared_index(struct index_state *istate,
24152420
return do_write_locked_index(istate, lock, flags);
24162421
}
24172422
move_cache_to_base_index(istate);
2418-
ret = do_write_index(si->base, fd, 1);
2423+
ret = do_write_index(si->base, &temporary_sharedindex, 1);
24192424
if (ret) {
24202425
delete_tempfile(&temporary_sharedindex);
24212426
return ret;

0 commit comments

Comments
 (0)