git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Jeff Hostetler via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: "Jeff Hostetler" <git@jeffhostetler.com>,
	"Derrick Stolee" <derrickstolee@github.com>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
	Torsten =?unknown-8bit?Q?B=C3=B6gershausen?= <tboegi@web.de>,
	rsbecker@nexbridge.com, "Bagas Sanjaya" <bagasdotme@gmail.com>,
	"Jeff Hostetler" <jeffhost@microsoft.com>
Subject: [PATCH v6 00/28] Builtin FSMonitor Part 3
Date: Fri, 22 Apr 2022 21:29:26 +0000	[thread overview]
Message-ID: <pull.1143.v6.git.1650662994.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1143.v5.git.1650487398.gitgitgadget@gmail.com>

Here is version 6 of part 3 of FSMonitor.

This version addresses:

 1. Junio's comments on V5 23/28 WRT shell variable references and quoting
    pathnames in the create_super and create_sub helper functions.

 2. Ævar's comments on V4 4/27 (sorry I didn't see them until after I sent
    V5) WRT somewhat blurry logic around the fsmonitor-settings and
    detecting incompatible worktrees. I simplified things, but not to the
    level that Ævar was suggesting. For example, in builtin/update-index.c
    the suggestion was to detect incompatible FS before taking the lock on
    the index, but the lock is taken before the CL args are parsed (because
    update-index uses a custom version of parse_options_start()), so we
    don't know yet whether the user passed --fsmonitor until much later and
    that is what triggers the error/warning. I did replace the return 1 with
    a die() so hopefully, we'll release the lock on the index like all of
    the other errors in that function. I did try to better document the code
    in update-index.c and in builtin/fsmonitor--daemon.c to explain how
    things are supposed to work. So hopefully it'll be easier to review.

 3. Also, in update-index and fsmonitor--daemon, I redid how the error
    messages are printed, so that I could use die() in the cmd_*() functions
    rather than having calls to error() hidden inside fsmonitor-settings.c.
    I think that helped with the above cleanup.

