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 Jun 2, 2021
1 parent 6a5aae2 commit 834b340
Showing 1 changed file with 17 additions and 3 deletions.
20 changes: 17 additions & 3 deletions config.c
Original file line number Diff line number Diff line change
Expand Up @@ -2565,10 +2565,24 @@ 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;
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;
return 1;
}
core_virtualfilesystem = NULL;
}

return 0;
Expand Down

0 comments on commit 834b340

Please sign in to comment.