diff options
author | Junio C Hamano <gitster@pobox.com> | 2018-03-22 14:24:16 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-03-22 14:24:16 -0700 |
commit | 3112c3fa7fdc7209e4c832a9faf4f023e97a4f5e (patch) | |
tree | 0d517c9c6160f3d7aa43060e751e7f7d42a6fcdf /read-cache.c | |
parent | bffce882fdf03aa7083d56d038c2dc2be58a9200 (diff) | |
parent | ef5b3a6c5e24c54ba4436e225b9431c63ab163f0 (diff) | |
download | git-3112c3fa7fdc7209e4c832a9faf4f023e97a4f5e.tar.gz |
Merge branch 'nd/shared-index-fix' into maint
Code clean-up.
* nd/shared-index-fix:
read-cache: don't write index twice if we can't write shared index
read-cache.c: move tempfile creation/cleanup out of write_shared_index
read-cache.c: change type of "temp" in write_shared_index()
Diffstat (limited to 'read-cache.c')
-rw-r--r-- | read-cache.c | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/read-cache.c b/read-cache.c index d13ce83794..198e72b685 100644 --- a/read-cache.c +++ b/read-cache.c @@ -2472,32 +2472,21 @@ static int clean_shared_index_files(const char *current_hex) } static int write_shared_index(struct index_state *istate, - struct lock_file *lock, unsigned flags) + struct tempfile **temp) { - struct tempfile *temp; struct split_index *si = istate->split_index; int ret; - temp = mks_tempfile(git_path("sharedindex_XXXXXX")); - if (!temp) { - hashclr(si->base_sha1); - return do_write_locked_index(istate, lock, flags); - } move_cache_to_base_index(istate); - ret = do_write_index(si->base, temp, 1); - if (ret) { - delete_tempfile(&temp); + ret = do_write_index(si->base, *temp, 1); + if (ret) return ret; - } - ret = adjust_shared_perm(get_tempfile_path(temp)); + ret = adjust_shared_perm(get_tempfile_path(*temp)); if (ret) { - int save_errno = errno; - error("cannot fix permission bits on %s", get_tempfile_path(temp)); - delete_tempfile(&temp); - errno = save_errno; + error("cannot fix permission bits on %s", get_tempfile_path(*temp)); return ret; } - ret = rename_tempfile(&temp, + ret = rename_tempfile(temp, git_path("sharedindex.%s", sha1_to_hex(si->base->sha1))); if (!ret) { hashcpy(si->base_sha1, si->base->sha1); @@ -2565,7 +2554,22 @@ int write_locked_index(struct index_state *istate, struct lock_file *lock, new_shared_index = istate->cache_changed & SPLIT_INDEX_ORDERED; if (new_shared_index) { - ret = write_shared_index(istate, lock, flags); + struct tempfile *temp; + int saved_errno; + + temp = mks_tempfile(git_path("sharedindex_XXXXXX")); + if (!temp) { + hashclr(si->base_sha1); + ret = do_write_locked_index(istate, lock, flags); + goto out; + } + ret = write_shared_index(istate, &temp); + + saved_errno = errno; + if (is_tempfile_active(temp)) + delete_tempfile(&temp); + errno = saved_errno; + if (ret) goto out; } |