Skip to content

Commit

Permalink
virtualfilesystem: don't run the virtual file system hook if the inde…
Browse files Browse the repository at this point in the history
…x 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 <johannes.schindelin@gmx.de>
Signed-off-by: Ben Peart <Ben.Peart@microsoft.com>
  • Loading branch information
benpeart authored and dscho committed Aug 11, 2023
1 parent 0ef5064 commit 580654b
Showing 1 changed file with 18 additions and 4 deletions.
22 changes: 18 additions & 4 deletions config.c
Original file line number Diff line number Diff line change
Expand Up @@ -2936,11 +2936,25 @@ int git_config_get_virtualfilesystem(void)
if (core_virtualfilesystem && !*core_virtualfilesystem)
core_virtualfilesystem = NULL;

/* virtual file system relies on the sparse checkout logic so force it on */
if (core_virtualfilesystem) {
core_apply_sparse_checkout = 1;
virtual_filesystem_result = 1;
return 1;
/*
* 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.
*/
char *default_index_file = xstrfmt("%s/%s", the_repository->gitdir, "index");
int should_run_hook = !strcmp(default_index_file, the_repository->index_file);

free(default_index_file);
if (should_run_hook) {
/* virtual file system relies on the sparse checkout logic so force it on */
core_apply_sparse_checkout = 1;
virtual_filesystem_result = 1;
return 1;
}
core_virtualfilesystem = NULL;
}

virtual_filesystem_result = 0;
Expand Down

0 comments on commit 580654b

Please sign in to comment.