update-index --split-index: do not split if $GIT_DIR is read only
If $GIT_DIR is read only, we can't write $GIT_DIR/sharedindex. This could happen when $GIT_INDEX_FILE is set to somehwere outside $GIT_DIR. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
		 Nguyễn Thái Ngọc Duy
					Nguyễn Thái Ngọc Duy
				
			
				
					committed by
					
						 Junio C Hamano
						Junio C Hamano
					
				
			
			
				
	
			
			
			 Junio C Hamano
						Junio C Hamano
					
				
			
						parent
						
							c18b80a0e8
						
					
				
				
					commit
					a0a967568e
				
			
							
								
								
									
										13
									
								
								read-cache.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								read-cache.c
									
									
									
									
									
								
							| @ -2030,14 +2030,21 @@ static void remove_temporary_sharedindex_on_signal(int signo) | |||||||
| 	raise(signo); | 	raise(signo); | ||||||
| } | } | ||||||
|  |  | ||||||
| static int write_shared_index(struct index_state *istate) | static int write_shared_index(struct index_state *istate, | ||||||
|  | 			      struct lock_file *lock, unsigned flags) | ||||||
| { | { | ||||||
| 	struct split_index *si = istate->split_index; | 	struct split_index *si = istate->split_index; | ||||||
| 	static int installed_handler; | 	static int installed_handler; | ||||||
| 	int fd, ret; | 	int fd, ret; | ||||||
|  |  | ||||||
| 	temporary_sharedindex = git_pathdup("sharedindex_XXXXXX"); | 	temporary_sharedindex = git_pathdup("sharedindex_XXXXXX"); | ||||||
| 	fd = xmkstemp(temporary_sharedindex); | 	fd = mkstemp(temporary_sharedindex); | ||||||
|  | 	if (fd < 0) { | ||||||
|  | 		free(temporary_sharedindex); | ||||||
|  | 		temporary_sharedindex = NULL; | ||||||
|  | 		hashclr(si->base_sha1); | ||||||
|  | 		return do_write_locked_index(istate, lock, flags); | ||||||
|  | 	} | ||||||
| 	if (!installed_handler) { | 	if (!installed_handler) { | ||||||
| 		atexit(remove_temporary_sharedindex); | 		atexit(remove_temporary_sharedindex); | ||||||
| 		sigchain_push_common(remove_temporary_sharedindex_on_signal); | 		sigchain_push_common(remove_temporary_sharedindex_on_signal); | ||||||
| @ -2070,7 +2077,7 @@ int write_locked_index(struct index_state *istate, struct lock_file *lock, | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (istate->cache_changed & SPLIT_INDEX_ORDERED) { | 	if (istate->cache_changed & SPLIT_INDEX_ORDERED) { | ||||||
| 		int ret = write_shared_index(istate); | 		int ret = write_shared_index(istate, lock, flags); | ||||||
| 		if (ret) | 		if (ret) | ||||||
| 			return ret; | 			return ret; | ||||||
| 	} | 	} | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user