mirror of
https://github.com/git/git.git
synced 2024-11-28 04:23:30 +08:00
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);
|
||||
}
|
||||
|
||||
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;
|
||||
static int installed_handler;
|
||||
int fd, ret;
|
||||
|
||||
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) {
|
||||
atexit(remove_temporary_sharedindex);
|
||||
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) {
|
||||
int ret = write_shared_index(istate);
|
||||
int ret = write_shared_index(istate, lock, flags);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user