Skip to content

Commit 5e0295f

Browse files
benpeartjeffhostetler
authored andcommitted
virtualfilesystem: don't run the virtual file system hook if the index has been redirected
Fixes #13 Some git commands spawn helpers and redirect the index to a different location. These include "difftool -d" and the sequencer (i.e. `git rebase -i`, `git cherry-pick` and `git revert`) and others. In those instances we don't want to update their temporary index with our virtualization data. Helped-by: Johannes Schindelin <[email protected]> Signed-off-by: Ben Peart <[email protected]>
1 parent 475e833 commit 5e0295f

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

config.c

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2557,10 +2557,24 @@ int git_config_get_virtualfilesystem(void)
25572557
if (core_virtualfilesystem && !*core_virtualfilesystem)
25582558
core_virtualfilesystem = NULL;
25592559

2560-
/* virtual file system relies on the sparse checkout logic so force it on */
25612560
if (core_virtualfilesystem) {
2562-
core_apply_sparse_checkout = 1;
2563-
return 1;
2561+
/*
2562+
* Some git commands spawn helpers and redirect the index to a different
2563+
* location. These include "difftool -d" and the sequencer
2564+
* (i.e. `git rebase -i`, `git cherry-pick` and `git revert`) and others.
2565+
* In those instances we don't want to update their temporary index with
2566+
* our virtualization data.
2567+
*/
2568+
char *default_index_file = xstrfmt("%s/%s", the_repository->gitdir, "index");
2569+
int should_run_hook = !strcmp(default_index_file, the_repository->index_file);
2570+
2571+
free(default_index_file);
2572+
if (should_run_hook) {
2573+
/* virtual file system relies on the sparse checkout logic so force it on */
2574+
core_apply_sparse_checkout = 1;
2575+
return 1;
2576+
}
2577+
core_virtualfilesystem = NULL;
25642578
}
25652579

25662580
return 0;

0 commit comments

Comments
 (0)