From: Jeff Hostetler Date: Tue, 01 Mar 2022 21:01:48 GMT Subject: Re: [PATCH 07/23] fsmonitor-settings: virtual repos are incompatible with FSMonitor Message-ID: <49d981a6-be6e-c995-160f-593d3ef3cf27@jeffhostetler.com> In-Reply-To: <05747ff2-f839-5408-e25b-698b147ef158@github.com> On 2/24/22 10:11 AM, Derrick Stolee wrote: > On 2/15/2022 10:59 AM, Jeff Hostetler via GitGitGadget wrote: >> From: Jeff Hostetler >> >> Virtual repos, such as GVFS (aka VFS for Git), are incompatible >> with FSMonitor. > > I would swap all of your "GVFS (aka VFS for Git)" for just > "VFS for Git". > >> +/* >> + * GVFS (aka VFS for Git) is incompatible with FSMonitor. >> + * >> + * Granted, core Git does not know anything about GVFS and we >> + * shouldn't make assumptions about a downstream feature, but users >> + * can install both versions. And this can lead to incorrect results >> + * from core Git commands. So, without bringing in any of the GVFS >> + * code, do a simple config test for a published config setting. (We >> + * do not look at the various *_TEST_* environment variables.) >> + */ >> +static enum fsmonitor_reason is_virtual(struct repository *r) >> +{ >> + const char *const_str; >> + >> + if (!repo_config_get_value(r, "core.virtualfilesystem", &const_str)) >> + return FSMONITOR_REASON_VIRTUAL; >> + >> + return FSMONITOR_REASON_ZERO; >> +} > > This reason seems to be specific to a config setting that only > exists in the microsoft/git fork. Perhaps this patch should remain > there. > > However, there is also the discussion of vfsd going on, so something > similar might be necessary for that system. Junio also mentioned > wanting to collaborate on a common indicator that virtualization was > being used, so maybe we _should_ make core.virtualFilesystem a config > setting in the core Git project. > > The reason for the incompatibility here is that VFS for Git has its > own filesystem watcher and Git gets updates from it via custom code > that is a precursor to this FS Monitor feature. I don't know if vfsd > has plans for a similar setup. (It would probably be best to fit > into the FS Monitor client/server model and use a different daemon > for those virtualized repos, but I don't know enough details to be > sure.) > > CC'ing Jonathan Nieder for thoughts on this. I was wondering whether this should be upstream or just in our downstream forks, but I thought it better to include it so that we don't try to monitor a virtualized repo and not mislead the user. It may be that we can correctly watch the repo and generate correct results, but without knowing any details of what the virtualization is doing behind the scenes, we would be making some unsafe assumptions. And since Windows users often have multiple versions of Git installed (their CL tools and whatever their IDE installed), promoting this check to upstream felt important. WRT the ongoing "vfsd" effort, I'm not sure what that looks like yet and/or whether repos managed by "vfsd" have similar concerns. I'll rename the variables in my patch here to be "vfs4git" rather the generic "virtual". This will avoid confusion later if another case needs to be added for "vfsd". My code is Win32-specific and it is unclear it theirs will be Linux-only or cross-platform, so hopefully with the rename we can coexist sanely. Jeff