Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Hostetler <jeffhost@microsoft.com>2022-05-27 00:47:04 +0300
committerJunio C Hamano <gitster@pobox.com>2022-05-27 01:59:26 +0300
commitddc5dacfb368d4903f5dd475897e5e11772f9970 (patch)
tree8a7437f1eff1f39875d0dcc022c722c1c6c97126
parentd989b266c1a7ef47f27cec75e90f3dfefbfa0200 (diff)
fsmonitor-settings: NTFS and FAT32 on MacOS are incompatible
On MacOS mark repos on NTFS or FAT32 volumes as incompatible. The builtin FSMonitor used Unix domain sockets on MacOS for IPC with clients. These sockets are kept in the .git directory. Unix sockets are not supported by NTFS and FAT32, so the daemon cannot start up. Test for this during our compatibility checking so that client commands do not keep trying to start the daemon. Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--compat/fsmonitor/fsm-settings-darwin.c20
-rw-r--r--fsmonitor-settings.c6
-rw-r--r--fsmonitor-settings.h1
3 files changed, 24 insertions, 3 deletions
diff --git a/compat/fsmonitor/fsm-settings-darwin.c b/compat/fsmonitor/fsm-settings-darwin.c
index fdd762bf79..efc732c0f3 100644
--- a/compat/fsmonitor/fsm-settings-darwin.c
+++ b/compat/fsmonitor/fsm-settings-darwin.c
@@ -7,7 +7,7 @@
#include <sys/mount.h>
/*
- * Remote working directories are problematic for FSMonitor.
+ * [1] Remote working directories are problematic for FSMonitor.
*
* The underlying file system on the server machine and/or the remote
* mount type (NFS, SAMBA, etc.) dictates whether notification events
@@ -40,8 +40,16 @@
*
* So (for now at least), mark remote working directories as
* incompatible.
+ *
+ *
+ * [2] FAT32 and NTFS working directories are problematic too.
+ *
+ * The builtin FSMonitor uses a Unix domain socket in the .git
+ * directory for IPC. These Windows drive formats do not support
+ * Unix domain sockets, so mark them as incompatible for the daemon.
+ *
*/
-static enum fsmonitor_reason check_remote(struct repository *r)
+static enum fsmonitor_reason check_volume(struct repository *r)
{
struct statfs fs;
@@ -60,6 +68,12 @@ static enum fsmonitor_reason check_remote(struct repository *r)
if (!(fs.f_flags & MNT_LOCAL))
return FSMONITOR_REASON_REMOTE;
+ if (!strcmp(fs.f_fstypename, "msdos")) /* aka FAT32 */
+ return FSMONITOR_REASON_NOSOCKETS;
+
+ if (!strcmp(fs.f_fstypename, "ntfs"))
+ return FSMONITOR_REASON_NOSOCKETS;
+
return FSMONITOR_REASON_OK;
}
@@ -67,7 +81,7 @@ enum fsmonitor_reason fsm_os__incompatible(struct repository *r)
{
enum fsmonitor_reason reason;
- reason = check_remote(r);
+ reason = check_volume(r);
if (reason != FSMONITOR_REASON_OK)
return reason;
diff --git a/fsmonitor-settings.c b/fsmonitor-settings.c
index d2fb0141f8..658cb79da0 100644
--- a/fsmonitor-settings.c
+++ b/fsmonitor-settings.c
@@ -225,6 +225,12 @@ char *fsm_settings__get_incompatible_msg(const struct repository *r,
_("virtual repository '%s' is incompatible with fsmonitor"),
r->worktree);
goto done;
+
+ case FSMONITOR_REASON_NOSOCKETS:
+ strbuf_addf(&msg,
+ _("repository '%s' is incompatible with fsmonitor due to lack of Unix sockets"),
+ r->worktree);
+ goto done;
}
BUG("Unhandled case in fsm_settings__get_incompatible_msg: '%d'",
diff --git a/fsmonitor-settings.h b/fsmonitor-settings.h
index afd1b3874a..d9c2605197 100644
--- a/fsmonitor-settings.h
+++ b/fsmonitor-settings.h
@@ -20,6 +20,7 @@ enum fsmonitor_reason {
FSMONITOR_REASON_ERROR, /* FS error probing for compatibility */
FSMONITOR_REASON_REMOTE,
FSMONITOR_REASON_VFS4GIT, /* VFS for Git virtualization */
+ FSMONITOR_REASON_NOSOCKETS, /* NTFS,FAT32 do not support Unix sockets */
};
void fsm_settings__set_ipc(struct repository *r);