зеркало из https://github.com/microsoft/git.git
reset: integrate with sparse index
Disable `command_requires_full_index` repo setting and add `ensure_full_index` guards around code paths that cannot yet use sparse directory index entries. `reset --soft` does not modify the index, so no compatibility changes are needed for it to function without expanding the index. For all other reset modes (`--mixed`, `--hard`, `--keep`, `--merge`), the full index is expanded to prevent cache tree corruption and invalid variable accesses. Additionally, the `read_cache()` check verifying an uncorrupted index is moved after argument parsing and preparing the repo settings. The index is not used by the preceding argument handling, but `read_cache()` must be run *after* enabling sparse index for the command (so that the index is not expanded unnecessarily) and *before* using the index for reset (so that it is verified as uncorrupted). Signed-off-by: Victoria Dye <vdye@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
291d77eb3e
Коммит
c01b1cbd47
|
@ -180,6 +180,7 @@ static int read_from_tree(const struct pathspec *pathspec,
|
|||
opt.flags.override_submodule_config = 1;
|
||||
opt.repo = the_repository;
|
||||
|
||||
ensure_full_index(&the_index);
|
||||
if (do_diff_cache(tree_oid, &opt))
|
||||
return 1;
|
||||
diffcore_std(&opt);
|
||||
|
@ -257,9 +258,6 @@ static void parse_args(struct pathspec *pathspec,
|
|||
}
|
||||
*rev_ret = rev;
|
||||
|
||||
if (read_cache() < 0)
|
||||
die(_("index file corrupt"));
|
||||
|
||||
parse_pathspec(pathspec, 0,
|
||||
PATHSPEC_PREFER_FULL |
|
||||
(patch_mode ? PATHSPEC_PREFIX_ORIGIN : 0),
|
||||
|
@ -405,6 +403,12 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
|||
if (intent_to_add && reset_type != MIXED)
|
||||
die(_("-N can only be used with --mixed"));
|
||||
|
||||
prepare_repo_settings(the_repository);
|
||||
the_repository->settings.command_requires_full_index = 0;
|
||||
|
||||
if (read_cache() < 0)
|
||||
die(_("index file corrupt"));
|
||||
|
||||
/* Soft reset does not touch the index file nor the working tree
|
||||
* at all, but requires them in a good order. Other resets reset
|
||||
* the index file to the tree object we are switching to. */
|
||||
|
|
|
@ -776,6 +776,7 @@ void prime_cache_tree(struct repository *r,
|
|||
cache_tree_free(&istate->cache_tree);
|
||||
istate->cache_tree = cache_tree();
|
||||
|
||||
ensure_full_index(istate);
|
||||
prime_cache_tree_rec(r, istate->cache_tree, tree);
|
||||
istate->cache_changed |= CACHE_TREE_CHANGED;
|
||||
trace2_region_leave("cache-tree", "prime_cache_tree", the_repository);
|
||||
|
|
Загрузка…
Ссылка в новой задаче