Here is a range diff from V5. It is a little noisy because of the untangling
within fsmonitor-settings.c and moving the error messages.

 1:  8b7c5f4e23 =  1:  8b7c5f4e23 fsm-listen-win32: handle shortnames
 2:  5b246bec24 =  2:  5b246bec24 t7527: test FSMonitor on repos with Unicode root paths
 3:  8a474d6999 =  3:  8a474d6999 t/helper/fsmonitor-client: create stress test
 4:  004b67b62e <  -:  ---------- fsmonitor-settings: bare repos are incompatible with FSMonitor
 -:  ---------- >  4:  72b94acd5f fsmonitor-settings: bare repos are incompatible with FSMonitor
 5:  e1e55550c1 !  5:  2e225c3f4f fsmonitor-settings: stub in Win32-specific incompatibility checking
    @@ contrib/buildsystems/CMakeLists.txt: if(SUPPORTS_SIMPLE_IPC)
              list(APPEND compat_SOURCES compat/fsmonitor/fsm-listen-darwin.c)
     
      ## fsmonitor-settings.c ##
    -@@ fsmonitor-settings.c: static int check_for_incompatible(struct repository *r)
    - 		return 1;
    +@@ fsmonitor-settings.c: static enum fsmonitor_reason check_for_incompatible(struct repository *r)
    + 		return FSMONITOR_REASON_BARE;
          }
      
     +#ifdef HAVE_FSMONITOR_OS_SETTINGS
    @@ fsmonitor-settings.c: static int check_for_incompatible(struct repository *r)
     +		enum fsmonitor_reason reason;
     +
     +		reason = fsm_os__incompatible(r);
    -+		if (reason != FSMONITOR_REASON_OK) {
    -+			set_incompatible(r, reason);
    -+			return 1;
    -+		}
    ++		if (reason != FSMONITOR_REASON_OK)
    ++			return reason;
     +	}
     +#endif
     +
    - 	return 0;
    + 	return FSMONITOR_REASON_OK;
      }
      
     
      ## fsmonitor-settings.h ##
    -@@ fsmonitor-settings.h: int fsm_settings__error_if_incompatible(struct repository *r);
    +@@ fsmonitor-settings.h: char *fsm_settings__get_incompatible_msg(const struct repository *r,
      
      struct fsmonitor_settings;
      
 6:  2d68fc9a46 !  6:  e0d3bdf755 fsmonitor-settings: VFS for Git virtual repos are incompatible
    @@ compat/fsmonitor/fsm-settings-win32.c
      }
     
      ## fsmonitor-settings.c ##
    -@@ fsmonitor-settings.c: int fsm_settings__error_if_incompatible(struct repository *r)
    - 		error(_("bare repository '%s' is incompatible with fsmonitor"),
    - 		      xgetcwd());
    - 		return 1;
    +@@ fsmonitor-settings.c: char *fsm_settings__get_incompatible_msg(const struct repository *r,
    + 			    _("bare repository '%s' is incompatible with fsmonitor"),
    + 			    xgetcwd());
    + 		goto done;
     +
     +	case FSMONITOR_REASON_VFS4GIT:
    -+		error(_("virtual repository '%s' is incompatible with fsmonitor"),
    -+		      r->worktree);
    -+		return 1;
    ++		strbuf_addf(&msg,
    ++			    _("virtual repository '%s' is incompatible with fsmonitor"),
    ++			    r->worktree);
    ++		goto done;
          }
      
    - 	BUG("Unhandled case in fsm_settings__error_if_incompatible: '%d'",
    + 	BUG("Unhandled case in fsm_settings__get_incompatible_msg: '%d'",
     
      ## fsmonitor-settings.h ##
    -@@ fsmonitor-settings.h: enum fsmonitor_mode {
    - enum fsmonitor_reason {
    - 	FSMONITOR_REASON_OK = 0, /* no incompatibility or when disbled */
    +@@ fsmonitor-settings.h: enum fsmonitor_reason {
    + 	FSMONITOR_REASON_UNTESTED = 0,
    + 	FSMONITOR_REASON_OK, /* no incompatibility or when disbled */
          FSMONITOR_REASON_BARE,
     +	FSMONITOR_REASON_VFS4GIT, /* VFS for Git virtualization */
      };
 7:  94ae2e424f =  7:  c50ed29a31 fsmonitor-settings: stub in macOS-specific incompatibility checking
 8:  b2ca6c1b20 !  8:  1f5b772d42 fsmonitor-settings: remote repos on macOS are incompatible
    @@ compat/fsmonitor/fsm-settings-darwin.c
      }
     
      ## fsmonitor-settings.c ##
    -@@ fsmonitor-settings.c: int fsm_settings__error_if_incompatible(struct repository *r)
    - 		      xgetcwd());
    - 		return 1;
    +@@ fsmonitor-settings.c: char *fsm_settings__get_incompatible_msg(const struct repository *r,
    + 			    xgetcwd());
    + 		goto done;
      
     +	case FSMONITOR_REASON_ERROR:
    -+		error(_("repository '%s' is incompatible with fsmonitor due to errors"),
    -+		      r->worktree);
    -+		return 1;
    ++		strbuf_addf(&msg,
    ++			    _("repository '%s' is incompatible with fsmonitor due to errors"),
    ++			    r->worktree);
    ++		goto done;
     +
     +	case FSMONITOR_REASON_REMOTE:
    -+		error(_("remote repository '%s' is incompatible with fsmonitor"),
    -+		      r->worktree);
    -+		return 1;
    ++		strbuf_addf(&msg,
    ++			    _("remote repository '%s' is incompatible with fsmonitor"),
    ++			    r->worktree);
    ++		goto done;
     +
          case FSMONITOR_REASON_VFS4GIT:
    - 		error(_("virtual repository '%s' is incompatible with fsmonitor"),
    - 		      r->worktree);
    + 		strbuf_addf(&msg,
    + 			    _("virtual repository '%s' is incompatible with fsmonitor"),
     
      ## fsmonitor-settings.h ##
    -@@ fsmonitor-settings.h: enum fsmonitor_mode {
    - enum fsmonitor_reason {
    - 	FSMONITOR_REASON_OK = 0, /* no incompatibility or when disbled */
    +@@ fsmonitor-settings.h: enum fsmonitor_reason {
    + 	FSMONITOR_REASON_UNTESTED = 0,
    + 	FSMONITOR_REASON_OK, /* no incompatibility or when disbled */
          FSMONITOR_REASON_BARE,
     +	FSMONITOR_REASON_ERROR, /* FS error probing for compatibility */
     +	FSMONITOR_REASON_REMOTE,
 9:  a3cc4b3b16 =  9:  495e54049b fsmonitor-settings: remote repos on Windows are incompatible
10:  8f1f484075 ! 10:  4b52083698 fsmonitor-settings: NTFS and FAT32 on MacOS are incompatible
    @@ compat/fsmonitor/fsm-settings-darwin.c: enum fsmonitor_reason fsm_os__incompatib
      
     
      ## fsmonitor-settings.c ##
    -@@ fsmonitor-settings.c: int fsm_settings__error_if_incompatible(struct repository *r)
    - 		error(_("virtual repository '%s' is incompatible with fsmonitor"),
    - 		      r->worktree);
    - 		return 1;
    +@@ fsmonitor-settings.c: char *fsm_settings__get_incompatible_msg(const struct repository *r,
    + 			    _("virtual repository '%s' is incompatible with fsmonitor"),
    + 			    r->worktree);
    + 		goto done;
     +
     +	case FSMONITOR_REASON_NOSOCKETS:
    -+		error(_("repository '%s' is incompatible with fsmonitor due to lack of Unix sockets"),
    -+		      r->worktree);
    -+		return 1;
    ++		strbuf_addf(&msg,
    ++			    _("repository '%s' is incompatible with fsmonitor due to lack of Unix sockets"),
    ++			    r->worktree);
    ++		goto done;
          }
      
    - 	BUG("Unhandled case in fsm_settings__error_if_incompatible: '%d'",
    + 	BUG("Unhandled case in fsm_settings__get_incompatible_msg: '%d'",
     
      ## fsmonitor-settings.h ##
     @@ fsmonitor-settings.h: enum fsmonitor_reason {
11:  8d48d9c562 = 11:  d4a4263d37 unpack-trees: initialize fsmonitor_has_run_once in o->result
12:  088c7b3334 = 12:  f4feb00ec2 fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS
13:  00fab62666 = 13:  dbb983fd9d fsmonitor--daemon: cd out of worktree root
14:  6552f51802 = 14:  ae90b99ea9 fsmonitor--daemon: prepare for adding health thread
15:  f2bf07cd73 = 15:  b6c5800095 fsmonitor--daemon: rename listener thread related variables
16:  2a44f2eded = 16:  32fc6ba743 fsmonitor--daemon: stub in health thread
17:  854fb5e365 = 17:  77bc037481 fsm-health-win32: add polling framework to monitor daemon health
18:  3af1fe0d61 = 18:  b06edd995e fsm-health-win32: force shutdown daemon if worktree root moves
19:  f1365cdd40 = 19:  1bd5f34624 fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed
20:  15698d64ed = 20:  48af0813de fsmonitor: optimize processing of directory events
21:  9d0da8fc22 = 21:  a9b35e770f t7527: FSMonitor tests for directory moves
22:  040c00cfd6 = 22:  26308936af t/perf/p7527: add perf test for builtin FSMonitor
23:  5db241f7d2 ! 23:  d0e25f6bac fsmonitor: never set CE_FSMONITOR_VALID on submodules
    @@ t/t7527-builtin-fsmonitor.sh: do
     +# submodule.
     +
     +create_super () {
    -+	super=$1 &&
    -+
    -+	git init "${super}" &&
    -+	echo x >${super}/file_1 &&
    -+	echo y >${super}/file_2 &&
    -+	echo z >${super}/file_3 &&
    -+	mkdir ${super}/dir_1 &&
    -+	echo a >${super}/dir_1/file_11 &&
    -+	echo b >${super}/dir_1/file_12 &&
    -+	mkdir ${super}/dir_1/dir_2 &&
    -+	echo a >${super}/dir_1/dir_2/file_21 &&
    -+	echo b >${super}/dir_1/dir_2/file_22 &&
    -+	git -C ${super} add . &&
    -+	git -C ${super} commit -m "initial ${super} commit"
    ++	super="$1" &&
    ++
    ++	git init "$super" &&
    ++	echo x >"$super/file_1" &&
    ++	echo y >"$super/file_2" &&
    ++	echo z >"$super/file_3" &&
    ++	mkdir "$super/dir_1" &&
    ++	echo a >"$super/dir_1/file_11" &&
    ++	echo b >"$super/dir_1/file_12" &&
    ++	mkdir "$super/dir_1/dir_2" &&
    ++	echo a >"$super/dir_1/dir_2/file_21" &&
    ++	echo b >"$super/dir_1/dir_2/file_22" &&
    ++	git -C "$super" add . &&
    ++	git -C "$super" commit -m "initial $super commit"
     +}
     +
     +create_sub () {
    -+	sub=$1 &&
    -+
    -+	git init "${sub}" &&
    -+	echo x >${sub}/file_x &&
    -+	echo y >${sub}/file_y &&
    -+	echo z >${sub}/file_z &&
    -+	mkdir ${sub}/dir_x &&
    -+	echo a >${sub}/dir_x/file_a &&
    -+	echo b >${sub}/dir_x/file_b &&
    -+	mkdir ${sub}/dir_x/dir_y &&
    -+	echo a >${sub}/dir_x/dir_y/file_a &&
    -+	echo b >${sub}/dir_x/dir_y/file_b &&
    -+	git -C ${sub} add . &&
    -+	git -C ${sub} commit -m "initial ${sub} commit"
    ++	sub="$1" &&
    ++
    ++	git init "$sub" &&
    ++	echo x >"$sub/file_x" &&
    ++	echo y >"$sub/file_y" &&
    ++	echo z >"$sub/file_z" &&
    ++	mkdir "$sub/dir_x" &&
    ++	echo a >"$sub/dir_x/file_a" &&
    ++	echo b >"$sub/dir_x/file_b" &&
    ++	mkdir "$sub/dir_x/dir_y" &&
    ++	echo a >"$sub/dir_x/dir_y/file_a" &&
    ++	echo b >"$sub/dir_x/dir_y/file_b" &&
    ++	git -C "$sub" add . &&
    ++	git -C "$sub" commit -m "initial $sub commit"
     +}
     +
     +my_match_and_clean () {
    @@ t/t7527-builtin-fsmonitor.sh: do
     +			    rm -rf super; \
     +			    rm -rf sub" &&
     +
    -+	create_super "super" &&
    -+	create_sub "sub" &&
    ++	create_super super &&
    ++	create_sub sub &&
     +
     +	git -C super submodule add ../sub ./dir_1/dir_2/sub &&
     +	git -C super commit -m "add sub" &&
24:  93de3707d2 = 24:  410dd2d292 t7527: test FSMonitor on case insensitive+preserving file system
25:  d890c2e2d9 = 25:  cd7c55b0d3 fsmonitor: on macOS also emit NFC spelling for NFD pathname
26:  7c60623555 = 26:  8278f32c4d t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd
27:  9724c41d18 = 27:  4efb3a4383 t7527: test Unicode NFC/NFD handling on MacOS
28:  b8325fb7c7 ! 28:  df1b4f3a80 fsmonitor--daemon: allow --super-prefix argument
    @@ t/t7527-builtin-fsmonitor.sh: test_expect_success "Submodule always visited" '
     +			    rm -rf sub;   \
     +			    rm super-sub.trace" &&
     +
    -+	create_super "super" &&
    -+	create_sub "sub" &&
    ++	create_super super &&
    ++	create_sub sub &&
     +
     +	# Copy rather than submodule add so that we get a .git dir.
     +	cp -R ./sub ./super/dir_1/dir_2/sub &&


Jeff Hostetler (28):
  fsm-listen-win32: handle shortnames
  t7527: test FSMonitor on repos with Unicode root paths
  t/helper/fsmonitor-client: create stress test
  fsmonitor-settings: bare repos are incompatible with FSMonitor
  fsmonitor-settings: stub in Win32-specific incompatibility checking
  fsmonitor-settings: VFS for Git virtual repos are incompatible
  fsmonitor-settings: stub in macOS-specific incompatibility checking
  fsmonitor-settings: remote repos on macOS are incompatible
  fsmonitor-settings: remote repos on Windows are incompatible
  fsmonitor-settings: NTFS and FAT32 on MacOS are incompatible
  unpack-trees: initialize fsmonitor_has_run_once in o->result
  fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS
  fsmonitor--daemon: cd out of worktree root
  fsmonitor--daemon: prepare for adding health thread
  fsmonitor--daemon: rename listener thread related variables
  fsmonitor--daemon: stub in health thread
  fsm-health-win32: add polling framework to monitor daemon health
  fsm-health-win32: force shutdown daemon if worktree root moves
  fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed
  fsmonitor: optimize processing of directory events
  t7527: FSMonitor tests for directory moves
  t/perf/p7527: add perf test for builtin FSMonitor
  fsmonitor: never set CE_FSMONITOR_VALID on submodules
  t7527: test FSMonitor on case insensitive+preserving file system
  fsmonitor: on macOS also emit NFC spelling for NFD pathname
  t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd
  t7527: test Unicode NFC/NFD handling on MacOS
  fsmonitor--daemon: allow --super-prefix argument

 Makefile                               |  19 +-
 builtin/fsmonitor--daemon.c            | 116 ++++++-
 builtin/update-index.c                 |  16 +
 compat/fsmonitor/fsm-health-darwin.c   |  24 ++
 compat/fsmonitor/fsm-health-win32.c    | 278 +++++++++++++++++
 compat/fsmonitor/fsm-health.h          |  47 +++
 compat/fsmonitor/fsm-listen-darwin.c   | 122 ++++++--
 compat/fsmonitor/fsm-listen-win32.c    | 413 ++++++++++++++++++++-----
 compat/fsmonitor/fsm-listen.h          |   2 +-
 compat/fsmonitor/fsm-settings-darwin.c |  89 ++++++
 compat/fsmonitor/fsm-settings-win32.c  | 137 ++++++++
 config.mak.uname                       |   5 +
 contrib/buildsystems/CMakeLists.txt    |   8 +
 fsmonitor--daemon.h                    |  11 +-
 fsmonitor-settings.c                   | 167 ++++++++--
 fsmonitor-settings.h                   |  33 ++
 fsmonitor.c                            |  73 ++++-
 fsmonitor.h                            |  11 +
 git.c                                  |   2 +-
 t/helper/test-fsmonitor-client.c       | 106 +++++++
 t/lib-unicode-nfc-nfd.sh               | 167 ++++++++++
 t/perf/p7527-builtin-fsmonitor.sh      | 257 +++++++++++++++
 t/t7519-status-fsmonitor.sh            |  32 ++
 t/t7527-builtin-fsmonitor.sh           | 367 ++++++++++++++++++++++
 unpack-trees.c                         |   1 +
 25 files changed, 2358 insertions(+), 145 deletions(-)
 create mode 100644 compat/fsmonitor/fsm-health-darwin.c
 create mode 100644 compat/fsmonitor/fsm-health-win32.c
 create mode 100644 compat/fsmonitor/fsm-health.h
 create mode 100644 compat/fsmonitor/fsm-settings-darwin.c
 create mode 100644 compat/fsmonitor/fsm-settings-win32.c
 create mode 100755 t/lib-unicode-nfc-nfd.sh
 create mode 100755 t/perf/p7527-builtin-fsmonitor.sh


base-commit: 5eb696daba2fe108d4d9ba2ccf4b357447ef9946
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1143%2Fjeffhostetler%2Fbuiltin-fsmonitor-part3-v6
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1143/jeffhostetler/builtin-fsmonitor-part3-v6
Pull-Request: https://github.com/gitgitgadget/git/pull/1143

Range-diff vs v5:

  1:  8b7c5f4e234 =  1:  8b7c5f4e234 fsm-listen-win32: handle shortnames
  2:  5b246bec247 =  2:  5b246bec247 t7527: test FSMonitor on repos with Unicode root paths
  3:  8a474d69999 =  3:  8a474d69999 t/helper/fsmonitor-client: create stress test
  4:  004b67b62e3 !  4:  72b94acd5fe fsmonitor-settings: bare repos are incompatible with FSMonitor
     @@ Commit message
          Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
      
       ## builtin/fsmonitor--daemon.c ##
     +@@ builtin/fsmonitor--daemon.c: static int try_to_start_background_daemon(void)
     + int cmd_fsmonitor__daemon(int argc, const char **argv, const char *prefix)
     + {
     + 	const char *subcmd;
     ++	enum fsmonitor_reason reason;
     + 	int detach_console = 0;
     + 
     + 	struct option options[] = {
      @@ builtin/fsmonitor--daemon.c: int cmd_fsmonitor__daemon(int argc, const char **argv, const char *prefix)
       		die(_("invalid 'ipc-threads' value (%d)"),
       		    fsmonitor__ipc_threads);
       
      +	prepare_repo_settings(the_repository);
     ++	/*
     ++	 * If the repo is fsmonitor-compatible, explicitly set IPC-mode
     ++	 * (without bothering to load the `core.fsmonitor` config settings).
     ++	 *
     ++	 * If the repo is not compatible, the repo-settings will be set to
     ++	 * incompatible rather than IPC, so we can use one of the __get
     ++	 * routines to detect the discrepancy.
     ++	 */
      +	fsm_settings__set_ipc(the_repository);
      +
     -+	if (fsm_settings__error_if_incompatible(the_repository))
     -+		return 1;
     ++	reason = fsm_settings__get_reason(the_repository);
     ++	if (reason > FSMONITOR_REASON_OK)
     ++		die("%s",
     ++		    fsm_settings__get_incompatible_msg(the_repository,
     ++						       reason));
      +
       	if (!strcmp(subcmd, "start"))
       		return !!try_to_start_background_daemon();
     @@ builtin/update-index.c: int cmd_update_index(int argc, const char **argv, const
       
       	if (fsmonitor > 0) {
       		enum fsmonitor_mode fsm_mode = fsm_settings__get_mode(r);
     ++		enum fsmonitor_reason reason = fsm_settings__get_reason(r);
      +
     -+		if (fsm_settings__error_if_incompatible(the_repository))
     -+			return 1;
     ++		/*
     ++		 * The user wants to turn on FSMonitor using the command
     ++		 * line argument.  (We don't know (or care) whether that
     ++		 * is the IPC or HOOK version.)
     ++		 *
     ++		 * Use one of the __get routines to force load the FSMonitor
     ++		 * config settings into the repo-settings.  That will detect
     ++		 * whether the file system is compatible so that we can stop
     ++		 * here with a nice error message.
     ++		 */
     ++		if (reason > FSMONITOR_REASON_OK)
     ++			die("%s",
     ++			    fsm_settings__get_incompatible_msg(r, reason));
      +
       		if (fsm_mode == FSMONITOR_MODE_DISABLED) {
       			warning(_("core.fsmonitor is unset; "
     @@ fsmonitor-settings.c
       	char *hook_path;
       };
       
     -+static void set_incompatible(struct repository *r,
     -+			     enum fsmonitor_reason reason)
     -+{
     -+	struct fsmonitor_settings *s = r->settings.fsmonitor;
     -+
     -+	s->mode = FSMONITOR_MODE_INCOMPATIBLE;
     -+	s->reason = reason;
     -+}
     -+
     -+static int check_for_incompatible(struct repository *r)
     +-static void lookup_fsmonitor_settings(struct repository *r)
     ++static enum fsmonitor_reason check_for_incompatible(struct repository *r)
      +{
      +	if (!r->worktree) {
      +		/*
      +		 * Bare repositories don't have a working directory and
      +		 * therefore have nothing to watch.
      +		 */
     -+		set_incompatible(r, FSMONITOR_REASON_BARE);
     -+		return 1;
     ++		return FSMONITOR_REASON_BARE;
      +	}
      +
     -+	return 0;
     ++	return FSMONITOR_REASON_OK;
      +}
      +
     - static void lookup_fsmonitor_settings(struct repository *r)
     ++static struct fsmonitor_settings *alloc_settings(void)
       {
       	struct fsmonitor_settings *s;
     ++
     ++	CALLOC_ARRAY(s, 1);
     ++	s->mode = FSMONITOR_MODE_DISABLED;
     ++	s->reason = FSMONITOR_REASON_UNTESTED;
     ++
     ++	return s;
     ++}
     ++
     ++static void lookup_fsmonitor_settings(struct repository *r)
     ++{
     + 	const char *const_str;
     + 	int bool_value;
     + 
     + 	if (r->settings.fsmonitor)
     + 		return;
     + 
     +-	CALLOC_ARRAY(s, 1);
     +-	s->mode = FSMONITOR_MODE_DISABLED;
     +-
     +-	r->settings.fsmonitor = s;
     +-
     + 	/*
     + 	 * Overload the existing "core.fsmonitor" config setting (which
     + 	 * has historically been either unset or a hook pathname) to
      @@ fsmonitor-settings.c: static void lookup_fsmonitor_settings(struct repository *r)
     + 	case 0: /* config value was set to <bool> */
     + 		if (bool_value)
     + 			fsm_settings__set_ipc(r);
     ++		else
     ++			fsm_settings__set_disabled(r);
     + 		return;
       
     - 	CALLOC_ARRAY(s, 1);
     - 	s->mode = FSMONITOR_MODE_DISABLED;
     -+	s->reason = FSMONITOR_REASON_OK;
     + 	case 1: /* config value was unset */
     +@@ fsmonitor-settings.c: static void lookup_fsmonitor_settings(struct repository *r)
     + 		return;
     + 	}
       
     - 	r->settings.fsmonitor = s;
     +-	if (!const_str || !*const_str)
     +-		return;
     +-
     +-	fsm_settings__set_hook(r, const_str);
     ++	if (const_str && *const_str)
     ++		fsm_settings__set_hook(r, const_str);
     ++	else
     ++		fsm_settings__set_disabled(r);
     + }
       
     -@@ fsmonitor-settings.c: void fsm_settings__set_ipc(struct repository *r)
     + enum fsmonitor_mode fsm_settings__get_mode(struct repository *r)
     + {
     + 	if (!r)
     + 		r = the_repository;
     +-
     +-	lookup_fsmonitor_settings(r);
     ++	if (!r->settings.fsmonitor)
     ++		lookup_fsmonitor_settings(r);
       
     - 	lookup_fsmonitor_settings(r);
     + 	return r->settings.fsmonitor->mode;
     + }
     +@@ fsmonitor-settings.c: const char *fsm_settings__get_hook_path(struct repository *r)
     + {
     + 	if (!r)
     + 		r = the_repository;
     +-
     +-	lookup_fsmonitor_settings(r);
     ++	if (!r->settings.fsmonitor)
     ++		lookup_fsmonitor_settings(r);
       
     -+	if (check_for_incompatible(r))
     + 	return r->settings.fsmonitor->hook_path;
     + }
     + 
     + void fsm_settings__set_ipc(struct repository *r)
     + {
     ++	enum fsmonitor_reason reason = check_for_incompatible(r);
     ++
     ++	if (reason != FSMONITOR_REASON_OK) {
     ++		fsm_settings__set_incompatible(r, reason);
      +		return;
     ++	}
      +
     ++	/*
     ++	 * Caller requested IPC explicitly, so avoid (possibly
     ++	 * recursive) config lookup.
     ++	 */
     + 	if (!r)
     + 		r = the_repository;
     +-
     +-	lookup_fsmonitor_settings(r);
     ++	if (!r->settings.fsmonitor)
     ++		r->settings.fsmonitor = alloc_settings();
     + 
       	r->settings.fsmonitor->mode = FSMONITOR_MODE_IPC;
     ++	r->settings.fsmonitor->reason = reason;
       	FREE_AND_NULL(r->settings.fsmonitor->hook_path);
       }
     -@@ fsmonitor-settings.c: void fsm_settings__set_hook(struct repository *r, const char *path)
     - 
     - 	lookup_fsmonitor_settings(r);
       
     -+	if (check_for_incompatible(r))
     + void fsm_settings__set_hook(struct repository *r, const char *path)
     + {
     ++	enum fsmonitor_reason reason = check_for_incompatible(r);
     ++
     ++	if (reason != FSMONITOR_REASON_OK) {
     ++		fsm_settings__set_incompatible(r, reason);
      +		return;
     ++	}
      +
     ++	/*
     ++	 * Caller requested hook explicitly, so avoid (possibly
     ++	 * recursive) config lookup.
     ++	 */
     + 	if (!r)
     + 		r = the_repository;
     +-
     +-	lookup_fsmonitor_settings(r);
     ++	if (!r->settings.fsmonitor)
     ++		r->settings.fsmonitor = alloc_settings();
     + 
       	r->settings.fsmonitor->mode = FSMONITOR_MODE_HOOK;
     ++	r->settings.fsmonitor->reason = reason;
       	FREE_AND_NULL(r->settings.fsmonitor->hook_path);
       	r->settings.fsmonitor->hook_path = strdup(path);
     + }
      @@ fsmonitor-settings.c: void fsm_settings__set_disabled(struct repository *r)
     - 	lookup_fsmonitor_settings(r);
     + {
     + 	if (!r)
     + 		r = the_repository;
     +-
     +-	lookup_fsmonitor_settings(r);
     ++	if (!r->settings.fsmonitor)
     ++		r->settings.fsmonitor = alloc_settings();
       
       	r->settings.fsmonitor->mode = FSMONITOR_MODE_DISABLED;
      +	r->settings.fsmonitor->reason = FSMONITOR_REASON_OK;
     ++	FREE_AND_NULL(r->settings.fsmonitor->hook_path);
     ++}
     ++
     ++void fsm_settings__set_incompatible(struct repository *r,
     ++				    enum fsmonitor_reason reason)
     ++{
     ++	if (!r)
     ++		r = the_repository;
     ++	if (!r->settings.fsmonitor)
     ++		r->settings.fsmonitor = alloc_settings();
     ++
     ++	r->settings.fsmonitor->mode = FSMONITOR_MODE_INCOMPATIBLE;
     ++	r->settings.fsmonitor->reason = reason;
       	FREE_AND_NULL(r->settings.fsmonitor->hook_path);
       }
      +
     @@ fsmonitor-settings.c: void fsm_settings__set_disabled(struct repository *r)
      +{
      +	if (!r)
      +		r = the_repository;
     -+
     -+	lookup_fsmonitor_settings(r);
     ++	if (!r->settings.fsmonitor)
     ++		lookup_fsmonitor_settings(r);
      +
      +	return r->settings.fsmonitor->reason;
      +}
      +
     -+int fsm_settings__error_if_incompatible(struct repository *r)
     ++char *fsm_settings__get_incompatible_msg(const struct repository *r,
     ++					 enum fsmonitor_reason reason)
      +{
     -+	enum fsmonitor_reason reason = fsm_settings__get_reason(r);
     ++	struct strbuf msg = STRBUF_INIT;
      +
      +	switch (reason) {
     ++	case FSMONITOR_REASON_UNTESTED:
      +	case FSMONITOR_REASON_OK:
     -+		return 0;
     ++		goto done;
      +
      +	case FSMONITOR_REASON_BARE:
     -+		error(_("bare repository '%s' is incompatible with fsmonitor"),
     -+		      xgetcwd());
     -+		return 1;
     ++		strbuf_addf(&msg,
     ++			    _("bare repository '%s' is incompatible with fsmonitor"),
     ++			    xgetcwd());
     ++		goto done;
      +	}
      +
     -+	BUG("Unhandled case in fsm_settings__error_if_incompatible: '%d'",
     ++	BUG("Unhandled case in fsm_settings__get_incompatible_msg: '%d'",
      +	    reason);
     ++
     ++done:
     ++	return strbuf_detach(&msg, NULL);
      +}
      
       ## fsmonitor-settings.h ##
     @@ fsmonitor-settings.h
      + * Incompatibility reasons.
      + */
      +enum fsmonitor_reason {
     -+	FSMONITOR_REASON_OK = 0, /* no incompatibility or when disbled */
     ++	FSMONITOR_REASON_UNTESTED = 0,
     ++	FSMONITOR_REASON_OK, /* no incompatibility or when disbled */
      +	FSMONITOR_REASON_BARE,
      +};
      +
       void fsm_settings__set_ipc(struct repository *r);
       void fsm_settings__set_hook(struct repository *r, const char *path);
       void fsm_settings__set_disabled(struct repository *r);
     -@@ fsmonitor-settings.h: void fsm_settings__set_disabled(struct repository *r);
     ++void fsm_settings__set_incompatible(struct repository *r,
     ++				    enum fsmonitor_reason reason);
     + 
       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);
     -+int fsm_settings__error_if_incompatible(struct repository *r);
     ++char *fsm_settings__get_incompatible_msg(const struct repository *r,
     ++					 enum fsmonitor_reason reason);
      +
       struct fsmonitor_settings;
       
  5:  e1e55550c10 !  5:  2e225c3f4f2 fsmonitor-settings: stub in Win32-specific incompatibility checking
     @@ contrib/buildsystems/CMakeLists.txt: if(SUPPORTS_SIMPLE_IPC)
       		list(APPEND compat_SOURCES compat/fsmonitor/fsm-listen-darwin.c)
      
       ## fsmonitor-settings.c ##
     -@@ fsmonitor-settings.c: static int check_for_incompatible(struct repository *r)
     - 		return 1;
     +@@ fsmonitor-settings.c: static enum fsmonitor_reason check_for_incompatible(struct repository *r)
     + 		return FSMONITOR_REASON_BARE;
       	}
       
      +#ifdef HAVE_FSMONITOR_OS_SETTINGS
     @@ fsmonitor-settings.c: static int check_for_incompatible(struct repository *r)
      +		enum fsmonitor_reason reason;
      +
      +		reason = fsm_os__incompatible(r);
     -+		if (reason != FSMONITOR_REASON_OK) {
     -+			set_incompatible(r, reason);
     -+			return 1;
     -+		}
     ++		if (reason != FSMONITOR_REASON_OK)
     ++			return reason;
      +	}
      +#endif
      +
     - 	return 0;
     + 	return FSMONITOR_REASON_OK;
       }
       
      
       ## fsmonitor-settings.h ##
     -@@ fsmonitor-settings.h: int fsm_settings__error_if_incompatible(struct repository *r);
     +@@ fsmonitor-settings.h: char *fsm_settings__get_incompatible_msg(const struct repository *r,
       
       struct fsmonitor_settings;
       
  6:  2d68fc9a46a !  6:  e0d3bdf7556 fsmonitor-settings: VFS for Git virtual repos are incompatible
     @@ compat/fsmonitor/fsm-settings-win32.c
       }
      
       ## fsmonitor-settings.c ##
     -@@ fsmonitor-settings.c: int fsm_settings__error_if_incompatible(struct repository *r)
     - 		error(_("bare repository '%s' is incompatible with fsmonitor"),
     - 		      xgetcwd());
     - 		return 1;
     +@@ fsmonitor-settings.c: char *fsm_settings__get_incompatible_msg(const struct repository *r,
     + 			    _("bare repository '%s' is incompatible with fsmonitor"),
     + 			    xgetcwd());
     + 		goto done;
      +
      +	case FSMONITOR_REASON_VFS4GIT:
     -+		error(_("virtual repository '%s' is incompatible with fsmonitor"),
     -+		      r->worktree);
     -+		return 1;
     ++		strbuf_addf(&msg,
     ++			    _("virtual repository '%s' is incompatible with fsmonitor"),
     ++			    r->worktree);
     ++		goto done;
       	}
       
     - 	BUG("Unhandled case in fsm_settings__error_if_incompatible: '%d'",
     + 	BUG("Unhandled case in fsm_settings__get_incompatible_msg: '%d'",
      
       ## fsmonitor-settings.h ##
     -@@ fsmonitor-settings.h: enum fsmonitor_mode {
     - enum fsmonitor_reason {
     - 	FSMONITOR_REASON_OK = 0, /* no incompatibility or when disbled */
     +@@ fsmonitor-settings.h: enum fsmonitor_reason {
     + 	FSMONITOR_REASON_UNTESTED = 0,
     + 	FSMONITOR_REASON_OK, /* no incompatibility or when disbled */
       	FSMONITOR_REASON_BARE,
      +	FSMONITOR_REASON_VFS4GIT, /* VFS for Git virtualization */
       };
  7:  94ae2e424f1 =  7:  c50ed29a310 fsmonitor-settings: stub in macOS-specific incompatibility checking
  8:  b2ca6c1b201 !  8:  1f5b772d42a fsmonitor-settings: remote repos on macOS are incompatible
     @@ compat/fsmonitor/fsm-settings-darwin.c
       }
      
       ## fsmonitor-settings.c ##
     -@@ fsmonitor-settings.c: int fsm_settings__error_if_incompatible(struct repository *r)
     - 		      xgetcwd());
     - 		return 1;
     +@@ fsmonitor-settings.c: char *fsm_settings__get_incompatible_msg(const struct repository *r,
     + 			    xgetcwd());
     + 		goto done;
       
      +	case FSMONITOR_REASON_ERROR:
     -+		error(_("repository '%s' is incompatible with fsmonitor due to errors"),
     -+		      r->worktree);
     -+		return 1;
     ++		strbuf_addf(&msg,
     ++			    _("repository '%s' is incompatible with fsmonitor due to errors"),
     ++			    r->worktree);
     ++		goto done;
      +
      +	case FSMONITOR_REASON_REMOTE:
     -+		error(_("remote repository '%s' is incompatible with fsmonitor"),
     -+		      r->worktree);
     -+		return 1;
     ++		strbuf_addf(&msg,
     ++			    _("remote repository '%s' is incompatible with fsmonitor"),
     ++			    r->worktree);
     ++		goto done;
      +
       	case FSMONITOR_REASON_VFS4GIT:
     - 		error(_("virtual repository '%s' is incompatible with fsmonitor"),
     - 		      r->worktree);
     + 		strbuf_addf(&msg,
     + 			    _("virtual repository '%s' is incompatible with fsmonitor"),
      
       ## fsmonitor-settings.h ##
     -@@ fsmonitor-settings.h: enum fsmonitor_mode {
     - enum fsmonitor_reason {
     - 	FSMONITOR_REASON_OK = 0, /* no incompatibility or when disbled */
     +@@ fsmonitor-settings.h: enum fsmonitor_reason {
     + 	FSMONITOR_REASON_UNTESTED = 0,
     + 	FSMONITOR_REASON_OK, /* no incompatibility or when disbled */
       	FSMONITOR_REASON_BARE,
      +	FSMONITOR_REASON_ERROR, /* FS error probing for compatibility */
      +	FSMONITOR_REASON_REMOTE,
  9:  a3cc4b3b16d =  9:  495e54049b4 fsmonitor-settings: remote repos on Windows are incompatible
 10:  8f1f4840751 ! 10:  4b52083698c fsmonitor-settings: NTFS and FAT32 on MacOS are incompatible
     @@ compat/fsmonitor/fsm-settings-darwin.c: enum fsmonitor_reason fsm_os__incompatib
       
      
       ## fsmonitor-settings.c ##
     -@@ fsmonitor-settings.c: int fsm_settings__error_if_incompatible(struct repository *r)
     - 		error(_("virtual repository '%s' is incompatible with fsmonitor"),
     - 		      r->worktree);
     - 		return 1;
     +@@ fsmonitor-settings.c: char *fsm_settings__get_incompatible_msg(const struct repository *r,
     + 			    _("virtual repository '%s' is incompatible with fsmonitor"),
     + 			    r->worktree);
     + 		goto done;
      +
      +	case FSMONITOR_REASON_NOSOCKETS:
     -+		error(_("repository '%s' is incompatible with fsmonitor due to lack of Unix sockets"),
     -+		      r->worktree);
     -+		return 1;
     ++		strbuf_addf(&msg,
     ++			    _("repository '%s' is incompatible with fsmonitor due to lack of Unix sockets"),
     ++			    r->worktree);
     ++		goto done;
       	}
       
     - 	BUG("Unhandled case in fsm_settings__error_if_incompatible: '%d'",
     + 	BUG("Unhandled case in fsm_settings__get_incompatible_msg: '%d'",
      
       ## fsmonitor-settings.h ##
      @@ fsmonitor-settings.h: enum fsmonitor_reason {
 11:  8d48d9c5623 = 11:  d4a4263d379 unpack-trees: initialize fsmonitor_has_run_once in o->result
 12:  088c7b3334c = 12:  f4feb00ec2b fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS
 13:  00fab626663 = 13:  dbb983fd9d0 fsmonitor--daemon: cd out of worktree root
 14:  6552f51802b = 14:  ae90b99ea9b fsmonitor--daemon: prepare for adding health thread
 15:  f2bf07cd739 = 15:  b6c5800095f fsmonitor--daemon: rename listener thread related variables
 16:  2a44f2eded1 = 16:  32fc6ba7437 fsmonitor--daemon: stub in health thread
 17:  854fb5e3658 = 17:  77bc037481a fsm-health-win32: add polling framework to monitor daemon health
 18:  3af1fe0d61d = 18:  b06edd995ea fsm-health-win32: force shutdown daemon if worktree root moves
 19:  f1365cdd40c = 19:  1bd5f346248 fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed
 20:  15698d64edd = 20:  48af0813dec fsmonitor: optimize processing of directory events
 21:  9d0da8fc22b = 21:  a9b35e770f3 t7527: FSMonitor tests for directory moves
 22:  040c00cfd6f = 22:  26308936af9 t/perf/p7527: add perf test for builtin FSMonitor
 23:  5db241f7d2f ! 23:  d0e25f6bac6 fsmonitor: never set CE_FSMONITOR_VALID on submodules
     @@ t/t7527-builtin-fsmonitor.sh: do
      +# submodule.
      +
      +create_super () {
     -+	super=$1 &&
     -+
     -+	git init "${super}" &&
     -+	echo x >${super}/file_1 &&
     -+	echo y >${super}/file_2 &&
     -+	echo z >${super}/file_3 &&
     -+	mkdir ${super}/dir_1 &&
     -+	echo a >${super}/dir_1/file_11 &&
     -+	echo b >${super}/dir_1/file_12 &&
     -+	mkdir ${super}/dir_1/dir_2 &&
     -+	echo a >${super}/dir_1/dir_2/file_21 &&
     -+	echo b >${super}/dir_1/dir_2/file_22 &&
     -+	git -C ${super} add . &&
     -+	git -C ${super} commit -m "initial ${super} commit"
     ++	super="$1" &&
     ++
     ++	git init "$super" &&
     ++	echo x >"$super/file_1" &&
     ++	echo y >"$super/file_2" &&
     ++	echo z >"$super/file_3" &&
     ++	mkdir "$super/dir_1" &&
     ++	echo a >"$super/dir_1/file_11" &&
     ++	echo b >"$super/dir_1/file_12" &&
     ++	mkdir "$super/dir_1/dir_2" &&
     ++	echo a >"$super/dir_1/dir_2/file_21" &&
     ++	echo b >"$super/dir_1/dir_2/file_22" &&
     ++	git -C "$super" add . &&
     ++	git -C "$super" commit -m "initial $super commit"
      +}
      +
      +create_sub () {
     -+	sub=$1 &&
     -+
     -+	git init "${sub}" &&
     -+	echo x >${sub}/file_x &&
     -+	echo y >${sub}/file_y &&
     -+	echo z >${sub}/file_z &&
     -+	mkdir ${sub}/dir_x &&
     -+	echo a >${sub}/dir_x/file_a &&
     -+	echo b >${sub}/dir_x/file_b &&
     -+	mkdir ${sub}/dir_x/dir_y &&
     -+	echo a >${sub}/dir_x/dir_y/file_a &&
     -+	echo b >${sub}/dir_x/dir_y/file_b &&
     -+	git -C ${sub} add . &&
     -+	git -C ${sub} commit -m "initial ${sub} commit"
     ++	sub="$1" &&
     ++
     ++	git init "$sub" &&
     ++	echo x >"$sub/file_x" &&
     ++	echo y >"$sub/file_y" &&
     ++	echo z >"$sub/file_z" &&
     ++	mkdir "$sub/dir_x" &&
     ++	echo a >"$sub/dir_x/file_a" &&
     ++	echo b >"$sub/dir_x/file_b" &&
     ++	mkdir "$sub/dir_x/dir_y" &&
     ++	echo a >"$sub/dir_x/dir_y/file_a" &&
     ++	echo b >"$sub/dir_x/dir_y/file_b" &&
     ++	git -C "$sub" add . &&
     ++	git -C "$sub" commit -m "initial $sub commit"
      +}
      +
      +my_match_and_clean () {
     @@ t/t7527-builtin-fsmonitor.sh: do
      +			    rm -rf super; \
      +			    rm -rf sub" &&
      +
     -+	create_super "super" &&
     -+	create_sub "sub" &&
     ++	create_super super &&
     ++	create_sub sub &&
      +
      +	git -C super submodule add ../sub ./dir_1/dir_2/sub &&
      +	git -C super commit -m "add sub" &&
 24:  93de3707d26 = 24:  410dd2d2920 t7527: test FSMonitor on case insensitive+preserving file system
 25:  d890c2e2d97 = 25:  cd7c55b0d38 fsmonitor: on macOS also emit NFC spelling for NFD pathname
 26:  7c606235557 = 26:  8278f32c4d8 t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd
 27:  9724c41d18d = 27:  4efb3a43838 t7527: test Unicode NFC/NFD handling on MacOS
 28:  b8325fb7c78 ! 28:  df1b4f3a80f fsmonitor--daemon: allow --super-prefix argument
     @@ t/t7527-builtin-fsmonitor.sh: test_expect_success "Submodule always visited" '
      +			    rm -rf sub;   \
      +			    rm super-sub.trace" &&
      +
     -+	create_super "super" &&
     -+	create_sub "sub" &&
     ++	create_super super &&
     ++	create_sub sub &&
      +
      +	# Copy rather than submodule add so that we get a .git dir.
      +	cp -R ./sub ./super/dir_1/dir_2/sub &&

-- 
gitgitgadget

  parent reply	other threads:[~2022-04-22 22:38 UTC|newest]

Thread overview: 345+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-15 15:59 [PATCH 00/23] Builtin FSMonitor Part 3 Jeff Hostetler via GitGitGadget
2022-02-15 15:59 ` [PATCH 01/23] fsm-listen-win32: handle shortnames Jeff Hostetler via GitGitGadget
2022-02-24 14:48   ` Derrick Stolee
2022-02-15 15:59 ` [PATCH 02/23] t7527: test FS event reporing on macOS WRT case and Unicode Jeff Hostetler via GitGitGadget
2022-02-24 14:52   ` Derrick Stolee
2022-02-24 17:33     ` Torsten =?unknown-8bit?Q?B=C3=B6gershausen?=
2022-03-04 23:40       ` Jeff Hostetler
2022-03-05  8:59         ` Torsten =?unknown-8bit?Q?B=C3=B6gershausen?=
2022-03-07 20:45           ` Jeff Hostetler
2022-03-04 23:47       ` Jeff Hostetler
2022-02-15 15:59 ` [PATCH 03/23] t7527: test builtin FSMonitor watching repos with unicode paths Jeff Hostetler via GitGitGadget
2022-02-15 15:59 ` [PATCH 04/23] t/helper/fsmonitor-client: create stress test Jeff Hostetler via GitGitGadget
2022-02-24 14:58   ` Derrick Stolee
2022-03-01 19:37     ` Jeff Hostetler
2022-02-15 15:59 ` [PATCH 05/23] fsmonitor-settings: bare repos are incompatible with FSMonitor Jeff Hostetler via GitGitGadget
2022-02-25 20:42   ` Ævar Arnfjörð Bjarmason
2022-03-02 21:09     ` Jeff Hostetler
2022-02-15 15:59 ` [PATCH 06/23] fsmonitor-settings: stub in platform-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-02-24 15:05   ` Derrick Stolee
2022-02-15 15:59 ` [PATCH 07/23] fsmonitor-settings: virtual repos are incompatible with FSMonitor Jeff Hostetler via GitGitGadget
2022-02-24 15:11   ` Derrick Stolee
2022-03-01 21:01     ` Jeff Hostetler
2022-02-15 15:59 ` [PATCH 08/23] fsmonitor-settings: stub in macOS-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-02-15 15:59 ` [PATCH 09/23] fsmonitor-settings: remote repos on macOS are incompatible with FSMonitor Jeff Hostetler via GitGitGadget
2022-02-24 15:26   ` Derrick Stolee
2022-03-01 21:30     ` Jeff Hostetler
2022-02-15 15:59 ` [PATCH 10/23] fsmonitor-settings: remote repos on Windows " Jeff Hostetler via GitGitGadget
2022-02-24 15:56   ` Derrick Stolee
2022-02-15 15:59 ` [PATCH 11/23] unpack-trees: initialize fsmonitor_has_run_once in o->result Jeff Hostetler via GitGitGadget
2022-02-15 15:59 ` [PATCH 12/23] fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS Jeff Hostetler via GitGitGadget
2022-02-15 15:59 ` [PATCH 13/23] fsmonitor--daemon: print start message only if fsmonitor.announceStartup Jeff Hostetler via GitGitGadget
2022-02-15 15:59 ` [PATCH 14/23] fsmonitor--daemon: cd out of worktree root Jeff Hostetler via GitGitGadget
2022-02-15 15:59 ` [PATCH 15/23] fsmonitor--daemon: prepare for adding health thread Jeff Hostetler via GitGitGadget
2022-02-15 15:59 ` [PATCH 16/23] fsmonitor--daemon: rename listener thread related variables Jeff Hostetler via GitGitGadget
2022-02-15 15:59 ` [PATCH 17/23] fsmonitor--daemon: stub in health thread Jeff Hostetler via GitGitGadget
2022-02-24 16:04   ` Derrick Stolee
2022-02-24 16:15     ` Derrick Stolee
2022-03-03 16:40       ` Jeff Hostetler
2022-03-03 16:50       ` Jeff Hostetler
2022-03-03 16:16     ` Jeff Hostetler
2022-02-15 15:59 ` [PATCH 18/23] fsm-health-win32: add framework to monitor daemon health Jeff Hostetler via GitGitGadget
2022-02-24 16:05   ` Derrick Stolee
2022-02-15 15:59 ` [PATCH 19/23] fsm-health-win32: force shutdown daemon if worktree root moves Jeff Hostetler via GitGitGadget
2022-02-24 16:09   ` Derrick Stolee
2022-03-03 18:00     ` Jeff Hostetler
2022-02-15 15:59 ` [PATCH 20/23] fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed Jeff Hostetler via GitGitGadget
2022-02-24 16:10   ` Derrick Stolee
2022-02-15 15:59 ` [PATCH 21/23] fsmonitor: optimize processing of directory events Jeff Hostetler via GitGitGadget
2022-02-24 16:13   ` Derrick Stolee
2022-02-15 15:59 ` [PATCH 22/23] t7527: FSMonitor tests for directory moves Jeff Hostetler via GitGitGadget
2022-02-15 15:59 ` [PATCH 23/23] t/perf/p7527: add perf test for builtin FSMonitor Jeff Hostetler via GitGitGadget
2022-02-16  1:00 ` [PATCH 00/23] Builtin FSMonitor Part 3 Junio C Hamano
2022-02-16 14:04   ` Jeff Hostetler
2022-02-24 16:21 ` Derrick Stolee
2022-03-07 21:23   ` Jeff Hostetler
2022-03-09 15:34     ` Derrick Stolee
2022-03-08 22:15 ` [PATCH v2 00/27] " Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 01/27] fsm-listen-win32: handle shortnames Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 02/27] t7527: test FSMonitor on repos with Unicode root paths Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 03/27] t/helper/fsmonitor-client: create stress test Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 04/27] fsmonitor-settings: bare repos are incompatible with FSMonitor Jeff Hostetler via GitGitGadget
2022-03-11  1:31     ` Ævar Arnfjörð Bjarmason
2022-03-11 22:25       ` Jeff Hostetler
2022-03-08 22:15   ` [PATCH v2 05/27] fsmonitor-settings: stub in platform-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 06/27] fsmonitor-settings: VFS for Git virtual repos are incompatible Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 07/27] fsmonitor-settings: stub in macOS-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 08/27] fsmonitor-settings: remote repos on macOS are incompatible Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 09/27] fsmonitor-settings: remote repos on Windows " Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 10/27] unpack-trees: initialize fsmonitor_has_run_once in o->result Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 11/27] fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 12/27] fsmonitor--daemon: cd out of worktree root Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 13/27] fsmonitor--daemon: prepare for adding health thread Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 14/27] fsmonitor--daemon: rename listener thread related variables Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 15/27] fsmonitor--daemon: stub in health thread Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 16/27] fsm-health-win32: add polling framework to monitor daemon health Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 17/27] fsm-health-win32: force shutdown daemon if worktree root moves Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 18/27] fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 19/27] fsmonitor: optimize processing of directory events Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 20/27] t7527: FSMonitor tests for directory moves Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 21/27] t/perf/p7527: add perf test for builtin FSMonitor Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 22/27] fsmonitor: never set CE_FSMONITOR_VALID on submodules Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 23/27] t7527: test FSMonitor on case insensitive+preserving file system Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 24/27] fsmonitor: on macOS also emit NFC spelling for NFD pathname Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 25/27] t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd Jeff Hostetler via GitGitGadget
2022-03-09 18:40     ` Derrick Stolee
2022-03-09 18:42       ` Derrick Stolee
2022-03-10 14:28         ` Jeff Hostetler
2022-03-10 14:23       ` Jeff Hostetler
2022-03-08 22:15   ` [PATCH v2 26/27] t7527: test Unicode NFC/NFD handling on MacOS Jeff Hostetler via GitGitGadget
2022-03-08 22:15   ` [PATCH v2 27/27] fsmonitor-settings: NTFS and FAT32 on MacOS are incompatible Jeff Hostetler via GitGitGadget
2022-03-09 18:48   ` [PATCH v2 00/27] Builtin FSMonitor Part 3 Derrick Stolee
2022-03-10  5:31   ` Torsten =?unknown-8bit?Q?B=C3=B6gershausen?=
2022-03-13 10:42   ` Torsten Bögershausen
2022-03-21 22:06     ` Jeff Hostetler
2022-03-21 23:18       ` rsbecker
2022-03-22 14:10         ` Jeff Hostetler
2022-03-22 14:25           ` rsbecker
2022-03-22 15:01             ` Jeff Hostetler
2022-03-21 22:59     ` Jeff Hostetler
2022-03-22 18:22   ` [PATCH v3 " Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 01/27] fsm-listen-win32: handle shortnames Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 02/27] t7527: test FSMonitor on repos with Unicode root paths Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 03/27] t/helper/fsmonitor-client: create stress test Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 04/27] fsmonitor-settings: bare repos are incompatible with FSMonitor Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 05/27] fsmonitor-settings: stub in Win32-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 06/27] fsmonitor-settings: VFS for Git virtual repos are incompatible Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 07/27] fsmonitor-settings: stub in macOS-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 08/27] fsmonitor-settings: remote repos on macOS are incompatible Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 09/27] fsmonitor-settings: remote repos on Windows " Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 10/27] fsmonitor-settings: NTFS and FAT32 on MacOS " Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 11/27] unpack-trees: initialize fsmonitor_has_run_once in o->result Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 12/27] fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 13/27] fsmonitor--daemon: cd out of worktree root Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 14/27] fsmonitor--daemon: prepare for adding health thread Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 15/27] fsmonitor--daemon: rename listener thread related variables Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 16/27] fsmonitor--daemon: stub in health thread Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 17/27] fsm-health-win32: add polling framework to monitor daemon health Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 18/27] fsm-health-win32: force shutdown daemon if worktree root moves Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 19/27] fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 20/27] fsmonitor: optimize processing of directory events Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 21/27] t7527: FSMonitor tests for directory moves Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 22/27] t/perf/p7527: add perf test for builtin FSMonitor Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 23/27] fsmonitor: never set CE_FSMONITOR_VALID on submodules Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 24/27] t7527: test FSMonitor on case insensitive+preserving file system Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 25/27] fsmonitor: on macOS also emit NFC spelling for NFD pathname Jeff Hostetler via GitGitGadget
2022-03-22 18:22     ` [PATCH v3 26/27] t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd Jeff Hostetler via GitGitGadget
2022-03-22 18:23     ` [PATCH v3 27/27] t7527: test Unicode NFC/NFD handling on MacOS Jeff Hostetler via GitGitGadget
2022-03-24 16:50     ` [PATCH v4 00/27] Builtin FSMonitor Part 3 Jeff Hostetler via GitGitGadget
2022-03-24 16:50       ` [PATCH v4 01/27] fsm-listen-win32: handle shortnames Jeff Hostetler via GitGitGadget
2022-03-24 16:50       ` [PATCH v4 02/27] t7527: test FSMonitor on repos with Unicode root paths Jeff Hostetler via GitGitGadget
2022-03-24 16:50       ` [PATCH v4 03/27] t/helper/fsmonitor-client: create stress test Jeff Hostetler via GitGitGadget
2022-03-24 16:50       ` [PATCH v4 04/27] fsmonitor-settings: bare repos are incompatible with FSMonitor Jeff Hostetler via GitGitGadget
2022-04-19  9:44         ` Ævar Arnfjörð Bjarmason
2022-04-22 14:47           ` Jeff Hostetler
2022-03-24 16:50       ` [PATCH v4 05/27] fsmonitor-settings: stub in Win32-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-03-24 16:50       ` [PATCH v4 06/27] fsmonitor-settings: VFS for Git virtual repos are incompatible Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 07/27] fsmonitor-settings: stub in macOS-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 08/27] fsmonitor-settings: remote repos on macOS are incompatible Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 09/27] fsmonitor-settings: remote repos on Windows " Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 10/27] fsmonitor-settings: NTFS and FAT32 on MacOS " Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 11/27] unpack-trees: initialize fsmonitor_has_run_once in o->result Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 12/27] fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 13/27] fsmonitor--daemon: cd out of worktree root Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 14/27] fsmonitor--daemon: prepare for adding health thread Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 15/27] fsmonitor--daemon: rename listener thread related variables Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 16/27] fsmonitor--daemon: stub in health thread Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 17/27] fsm-health-win32: add polling framework to monitor daemon health Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 18/27] fsm-health-win32: force shutdown daemon if worktree root moves Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 19/27] fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 20/27] fsmonitor: optimize processing of directory events Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 21/27] t7527: FSMonitor tests for directory moves Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 22/27] t/perf/p7527: add perf test for builtin FSMonitor Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 23/27] fsmonitor: never set CE_FSMONITOR_VALID on submodules Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 24/27] t7527: test FSMonitor on case insensitive+preserving file system Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 25/27] fsmonitor: on macOS also emit NFC spelling for NFD pathname Jeff Hostetler via GitGitGadget
2022-03-24 16:51       ` [PATCH v4 26/27] t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd Jeff Hostetler via GitGitGadget
2022-03-25  8:59         ` Bagas Sanjaya
2022-03-25 14:21           ` Derrick Stolee
2022-03-25 14:38           ` Jeff Hostetler
2022-03-24 16:51       ` [PATCH v4 27/27] t7527: test Unicode NFC/NFD handling on MacOS Jeff Hostetler via GitGitGadget
2022-03-24 21:50       ` [PATCH v4 00/27] Builtin FSMonitor Part 3 Junio C Hamano
2022-04-20 20:42       ` [PATCH v5 00/28] " Jeff Hostetler via GitGitGadget
2022-04-20 20:42         ` [PATCH v5 01/28] fsm-listen-win32: handle shortnames Jeff Hostetler via GitGitGadget
2022-04-20 20:42         ` [PATCH v5 02/28] t7527: test FSMonitor on repos with Unicode root paths Jeff Hostetler via GitGitGadget
2022-04-20 20:42         ` [PATCH v5 03/28] t/helper/fsmonitor-client: create stress test Jeff Hostetler via GitGitGadget
2022-04-20 20:42         ` [PATCH v5 04/28] fsmonitor-settings: bare repos are incompatible with FSMonitor Jeff Hostetler via GitGitGadget
2022-04-20 20:42         ` [PATCH v5 05/28] fsmonitor-settings: stub in Win32-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-04-20 20:42         ` [PATCH v5 06/28] fsmonitor-settings: VFS for Git virtual repos are incompatible Jeff Hostetler via GitGitGadget
2022-04-20 20:42         ` [PATCH v5 07/28] fsmonitor-settings: stub in macOS-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-04-20 20:42         ` [PATCH v5 08/28] fsmonitor-settings: remote repos on macOS are incompatible Jeff Hostetler via GitGitGadget
2022-04-20 20:42         ` [PATCH v5 09/28] fsmonitor-settings: remote repos on Windows " Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 10/28] fsmonitor-settings: NTFS and FAT32 on MacOS " Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 11/28] unpack-trees: initialize fsmonitor_has_run_once in o->result Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 12/28] fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 13/28] fsmonitor--daemon: cd out of worktree root Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 14/28] fsmonitor--daemon: prepare for adding health thread Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 15/28] fsmonitor--daemon: rename listener thread related variables Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 16/28] fsmonitor--daemon: stub in health thread Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 17/28] fsm-health-win32: add polling framework to monitor daemon health Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 18/28] fsm-health-win32: force shutdown daemon if worktree root moves Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 19/28] fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 20/28] fsmonitor: optimize processing of directory events Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 21/28] t7527: FSMonitor tests for directory moves Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 22/28] t/perf/p7527: add perf test for builtin FSMonitor Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 23/28] fsmonitor: never set CE_FSMONITOR_VALID on submodules Jeff Hostetler via GitGitGadget
2022-04-20 23:41           ` Junio C Hamano
2022-04-22 20:47             ` Jeff Hostetler
2022-04-20 20:43         ` [PATCH v5 24/28] t7527: test FSMonitor on case insensitive+preserving file system Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 25/28] fsmonitor: on macOS also emit NFC spelling for NFD pathname Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 26/28] t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 27/28] t7527: test Unicode NFC/NFD handling on MacOS Jeff Hostetler via GitGitGadget
2022-04-20 20:43         ` [PATCH v5 28/28] fsmonitor--daemon: allow --super-prefix argument Jeff Hostetler via GitGitGadget
2022-04-21  0:02         ` [PATCH v5 00/28] Builtin FSMonitor Part 3 Junio C Hamano
2022-04-22 21:29         ` Jeff Hostetler via GitGitGadget [this message]
2022-04-22 21:29           ` [PATCH v6 01/28] fsm-listen-win32: handle shortnames Jeff Hostetler via GitGitGadget
2022-05-12 14:20             ` Johannes Schindelin
2022-05-17 19:26               ` Jeff Hostetler
2022-04-22 21:29           ` [PATCH v6 02/28] t7527: test FSMonitor on repos with Unicode root paths Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 03/28] t/helper/fsmonitor-client: create stress test Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 04/28] fsmonitor-settings: bare repos are incompatible with FSMonitor Jeff Hostetler via GitGitGadget
2022-05-12 14:21             ` Johannes Schindelin
2022-04-22 21:29           ` [PATCH v6 05/28] fsmonitor-settings: stub in Win32-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 06/28] fsmonitor-settings: VFS for Git virtual repos are incompatible Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 07/28] fsmonitor-settings: stub in macOS-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 08/28] fsmonitor-settings: remote repos on macOS are incompatible Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 09/28] fsmonitor-settings: remote repos on Windows " Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 10/28] fsmonitor-settings: NTFS and FAT32 on MacOS " Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 11/28] unpack-trees: initialize fsmonitor_has_run_once in o->result Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 12/28] fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 13/28] fsmonitor--daemon: cd out of worktree root Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 14/28] fsmonitor--daemon: prepare for adding health thread Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 15/28] fsmonitor--daemon: rename listener thread related variables Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 16/28] fsmonitor--daemon: stub in health thread Jeff Hostetler via GitGitGadget
2022-05-12 15:05             ` Johannes Schindelin
2022-05-17 19:48               ` Jeff Hostetler
2022-05-24 11:52                 ` Johannes Schindelin
2022-04-22 21:29           ` [PATCH v6 17/28] fsm-health-win32: add polling framework to monitor daemon health Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 18/28] fsm-health-win32: force shutdown daemon if worktree root moves Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 19/28] fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 20/28] fsmonitor: optimize processing of directory events Jeff Hostetler via GitGitGadget
2022-05-12 15:08             ` Johannes Schindelin
2022-05-17 20:17               ` Jeff Hostetler
2022-05-24 11:53                 ` Johannes Schindelin
2022-04-22 21:29           ` [PATCH v6 21/28] t7527: FSMonitor tests for directory moves Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 22/28] t/perf/p7527: add perf test for builtin FSMonitor Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 23/28] fsmonitor: never set CE_FSMONITOR_VALID on submodules Jeff Hostetler via GitGitGadget
2022-05-12 15:11             ` Johannes Schindelin
2022-04-22 21:29           ` [PATCH v6 24/28] t7527: test FSMonitor on case insensitive+preserving file system Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 25/28] fsmonitor: on macOS also emit NFC spelling for NFD pathname Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 26/28] t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd Jeff Hostetler via GitGitGadget
2022-05-12 15:26             ` Johannes Schindelin
2022-05-17 21:14               ` Jeff Hostetler
2022-04-22 21:29           ` [PATCH v6 27/28] t7527: test Unicode NFC/NFD handling on MacOS Jeff Hostetler via GitGitGadget
2022-04-22 21:29           ` [PATCH v6 28/28] fsmonitor--daemon: allow --super-prefix argument Jeff Hostetler via GitGitGadget
2022-05-12 15:35           ` [PATCH v6 00/28] Builtin FSMonitor Part 3 Johannes Schindelin
2022-05-23 20:12           ` [PATCH v7 00/30] " Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 01/30] fsm-listen-win32: handle shortnames Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 02/30] t7527: test FSMonitor on repos with Unicode root paths Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 03/30] t/helper/fsmonitor-client: create stress test Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 04/30] fsmonitor-settings: bare repos are incompatible with FSMonitor Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 05/30] fsmonitor-settings: stub in Win32-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 06/30] fsmonitor-settings: VFS for Git virtual repos are incompatible Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 07/30] fsmonitor-settings: stub in macOS-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 08/30] fsmonitor-settings: remote repos on macOS are incompatible Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 09/30] fsmonitor-settings: remote repos on Windows " Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 10/30] fsmonitor-settings: NTFS and FAT32 on MacOS " Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 11/30] unpack-trees: initialize fsmonitor_has_run_once in o->result Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 12/30] fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 13/30] fsmonitor--daemon: cd out of worktree root Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 14/30] fsmonitor--daemon: prepare for adding health thread Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 15/30] fsmonitor--daemon: rename listener thread related variables Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 16/30] fsmonitor--daemon: stub in health thread Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 17/30] fsm-health-win32: add polling framework to monitor daemon health Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 18/30] fsm-health-win32: force shutdown daemon if worktree root moves Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 19/30] fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 20/30] fsmonitor: optimize processing of directory events Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 21/30] t7527: FSMonitor tests for directory moves Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 22/30] t/perf/p7527: add perf test for builtin FSMonitor Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 23/30] fsmonitor: never set CE_FSMONITOR_VALID on submodules Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 24/30] t7527: test FSMonitor on case insensitive+preserving file system Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 25/30] fsmonitor: on macOS also emit NFC spelling for NFD pathname Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 26/30] t/helper/hexdump: add helper to print hexdump of stdin Jeff Hostetler via GitGitGadget
2022-05-23 21:19               ` Junio C Hamano
2022-05-24 12:16                 ` Johannes Schindelin
2022-05-24 19:52                   ` Junio C Hamano
2022-05-25 10:21                     ` Johannes Schindelin
2022-05-24 14:44                 ` Jeff Hostetler
2022-05-24 19:54                   ` Junio C Hamano
2022-05-25 13:45                     ` Jeff Hostetler
2022-05-23 20:12             ` [PATCH v7 27/30] t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd Jeff Hostetler via GitGitGadget
2022-05-23 21:33               ` Junio C Hamano
2022-05-24 12:14                 ` Johannes Schindelin
2022-05-24 15:06                 ` Jeff Hostetler
2022-05-23 20:12             ` [PATCH v7 28/30] t7527: test Unicode NFC/NFD handling on MacOS Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 29/30] fsmonitor--daemon: allow --super-prefix argument Jeff Hostetler via GitGitGadget
2022-05-23 20:12             ` [PATCH v7 30/30] t7527: improve implicit shutdown testing in fsmonitor--daemon Jeff Hostetler via GitGitGadget
2022-05-24 12:00             ` [PATCH v7 00/30] Builtin FSMonitor Part 3 Johannes Schindelin
2022-05-24 15:07               ` Jeff Hostetler
2022-05-25 10:23                 ` Johannes Schindelin
2022-05-25 15:00             ` [PATCH v8 " Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 01/30] fsm-listen-win32: handle shortnames Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 02/30] t7527: test FSMonitor on repos with Unicode root paths Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 03/30] t/helper/fsmonitor-client: create stress test Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 04/30] fsmonitor-settings: bare repos are incompatible with FSMonitor Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 05/30] fsmonitor-settings: stub in Win32-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 06/30] fsmonitor-settings: VFS for Git virtual repos are incompatible Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 07/30] fsmonitor-settings: stub in macOS-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 08/30] fsmonitor-settings: remote repos on macOS are incompatible Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 09/30] fsmonitor-settings: remote repos on Windows " Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 10/30] fsmonitor-settings: NTFS and FAT32 on MacOS " Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 11/30] unpack-trees: initialize fsmonitor_has_run_once in o->result Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 12/30] fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 13/30] fsmonitor--daemon: cd out of worktree root Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 14/30] fsmonitor--daemon: prepare for adding health thread Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 15/30] fsmonitor--daemon: rename listener thread related variables Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 16/30] fsmonitor--daemon: stub in health thread Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 17/30] fsm-health-win32: add polling framework to monitor daemon health Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 18/30] fsm-health-win32: force shutdown daemon if worktree root moves Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 19/30] fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 20/30] fsmonitor: optimize processing of directory events Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 21/30] t7527: FSMonitor tests for directory moves Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 22/30] t/perf/p7527: add perf test for builtin FSMonitor Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 23/30] fsmonitor: never set CE_FSMONITOR_VALID on submodules Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 24/30] t7527: test FSMonitor on case insensitive+preserving file system Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 25/30] fsmonitor: on macOS also emit NFC spelling for NFD pathname Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 26/30] t/helper/hexdump: add helper to print hexdump of stdin Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 27/30] t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 28/30] t7527: test Unicode NFC/NFD handling on MacOS Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 29/30] fsmonitor--daemon: allow --super-prefix argument Jeff Hostetler via GitGitGadget
2022-05-25 15:00               ` [PATCH v8 30/30] t7527: improve implicit shutdown testing in fsmonitor--daemon Jeff Hostetler via GitGitGadget
2022-05-25 16:35               ` [PATCH v8 00/30] Builtin FSMonitor Part 3 Junio C Hamano
2022-05-25 17:29                 ` Jeff Hostetler
2022-05-26 21:46               ` [PATCH v9 " Jeff Hostetler via GitGitGadget
2022-05-26 21:46                 ` [PATCH v9 01/30] fsm-listen-win32: handle shortnames Jeff Hostetler via GitGitGadget
2022-05-26 21:46                 ` [PATCH v9 02/30] t7527: test FSMonitor on repos with Unicode root paths Jeff Hostetler via GitGitGadget
2022-05-26 21:46                 ` [PATCH v9 03/30] t/helper/fsmonitor-client: create stress test Jeff Hostetler via GitGitGadget
2022-05-26 21:46                 ` [PATCH v9 04/30] fsmonitor-settings: bare repos are incompatible with FSMonitor Jeff Hostetler via GitGitGadget
2022-05-26 21:46                 ` [PATCH v9 05/30] fsmonitor-settings: stub in Win32-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 06/30] fsmonitor-settings: VFS for Git virtual repos are incompatible Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 07/30] fsmonitor-settings: stub in macOS-specific incompatibility checking Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 08/30] fsmonitor-settings: remote repos on macOS are incompatible Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 09/30] fsmonitor-settings: remote repos on Windows " Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 10/30] fsmonitor-settings: NTFS and FAT32 on MacOS " Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 11/30] unpack-trees: initialize fsmonitor_has_run_once in o->result Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 12/30] fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 13/30] fsmonitor--daemon: cd out of worktree root Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 14/30] fsmonitor--daemon: prepare for adding health thread Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 15/30] fsmonitor--daemon: rename listener thread related variables Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 16/30] fsmonitor--daemon: stub in health thread Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 17/30] fsm-health-win32: add polling framework to monitor daemon health Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 18/30] fsm-health-win32: force shutdown daemon if worktree root moves Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 19/30] fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 20/30] fsmonitor: optimize processing of directory events Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 21/30] t7527: FSMonitor tests for directory moves Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 22/30] t/perf/p7527: add perf test for builtin FSMonitor Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 23/30] fsmonitor: never set CE_FSMONITOR_VALID on submodules Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 24/30] t7527: test FSMonitor on case insensitive+preserving file system Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 25/30] fsmonitor: on macOS also emit NFC spelling for NFD pathname Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 26/30] t/helper/hexdump: add helper to print hexdump of stdin Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 27/30] t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 28/30] t7527: test Unicode NFC/NFD handling on MacOS Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 29/30] fsmonitor--daemon: allow --super-prefix argument Jeff Hostetler via GitGitGadget
2022-05-26 21:47                 ` [PATCH v9 30/30] t7527: improve implicit shutdown testing in fsmonitor--daemon Jeff Hostetler via GitGitGadget
2022-06-02  9:56                 ` [PATCH v9 00/30] Builtin FSMonitor Part 3 Johannes Schindelin
2022-03-28 14:37     ` [PATCH v3 00/27] " Torsten =?unknown-8bit?Q?B=C3=B6gershausen?=

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=pull.1143.v6.git.1650662994.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=avarab@gmail.com \
    --cc=bagasdotme@gmail.com \
    --cc=derrickstolee@github.com \
    --cc=git@jeffhostetler.com \
    --cc=git@vger.kernel.org \
    --cc=jeffhost@microsoft.com \
    --cc=rsbecker@nexbridge.com \
    --cc=tboegi@web.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).