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 <jeffhost@microsoft.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									49800c9407
								
							
						
					
					
						commit
						9f41c7a6b3
					
				
							
								
								
									
										13
									
								
								read-cache.c
								
								
								
								
							
							
						
						
									
										13
									
								
								read-cache.c
								
								
								
								
							|  | @ -2011,9 +2011,10 @@ void update_index_if_able(struct index_state *istate, struct lock_file *lockfile | |||
| 		rollback_lock_file(lockfile); | ||||
| } | ||||
|  | ||||
| static int do_write_index(struct index_state *istate, int newfd, | ||||
| static int do_write_index(struct index_state *istate, struct tempfile *tempfile, | ||||
| 			  int strip_extensions) | ||||
| { | ||||
| 	int newfd = tempfile->fd; | ||||
| 	git_SHA_CTX c; | ||||
| 	struct cache_header hdr; | ||||
| 	int i, err, removed, extended, hdr_version; | ||||
|  | @ -2122,7 +2123,11 @@ static int do_write_index(struct index_state *istate, int newfd, | |||
| 			return -1; | ||||
| 	} | ||||
|  | ||||
| 	if (ce_flush(&c, newfd, istate->sha1) || fstat(newfd, &st)) | ||||
| 	if (ce_flush(&c, newfd, istate->sha1)) | ||||
| 		return -1; | ||||
| 	if (close_tempfile(tempfile)) | ||||
| 		return error(_("could not close '%s'"), tempfile->filename.buf); | ||||
| 	if (stat(tempfile->filename.buf, &st)) | ||||
| 		return -1; | ||||
| 	istate->timestamp.sec = (unsigned int)st.st_mtime; | ||||
| 	istate->timestamp.nsec = ST_MTIME_NSEC(st); | ||||
|  | @ -2145,7 +2150,7 @@ static int commit_locked_index(struct lock_file *lk) | |||
| static int do_write_locked_index(struct index_state *istate, struct lock_file *lock, | ||||
| 				 unsigned flags) | ||||
| { | ||||
| 	int ret = do_write_index(istate, get_lock_file_fd(lock), 0); | ||||
| 	int ret = do_write_index(istate, &lock->tempfile, 0); | ||||
| 	if (ret) | ||||
| 		return ret; | ||||
| 	assert((flags & (COMMIT_LOCK | CLOSE_LOCK)) != | ||||
|  | @ -2183,7 +2188,7 @@ static int write_shared_index(struct index_state *istate, | |||
| 		return do_write_locked_index(istate, lock, flags); | ||||
| 	} | ||||
| 	move_cache_to_base_index(istate); | ||||
| 	ret = do_write_index(si->base, fd, 1); | ||||
| 	ret = do_write_index(si->base, &temporary_sharedindex, 1); | ||||
| 	if (ret) { | ||||
| 		delete_tempfile(&temporary_sharedindex); | ||||
| 		return ret; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Jeff Hostetler
						Jeff Hostetler