Skip to content

Commit 25c2cab

Browse files
edecosta-mwgitster
authored andcommitted
fsmonitor: check for compatability before communicating with fsmonitor
If fsmonitor is not in a compatible state, warn with an appropriate message. Signed-off-by: Eric DeCosta <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 12fd27d commit 25c2cab

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

fsmonitor-settings.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "cache.h"
22
#include "config.h"
33
#include "repository.h"
4+
#include "fsmonitor-ipc.h"
45
#include "fsmonitor-settings.h"
56
#include "fsmonitor-path-utils.h"
67

@@ -242,10 +243,11 @@ enum fsmonitor_reason fsm_settings__get_reason(struct repository *r)
242243
return r->settings.fsmonitor->reason;
243244
}
244245

245-
char *fsm_settings__get_incompatible_msg(const struct repository *r,
246+
char *fsm_settings__get_incompatible_msg(struct repository *r,
246247
enum fsmonitor_reason reason)
247248
{
248249
struct strbuf msg = STRBUF_INIT;
250+
const char *socket_dir;
249251

250252
switch (reason) {
251253
case FSMONITOR_REASON_UNTESTED:
@@ -281,9 +283,11 @@ char *fsm_settings__get_incompatible_msg(const struct repository *r,
281283
goto done;
282284

283285
case FSMONITOR_REASON_NOSOCKETS:
286+
socket_dir = dirname((char *)fsmonitor_ipc__get_path(r));
284287
strbuf_addf(&msg,
285-
_("repository '%s' is incompatible with fsmonitor due to lack of Unix sockets"),
286-
r->worktree);
288+
_("socket directory '%s' is incompatible with fsmonitor due"
289+
" to lack of Unix sockets support"),
290+
socket_dir);
287291
goto done;
288292
}
289293

fsmonitor-settings.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ enum fsmonitor_mode fsm_settings__get_mode(struct repository *r);
3333
const char *fsm_settings__get_hook_path(struct repository *r);
3434

3535
enum fsmonitor_reason fsm_settings__get_reason(struct repository *r);
36-
char *fsm_settings__get_incompatible_msg(const struct repository *r,
36+
char *fsm_settings__get_incompatible_msg(struct repository *r,
3737
enum fsmonitor_reason reason);
3838

3939
struct fsmonitor_settings;

fsmonitor.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ static int fsmonitor_force_update_threshold = 100;
295295

296296
void refresh_fsmonitor(struct index_state *istate)
297297
{
298+
static int warn_once = 0;
298299
struct strbuf query_result = STRBUF_INIT;
299300
int query_success = 0, hook_version = -1;
300301
size_t bol = 0; /* beginning of line */
@@ -305,6 +306,12 @@ void refresh_fsmonitor(struct index_state *istate)
305306
int is_trivial = 0;
306307
struct repository *r = istate->repo ? istate->repo : the_repository;
307308
enum fsmonitor_mode fsm_mode = fsm_settings__get_mode(r);
309+
enum fsmonitor_reason reason = fsm_settings__get_reason(r);
310+
311+
if (!warn_once && reason > FSMONITOR_REASON_OK) {
312+
warn_once = 1;
313+
warning("%s", fsm_settings__get_incompatible_msg(r, reason));
314+
}
308315

309316
if (fsm_mode <= FSMONITOR_MODE_DISABLED ||
310317
istate->fsmonitor_has_run_once)

0 commit comments

Comments
 (0)