From: Junio C Hamano Date: Sat, 24 Jun 2017 19:04:25 +0000 (-0700) Subject: Merge branch 'nd/split-index-unshare' X-Git-Tag: v2.14.0-rc0~70 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/6ba4d62ba8fb00310df6e6cc0d4437871106c5ed?hp=-c Merge branch 'nd/split-index-unshare' * nd/split-index-unshare: Revert "split-index: add and use unshare_split_index()" --- 6ba4d62ba8fb00310df6e6cc0d4437871106c5ed diff --combined read-cache.c index bc156a133e,0d0081a11b..f026920052 --- a/read-cache.c +++ b/read-cache.c @@@ -1877,9 -1877,15 +1877,15 @@@ int discard_index(struct index_state *i { int i; - unshare_split_index(istate, 1); - for (i = 0; i < istate->cache_nr; i++) + for (i = 0; i < istate->cache_nr; i++) { + if (istate->cache[i]->index && + istate->split_index && + istate->split_index->base && + istate->cache[i]->index <= istate->split_index->base->cache_nr && + istate->cache[i] == istate->split_index->base->cache[istate->cache[i]->index - 1]) + continue; free(istate->cache[i]); + } resolve_undo_clear_index(istate); istate->cache_nr = 0; istate->cache_changed = 0; @@@ -2181,10 -2187,9 +2187,10 @@@ void update_index_if_able(struct index_ rollback_lock_file(lockfile); } -static int do_write_index(struct index_state *istate, int newfd, +static int do_write_index(struct index_state *istate, struct tempfile *tempfile, int strip_extensions) { + int newfd = tempfile->fd; git_SHA_CTX c; struct cache_header hdr; int i, err, removed, extended, hdr_version; @@@ -2192,7 -2197,6 +2198,7 @@@ int entries = istate->cache_nr; struct stat st; struct strbuf previous_name_buf = STRBUF_INIT, *previous_name; + int drop_cache_tree = 0; for (i = removed = extended = 0; i < entries; i++) { if (cache[i]->ce_flags & CE_REMOVE) @@@ -2243,8 -2247,6 +2249,8 @@@ warning(msg, ce->name); else return error(msg, ce->name); + + drop_cache_tree = 1; } if (ce_write_entry(&c, newfd, ce, previous_name) < 0) return -1; @@@ -2263,7 -2265,7 +2269,7 @@@ if (err) return -1; } - if (!strip_extensions && istate->cache_tree) { + if (!strip_extensions && !drop_cache_tree && istate->cache_tree) { struct strbuf sb = STRBUF_INIT; cache_tree_write(&sb, istate->cache_tree); @@@ -2296,11 -2298,7 +2302,11 @@@ return -1; } - if (ce_flush(&c, newfd, istate->sha1) || fstat(newfd, &st)) + if (ce_flush(&c, newfd, istate->sha1)) + return -1; + if (close_tempfile(tempfile)) + return error(_("could not close '%s'"), tempfile->filename.buf); + if (stat(tempfile->filename.buf, &st)) return -1; istate->timestamp.sec = (unsigned int)st.st_mtime; istate->timestamp.nsec = ST_MTIME_NSEC(st); @@@ -2323,7 -2321,7 +2329,7 @@@ static int commit_locked_index(struct l static int do_write_locked_index(struct index_state *istate, struct lock_file *lock, unsigned flags) { - int ret = do_write_index(istate, get_lock_file_fd(lock), 0); + int ret = do_write_index(istate, &lock->tempfile, 0); if (ret) return ret; assert((flags & (COMMIT_LOCK | CLOSE_LOCK)) != @@@ -2420,7 -2418,7 +2426,7 @@@ static int write_shared_index(struct in return do_write_locked_index(istate, lock, flags); } move_cache_to_base_index(istate); - ret = do_write_index(si->base, fd, 1); + ret = do_write_index(si->base, &temporary_sharedindex, 1); if (ret) { delete_tempfile(&temporary_sharedindex); return ret; @@@ -2630,9 -2628,3 +2636,9 @@@ void stat_validity_update(struct stat_v fill_stat_data(sv->sd, &st); } } + +void move_index_extensions(struct index_state *dst, struct index_state *src) +{ + dst->untracked = src->untracked; + src->untracked = NULL; +}