RE: [PATCH v12 5/6] fsmonitor: check for compatability before communicating with fsmonitor

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: Eric DeCosta via GitGitGadget <gitgitgadget@xxxxxxxxx>
> Sent: Saturday, September 24, 2022 3:46 PM
> To: git@xxxxxxxxxxxxxxx
> Cc: Jeff Hostetler <git@xxxxxxxxxxxxxxxxx>; Eric Sunshine
> <sunshine@xxxxxxxxxxxxxx>; Torsten Bögershausen <tboegi@xxxxxx>;
> Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx>; Ramsay Jones
> <ramsay@xxxxxxxxxxxxxxxxxxxx>; Johannes Schindelin
> <Johannes.Schindelin@xxxxxx>; Eric DeCosta <edecosta@xxxxxxxxxxxxx>;
> Eric DeCosta <edecosta@xxxxxxxxxxxxx>
> Subject: [PATCH v12 5/6] fsmonitor: check for compatability before
> communicating with fsmonitor
> 
> From: Eric DeCosta <edecosta@xxxxxxxxxxxxx>
> 
> If fsmonitor is not in a compatible state, die with an appropriate error
> messge.
> 
> Signed-off-by: Eric DeCosta <edecosta@xxxxxxxxxxxxx>
> ---

Grr. Should be "warn with an appropriate error message".

-Eric

>  compat/fsmonitor/fsm-settings-darwin.c |  2 +-
>  fsmonitor-settings.c                   | 10 +++++++---
>  fsmonitor-settings.h                   |  2 +-
>  fsmonitor.c                            |  7 +++++++
>  4 files changed, 16 insertions(+), 5 deletions(-)
> 
> diff --git a/compat/fsmonitor/fsm-settings-darwin.c
> b/compat/fsmonitor/fsm-settings-darwin.c
> index 40da2d3b533..44233125df8 100644
> --- a/compat/fsmonitor/fsm-settings-darwin.c
> +++ b/compat/fsmonitor/fsm-settings-darwin.c
> @@ -38,7 +38,7 @@ static enum fsmonitor_reason
> check_uds_volume(struct repository *r)
>  	strbuf_release(&path);
> 
>  	if (fs.is_remote)
> -		return FSMONITOR_REASON_REMOTE;
> +		return FSMONITOR_REASON_NOSOCKETS;
> 
>  	if (!strcmp(fs.typename, "msdos")) /* aka FAT32 */
>  		return FSMONITOR_REASON_NOSOCKETS;
> diff --git a/fsmonitor-settings.c b/fsmonitor-settings.c index
> 531a1b6f956..8592a4d9bad 100644
> --- a/fsmonitor-settings.c
> +++ b/fsmonitor-settings.c
> @@ -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;
>  	}
> 
> diff --git a/fsmonitor-settings.h b/fsmonitor-settings.h index
> 0721617b95a..ab02e3995ee 100644
> --- a/fsmonitor-settings.h
> +++ b/fsmonitor-settings.h
> @@ -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;
> diff --git a/fsmonitor.c b/fsmonitor.c
> index 57d6a483bee..540736b39fd 100644
> --- a/fsmonitor.c
> +++ b/fsmonitor.c
> @@ -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)
> --
> gitgitgadget





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux