зеркало из https://github.com/microsoft/git.git
fsmonitor-settings: stub in Win32-specific incompatibility checking
Extend generic incompatibility checkout with platform-specific mechanism. Stub in Win32 version. In the existing fsmonitor-settings code we have a way to mark types of repos as incompatible with fsmonitor (whether via the hook and IPC APIs). For example, we do this for bare repos, since there are no files to watch. Extend this exclusion mechanism for platform-specific reasons. This commit just creates the framework and adds a stub for Win32. Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
62a62a2830
Коммит
d33c804dae
13
Makefile
13
Makefile
|
@ -475,6 +475,11 @@ all::
|
|||
# `compat/fsmonitor/fsm-listen-<name>.c` that implements the
|
||||
# `fsm_listen__*()` routines.
|
||||
#
|
||||
# If your platform has OS-specific ways to tell if a repo is incompatible with
|
||||
# fsmonitor (whether the hook or IPC daemon version), set FSMONITOR_OS_SETTINGS
|
||||
# to the "<name>" of the corresponding `compat/fsmonitor/fsm-settings-<name>.c`
|
||||
# that implements the `fsm_os_settings__*()` routines.
|
||||
#
|
||||
# Define DEVELOPER to enable more compiler warnings. Compiler version
|
||||
# and family are auto detected, but could be overridden by defining
|
||||
# COMPILER_FEATURES (see config.mak.dev). You can still set
|
||||
|
@ -1979,6 +1984,11 @@ ifdef FSMONITOR_DAEMON_BACKEND
|
|||
COMPAT_OBJS += compat/fsmonitor/fsm-listen-$(FSMONITOR_DAEMON_BACKEND).o
|
||||
endif
|
||||
|
||||
ifdef FSMONITOR_OS_SETTINGS
|
||||
COMPAT_CFLAGS += -DHAVE_FSMONITOR_OS_SETTINGS
|
||||
COMPAT_OBJS += compat/fsmonitor/fsm-settings-$(FSMONITOR_OS_SETTINGS).o
|
||||
endif
|
||||
|
||||
ifeq ($(TCLTK_PATH),)
|
||||
NO_TCLTK = NoThanks
|
||||
endif
|
||||
|
@ -2901,6 +2911,9 @@ GIT-BUILD-OPTIONS: FORCE
|
|||
ifdef FSMONITOR_DAEMON_BACKEND
|
||||
@echo FSMONITOR_DAEMON_BACKEND=\''$(subst ','\'',$(subst ','\'',$(FSMONITOR_DAEMON_BACKEND)))'\' >>$@+
|
||||
endif
|
||||
ifdef FSMONITOR_OS_SETTINGS
|
||||
@echo FSMONITOR_OS_SETTINGS=\''$(subst ','\'',$(subst ','\'',$(FSMONITOR_OS_SETTINGS)))'\' >>$@+
|
||||
endif
|
||||
ifdef TEST_OUTPUT_DIRECTORY
|
||||
@echo TEST_OUTPUT_DIRECTORY=\''$(subst ','\'',$(subst ','\'',$(TEST_OUTPUT_DIRECTORY)))'\' >>$@+
|
||||
endif
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
#include "cache.h"
|
||||
#include "config.h"
|
||||
#include "repository.h"
|
||||
#include "fsmonitor-settings.h"
|
||||
|
||||
enum fsmonitor_reason fsm_os__incompatible(struct repository *r)
|
||||
{
|
||||
return FSMONITOR_REASON_OK;
|
||||
}
|
|
@ -450,6 +450,8 @@ ifeq ($(uname_S),Windows)
|
|||
# These are always available, so we do not have to conditionally
|
||||
# support it.
|
||||
FSMONITOR_DAEMON_BACKEND = win32
|
||||
FSMONITOR_OS_SETTINGS = win32
|
||||
|
||||
NO_SVN_TESTS = YesPlease
|
||||
RUNTIME_PREFIX = YesPlease
|
||||
HAVE_WPGMPTR = YesWeDo
|
||||
|
@ -639,6 +641,8 @@ ifeq ($(uname_S),MINGW)
|
|||
# These are always available, so we do not have to conditionally
|
||||
# support it.
|
||||
FSMONITOR_DAEMON_BACKEND = win32
|
||||
FSMONITOR_OS_SETTINGS = win32
|
||||
|
||||
RUNTIME_PREFIX = YesPlease
|
||||
HAVE_WPGMPTR = YesWeDo
|
||||
NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
|
||||
|
|
|
@ -289,6 +289,9 @@ if(SUPPORTS_SIMPLE_IPC)
|
|||
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
add_compile_definitions(HAVE_FSMONITOR_DAEMON_BACKEND)
|
||||
list(APPEND compat_SOURCES compat/fsmonitor/fsm-listen-win32.c)
|
||||
|
||||
add_compile_definitions(HAVE_FSMONITOR_OS_SETTINGS)
|
||||
list(APPEND compat_SOURCES compat/fsmonitor/fsm-settings-win32.c)
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||
add_compile_definitions(HAVE_FSMONITOR_DAEMON_BACKEND)
|
||||
list(APPEND compat_SOURCES compat/fsmonitor/fsm-listen-darwin.c)
|
||||
|
|
|
@ -23,6 +23,16 @@ static enum fsmonitor_reason check_for_incompatible(struct repository *r)
|
|||
return FSMONITOR_REASON_BARE;
|
||||
}
|
||||
|
||||
#ifdef HAVE_FSMONITOR_OS_SETTINGS
|
||||
{
|
||||
enum fsmonitor_reason reason;
|
||||
|
||||
reason = fsm_os__incompatible(r);
|
||||
if (reason != FSMONITOR_REASON_OK)
|
||||
return reason;
|
||||
}
|
||||
#endif
|
||||
|
||||
return FSMONITOR_REASON_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -34,4 +34,17 @@ char *fsm_settings__get_incompatible_msg(const struct repository *r,
|
|||
|
||||
struct fsmonitor_settings;
|
||||
|
||||
#ifdef HAVE_FSMONITOR_OS_SETTINGS
|
||||
/*
|
||||
* Ask platform-specific code whether the repository is incompatible
|
||||
* with fsmonitor (both hook and ipc modes). For example, if the working
|
||||
* directory is on a remote volume and mounted via a technology that does
|
||||
* not support notification events, then we should not pretend to watch it.
|
||||
*
|
||||
* fsm_os__* routines should considered private to fsm_settings__
|
||||
* routines.
|
||||
*/
|
||||
enum fsmonitor_reason fsm_os__incompatible(struct repository *r);
|
||||
#endif /* HAVE_FSMONITOR_OS_SETTINGS */
|
||||
|
||||
#endif /* FSMONITOR_SETTINGS_H */
|
||||
|
|
Загрузка…
Ссылка в новой задаче