Re: [PATCH 07/23] fsmonitor-settings: virtual repos are incompatible with FSMonitor

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





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 <jeffhost@xxxxxxxxxxxxx>

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





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux