Git fork
at reftables-rust 63 lines 1.9 kB view raw
1#include "git-compat-util.h" 2#include "config.h" 3#include "fsmonitor-ll.h" 4#include "fsmonitor-ipc.h" 5#include "fsmonitor-settings.h" 6#include "fsmonitor-path-utils.h" 7 8 /* 9 * For the builtin FSMonitor, we create the Unix domain socket for the 10 * IPC in the .git directory. If the working directory is remote, 11 * then the socket will be created on the remote file system. This 12 * can fail if the remote file system does not support UDS file types 13 * (e.g. smbfs to a Windows server) or if the remote kernel does not 14 * allow a non-local process to bind() the socket. (These problems 15 * could be fixed by moving the UDS out of the .git directory and to a 16 * well-known local directory on the client machine, but care should 17 * be taken to ensure that $HOME is actually local and not a managed 18 * file share.) 19 * 20 * FAT32 and NTFS working directories are problematic too. 21 * 22 * The builtin FSMonitor uses a Unix domain socket in the .git 23 * directory for IPC. These Windows drive formats do not support 24 * Unix domain sockets, so mark them as incompatible for the daemon. 25 * 26 */ 27static enum fsmonitor_reason check_uds_volume(struct repository *r) 28{ 29 struct fs_info fs; 30 const char *ipc_path = fsmonitor_ipc__get_path(r); 31 struct strbuf path = STRBUF_INIT; 32 strbuf_add(&path, ipc_path, strlen(ipc_path)); 33 34 if (fsmonitor__get_fs_info(dirname(path.buf), &fs) == -1) { 35 strbuf_release(&path); 36 return FSMONITOR_REASON_ERROR; 37 } 38 39 strbuf_release(&path); 40 41 if (fs.is_remote || 42 !strcmp(fs.typename, "msdos") || 43 !strcmp(fs.typename, "ntfs")) { 44 free(fs.typename); 45 return FSMONITOR_REASON_NOSOCKETS; 46 } 47 48 free(fs.typename); 49 return FSMONITOR_REASON_OK; 50} 51 52enum fsmonitor_reason fsm_os__incompatible(struct repository *r, int ipc) 53{ 54 enum fsmonitor_reason reason; 55 56 if (ipc) { 57 reason = check_uds_volume(r); 58 if (reason != FSMONITOR_REASON_OK) 59 return reason; 60 } 61 62 return FSMONITOR_REASON_OK; 63}