Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
update-index --split-index: do not split if $GIT_DIR is read only
author
Nguyễn Thái Ngọc Duy
<pclouds@gmail.com>
Fri, 13 Jun 2014 12:19:45 +0000
(19:19 +0700)
committer
Junio C Hamano
<gitster@pobox.com>
Fri, 13 Jun 2014 18:49:41 +0000
(11:49 -0700)
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>
read-cache.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (from parent 1:
c18b80a
)
diff --git
a/read-cache.c
b/read-cache.c
index 8ecb9599e58d3e08e6cf84f3d5403eae59d1e997..aa848e170f205fda3e4cc9afae115b7795612a58 100644
(file)
--- a/
read-cache.c
+++ b/
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;
static int installed_handler;
int fd, ret;
temporary_sharedindex = git_pathdup("sharedindex_XXXXXX");
{
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);
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) {
}
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;
}
if (ret)
return ret;
}