]> git.ipfire.org Git - thirdparty/git.git/commitdiff
compat/fsmonitor/fsm-listen-win32: stub in backend for Windows
authorJeff Hostetler <jeffhost@microsoft.com>
Fri, 25 Mar 2022 18:02:51 +0000 (18:02 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 25 Mar 2022 23:04:15 +0000 (16:04 -0700)
Stub in empty filesystem listener backend for fsmonitor--daemon on Windows.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Makefile
compat/fsmonitor/fsm-listen-win32.c [new file with mode: 0644]
compat/fsmonitor/fsm-listen.h [new file with mode: 0644]
config.mak.uname
contrib/buildsystems/CMakeLists.txt
repo-settings.c

index 5af1d5b112ec4b7927b2b76ee7bab13b59ad897c..26567d4f7722b41c3d70cf9d38f4a89ecbb57d32 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -470,6 +470,11 @@ all::
 # directory, and the JSON compilation database 'compile_commands.json' will be
 # created at the root of the repository.
 #
+# If your platform supports a built-in fsmonitor backend, set
+# FSMONITOR_DAEMON_BACKEND to the "<name>" of the corresponding
+# `compat/fsmonitor/fsm-listen-<name>.c` that implements the
+# `fsm_listen__*()` 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
@@ -1968,6 +1973,11 @@ ifdef NEED_ACCESS_ROOT_HANDLER
        COMPAT_OBJS += compat/access.o
 endif
 
+ifdef FSMONITOR_DAEMON_BACKEND
+       COMPAT_CFLAGS += -DHAVE_FSMONITOR_DAEMON_BACKEND
+       COMPAT_OBJS += compat/fsmonitor/fsm-listen-$(FSMONITOR_DAEMON_BACKEND).o
+endif
+
 ifeq ($(TCLTK_PATH),)
 NO_TCLTK = NoThanks
 endif
@@ -2887,6 +2897,9 @@ GIT-BUILD-OPTIONS: FORCE
        @echo DC_SHA1=\''$(subst ','\'',$(subst ','\'',$(DC_SHA1)))'\' >>$@+
        @echo SANITIZE_LEAK=\''$(subst ','\'',$(subst ','\'',$(SANITIZE_LEAK)))'\' >>$@+
        @echo X=\'$(X)\' >>$@+
+ifdef FSMONITOR_DAEMON_BACKEND
+       @echo FSMONITOR_DAEMON_BACKEND=\''$(subst ','\'',$(subst ','\'',$(FSMONITOR_DAEMON_BACKEND)))'\' >>$@+
+endif
 ifdef TEST_OUTPUT_DIRECTORY
        @echo TEST_OUTPUT_DIRECTORY=\''$(subst ','\'',$(subst ','\'',$(TEST_OUTPUT_DIRECTORY)))'\' >>$@+
 endif
diff --git a/compat/fsmonitor/fsm-listen-win32.c b/compat/fsmonitor/fsm-listen-win32.c
new file mode 100644 (file)
index 0000000..916cbea
--- /dev/null
@@ -0,0 +1,21 @@
+#include "cache.h"
+#include "config.h"
+#include "fsmonitor.h"
+#include "fsm-listen.h"
+
+void fsm_listen__stop_async(struct fsmonitor_daemon_state *state)
+{
+}
+
+void fsm_listen__loop(struct fsmonitor_daemon_state *state)
+{
+}
+
+int fsm_listen__ctor(struct fsmonitor_daemon_state *state)
+{
+       return -1;
+}
+
+void fsm_listen__dtor(struct fsmonitor_daemon_state *state)
+{
+}
diff --git a/compat/fsmonitor/fsm-listen.h b/compat/fsmonitor/fsm-listen.h
new file mode 100644 (file)
index 0000000..f053934
--- /dev/null
@@ -0,0 +1,49 @@
+#ifndef FSM_LISTEN_H
+#define FSM_LISTEN_H
+
+/* This needs to be implemented by each backend */
+
+#ifdef HAVE_FSMONITOR_DAEMON_BACKEND
+
+struct fsmonitor_daemon_state;
+
+/*
+ * Initialize platform-specific data for the fsmonitor listener thread.
+ * This will be called from the main thread PRIOR to staring the
+ * fsmonitor_fs_listener thread.
+ *
+ * Returns 0 if successful.
+ * Returns -1 otherwise.
+ */
+int fsm_listen__ctor(struct fsmonitor_daemon_state *state);
+
+/*
+ * Cleanup platform-specific data for the fsmonitor listener thread.
+ * This will be called from the main thread AFTER joining the listener.
+ */
+void fsm_listen__dtor(struct fsmonitor_daemon_state *state);
+
+/*
+ * The main body of the platform-specific event loop to watch for
+ * filesystem events.  This will run in the fsmonitor_fs_listen thread.
+ *
+ * It should call `ipc_server_stop_async()` if the listener thread
+ * prematurely terminates (because of a filesystem error or if it
+ * detects that the .git directory has been deleted).  (It should NOT
+ * do so if the listener thread receives a normal shutdown signal from
+ * the IPC layer.)
+ *
+ * It should set `state->error_code` to -1 if the daemon should exit
+ * with an error.
+ */
+void fsm_listen__loop(struct fsmonitor_daemon_state *state);
+
+/*
+ * Gently request that the fsmonitor listener thread shutdown.
+ * It does not wait for it to stop.  The caller should do a JOIN
+ * to wait for it.
+ */
+void fsm_listen__stop_async(struct fsmonitor_daemon_state *state);
+
+#endif /* HAVE_FSMONITOR_DAEMON_BACKEND */
+#endif /* FSM_LISTEN_H */
index 4352ea39e9b9b7e2103560729202c63cb1fd90d4..26074f56bedb3d84387a43a039f95abeea98be1b 100644 (file)
@@ -435,6 +435,11 @@ ifeq ($(uname_S),Windows)
        # so we don't need this:
        #
        #   SNPRINTF_RETURNS_BOGUS = YesPlease
+
+       # The builtin FSMonitor requires Named Pipes and Threads on Windows.
+       # These are always available, so we do not have to conditionally
+       # support it.
+       FSMONITOR_DAEMON_BACKEND = win32
        NO_SVN_TESTS = YesPlease
        RUNTIME_PREFIX = YesPlease
        HAVE_WPGMPTR = YesWeDo
@@ -619,6 +624,11 @@ ifeq ($(uname_S),MINGW)
        NO_STRTOUMAX = YesPlease
        NO_MKDTEMP = YesPlease
        NO_SVN_TESTS = YesPlease
+
+       # The builtin FSMonitor requires Named Pipes and Threads on Windows.
+       # These are always available, so we do not have to conditionally
+       # support it.
+       FSMONITOR_DAEMON_BACKEND = win32
        RUNTIME_PREFIX = YesPlease
        HAVE_WPGMPTR = YesWeDo
        NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease
index e44232f85d36607b5be51ffa5b9659021ae63133..0963629db7f93476c2f7e52d6d76718427f53557 100644 (file)
@@ -285,6 +285,13 @@ else()
        endif()
 endif()
 
+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)
+       endif()
+endif()
+
 set(EXE_EXTENSION ${CMAKE_EXECUTABLE_SUFFIX})
 
 #header checks
index b4fbd16cdcc251386a1b77a6920fdbad923cc1ef..2dfcb2b6542f2cbe75d4575e8b707cf1676679a3 100644 (file)
@@ -2,6 +2,7 @@
 #include "config.h"
 #include "repository.h"
 #include "midx.h"
+#include "compat/fsmonitor/fsm-listen.h"
 
 static void repo_cfg_bool(struct repository *r, const char *key, int *dest,
                          int def)