Skip to content

Commit 33e9a20

Browse files
committed
sparse-index: integrate with reset
This change enables running the `reset` builtin command without expanding the full index in a cone-mode sparse checkout. `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 explicitly expanded with `ensure_full_index` to maintain current behavior. 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()` does need to be run after enabling sparse index for the command and before using the index for the reset. Signed-off-by: Victoria Dye <[email protected]>
1 parent 8d8143a commit 33e9a20

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

builtin/reset.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ static int read_from_tree(const struct pathspec *pathspec,
204204
opt.flags.override_submodule_config = 1;
205205
opt.repo = the_repository;
206206

207+
ensure_full_index(&the_index);
207208
if (do_diff_cache(tree_oid, &opt))
208209
return 1;
209210
diffcore_std(&opt);
@@ -281,9 +282,6 @@ static void parse_args(struct pathspec *pathspec,
281282
}
282283
*rev_ret = rev;
283284

284-
if (read_cache() < 0)
285-
die(_("index file corrupt"));
286-
287285
parse_pathspec(pathspec, 0,
288286
PATHSPEC_PREFER_FULL |
289287
(patch_mode ? PATHSPEC_PREFIX_ORIGIN : 0),
@@ -440,6 +438,12 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
440438
if (intent_to_add && reset_type != MIXED)
441439
die(_("-N can only be used with --mixed"));
442440

441+
prepare_repo_settings(the_repository);
442+
the_repository->settings.command_requires_full_index = 0;
443+
444+
if (read_cache() < 0)
445+
die(_("index file corrupt"));
446+
443447
/* Soft reset does not touch the index file nor the working tree
444448
* at all, but requires them in a good order. Other resets reset
445449
* the index file to the tree object we are switching to. */

cache-tree.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,7 @@ void prime_cache_tree(struct repository *r,
811811
cache_tree_free(&istate->cache_tree);
812812
istate->cache_tree = cache_tree();
813813

814+
ensure_full_index(istate);
814815
prime_cache_tree_rec(r, istate->cache_tree, tree);
815816
istate->cache_changed |= CACHE_TREE_CHANGED;
816817
trace2_region_leave("cache-tree", "prime_cache_tree", r);

0 commit comments

Comments
 (0)