]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fsmonitor: check for compatability before communicating with fsmonitor
authorEric DeCosta <edecosta@mathworks.com>
Tue, 4 Oct 2022 17:32:30 +0000 (17:32 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 5 Oct 2022 18:05:23 +0000 (11:05 -0700)
If fsmonitor is not in a compatible state, warn with an appropriate message.

Signed-off-by: Eric DeCosta <edecosta@mathworks.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
fsmonitor-settings.c
fsmonitor-settings.h
fsmonitor.c

index 531a1b6f956fd9d7d15d1acfa386ad238e7848fd..ee63a97dc51081c5b600cf14c2c2279334c1faa9 100644 (file)
@@ -1,6 +1,7 @@
 #include "cache.h"
 #include "config.h"
 #include "repository.h"
+#include "fsmonitor-ipc.h"
 #include "fsmonitor-settings.h"
 #include "fsmonitor-path-utils.h"
 
@@ -242,10 +243,11 @@ enum fsmonitor_reason fsm_settings__get_reason(struct repository *r)
        return r->settings.fsmonitor->reason;
 }
 
-char *fsm_settings__get_incompatible_msg(const struct repository *r,
+char *fsm_settings__get_incompatible_msg(struct repository *r,
                                         enum fsmonitor_reason reason)
 {
        struct strbuf msg = STRBUF_INIT;
+       const char *socket_dir;
 
        switch (reason) {
        case FSMONITOR_REASON_UNTESTED:
@@ -281,9 +283,11 @@ char *fsm_settings__get_incompatible_msg(const struct repository *r,
                goto done;
 
        case FSMONITOR_REASON_NOSOCKETS:
+               socket_dir = dirname((char *)fsmonitor_ipc__get_path(r));
                strbuf_addf(&msg,
-                           _("repository '%s' is incompatible with fsmonitor due to lack of Unix sockets"),
-                           r->worktree);
+                           _("socket directory '%s' is incompatible with fsmonitor due"
+                             " to lack of Unix sockets support"),
+                           socket_dir);
                goto done;
        }
 
index 0721617b95a256030426ac9b9dc6eff6ee01c75d..ab02e3995ee8f4eb3739359ea4b31f2a9bf697c9 100644 (file)
@@ -33,7 +33,7 @@ enum fsmonitor_mode fsm_settings__get_mode(struct repository *r);
 const char *fsm_settings__get_hook_path(struct repository *r);
 
 enum fsmonitor_reason fsm_settings__get_reason(struct repository *r);
-char *fsm_settings__get_incompatible_msg(const struct repository *r,
+char *fsm_settings__get_incompatible_msg(struct repository *r,
                                         enum fsmonitor_reason reason);
 
 struct fsmonitor_settings;
index 57d6a483beede8e3b254634cdb944b19445875d1..540736b39fd105f103c1a94057d48021ea4ecd4a 100644 (file)
@@ -295,6 +295,7 @@ static int fsmonitor_force_update_threshold = 100;
 
 void refresh_fsmonitor(struct index_state *istate)
 {
+       static int warn_once = 0;
        struct strbuf query_result = STRBUF_INIT;
        int query_success = 0, hook_version = -1;
        size_t bol = 0; /* beginning of line */
@@ -305,6 +306,12 @@ void refresh_fsmonitor(struct index_state *istate)
        int is_trivial = 0;
        struct repository *r = istate->repo ? istate->repo : the_repository;
        enum fsmonitor_mode fsm_mode = fsm_settings__get_mode(r);
+       enum fsmonitor_reason reason = fsm_settings__get_reason(r);
+
+       if (!warn_once && reason > FSMONITOR_REASON_OK) {
+               warn_once = 1;
+               warning("%s", fsm_settings__get_incompatible_msg(r, reason));
+       }
 
        if (fsm_mode <= FSMONITOR_MODE_DISABLED ||
            istate->fsmonitor_has_run_once)