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:
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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user