git

Форк
0
/
fsm-settings-darwin.c 
63 строки · 1.9 Кб
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
 */
27
static 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

52
enum 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
}
64

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.