@@ -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;
@@ -194,6 +194,11 @@ int fsm_settings__error_if_incompatible(struct repository *r)
error(_("virtual repository '%s' is incompatible with fsmonitor"),
r->worktree);
return 1;
+
+ case FSMONITOR_REASON_NOSOCKETS:
+ error(_("repository '%s' is incompatible with fsmonitor due to lack of Unix sockets"),
+ r->worktree);
+ return 1;
}
BUG("Unhandled case in fsm_settings__error_if_incompatible: '%d'",
@@ -19,6 +19,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);