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, "Jeff Hostetler" <jeffhost@microsoft.com>
Subject: [PATCH v3 00/27] Builtin FSMonitor Part 3
Date: Tue, 22 Mar 2022 18:22:33 +0000 [thread overview]
Message-ID: <pull.1143.v3.git.1647973380.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1143.v2.git.1646777727.gitgitgadget@gmail.com>
Here is V3 of Part 3 of my builtin FSMonitor series.
I have addressed all of the feedback from Part 3 V2 and the mess that was
Part 2.5 (now obsolete). This version builds upon the new V7 of Part 2
(which includes 2.5).
This version includes: (1) fixup a few more "_()" calls in die() and error()
messages. (2) refactor how fsmonitor incompatibility error messages are
formatted (3) make use of new "start_daemon()" function t7527 to reduce
duplicated code. (4) improve documentation around Unicode/UTF8 testing on
MacOS.
Here is the range-diff from V2 to V3:
1: 34619e0652 ! 1: 779a15b38e fsm-listen-win32: handle shortnames
@@ compat/fsmonitor/fsm-listen-win32.c: static int normalize_path_in_utf8(FILE_NOTI
@@ compat/fsmonitor/fsm-listen-win32.c: static int normalize_path_in_utf8(FILE_NOTIFY_INFORMATION *info,
goto normalize;
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
- error("[GLE %ld] could not convert path to UTF-8: '%.*ls'",
+ error(_("[GLE %ld] could not convert path to UTF-8: '%.*ls'"),
- GetLastError(),
- (int)(info->FileNameLength / sizeof(WCHAR)),
- info->FileName);
@@ t/t7527-builtin-fsmonitor.sh: test_expect_success 'implicit daemon stop (rename
+
+ git init test_implicit_1s &&
+
-+ start_daemon test_implicit_1s &&
++ start_daemon -C test_implicit_1s &&
+
+ # renaming the .git directory will implicitly stop the daemon.
+ # this moves {.git, GIT~1} to {.gitxyz, GITXYZ~1}.
@@ t/t7527-builtin-fsmonitor.sh: test_expect_success 'implicit daemon stop (rename
+ test_path_is_file test_implicit_1s2/GIT~1 &&
+ test_path_is_dir test_implicit_1s2/GIT~2 &&
+
-+ start_daemon test_implicit_1s2 &&
++ start_daemon -C test_implicit_1s2 &&
+
+ # renaming the .git directory will implicitly stop the daemon.
+ # the rename-from FS Event will contain the shortname.
2: 3a0f30b849 ! 2: 11d4a17b69 t7527: test FSMonitor on repos with Unicode root paths
@@ t/t7527-builtin-fsmonitor.sh: do
+ git -C "$u" add file1 &&
+ git -C "$u" config core.fsmonitor true &&
+
-+ start_daemon "$u" &&
++ start_daemon -C "$u" &&
+ git -C "$u" status >actual &&
+ grep "new file: file1" actual
+ '
3: 87d1c0b6f2 ! 3: 901fa32f6e t/helper/fsmonitor-client: create stress test
@@ t/helper/test-fsmonitor-client.c: static int do_send_flush(void)
+ int nr_requests = 1;
const char * const fsmonitor_client_usage[] = {
- N_("test-helper fsmonitor-client query [<token>]"),
- N_("test-helper fsmonitor-client flush"),
-+ N_("test-helper fsmonitor-client hammer [<token>] [<threads>] [<requests>]"),
+ "test-tool fsmonitor-client query [<token>]",
+ "test-tool fsmonitor-client flush",
++ "test-tool fsmonitor-client hammer [<token>] [<threads>] [<requests>]",
NULL,
};
struct option options[] = {
- OPT_STRING(0, "token", &token, N_("token"),
- N_("command token to send to the server")),
+ OPT_STRING(0, "token", &token, "token",
+ "command token to send to the server"),
+
-+ OPT_INTEGER(0, "threads", &nr_threads, N_("number of client threads")),
-+ OPT_INTEGER(0, "requests", &nr_requests, N_("number of requests per thread")),
++ OPT_INTEGER(0, "threads", &nr_threads, "number of client threads"),
++ OPT_INTEGER(0, "requests", &nr_requests, "number of requests per thread"),
+
OPT_END()
};
4: 8c4f90ae4f ! 4: a8f0b2a525 fsmonitor-settings: bare repos are incompatible with FSMonitor
@@ builtin/fsmonitor--daemon.c: int cmd_fsmonitor__daemon(int argc, const char **ar
+ prepare_repo_settings(the_repository);
+ fsm_settings__set_ipc(the_repository);
+
-+ if (fsm_settings__get_mode(the_repository) == FSMONITOR_MODE_INCOMPATIBLE) {
-+ const char *msg = fsm_settings__get_reason_msg(the_repository);
-+
-+ return error("%s '%s'", msg ? msg : "???", xgetcwd());
-+ }
++ if (fsm_settings__error_if_incompatible(the_repository))
++ return 1;
+
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);
+
-+ if (fsm_mode == FSMONITOR_MODE_INCOMPATIBLE) {
-+ const char *msg = fsm_settings__get_reason_msg(r);
-+
-+ return error("%s '%s'", msg ? msg : "???", xgetcwd());
-+ }
++ if (fsm_settings__error_if_incompatible(the_repository))
++ return 1;
+
if (fsm_mode == FSMONITOR_MODE_DISABLED) {
- advise(_("core.fsmonitor is unset; "
- "set it if you really want to "
+ warning(_("core.fsmonitor is unset; "
+ "set it if you really want to "
## fsmonitor-settings.c ##
@@
@@ fsmonitor-settings.c
static void lookup_fsmonitor_settings(struct repository *r)
{
struct fsmonitor_settings *s;
+@@ fsmonitor-settings.c: static void lookup_fsmonitor_settings(struct repository *r)
+
+ CALLOC_ARRAY(s, 1);
+ s->mode = FSMONITOR_MODE_DISABLED;
++ s->reason = FSMONITOR_REASON_OK;
+
+ r->settings.fsmonitor = s;
+
@@ fsmonitor-settings.c: void fsm_settings__set_ipc(struct repository *r)
lookup_fsmonitor_settings(r);
@@ fsmonitor-settings.c: void fsm_settings__set_disabled(struct repository *r)
+ return r->settings.fsmonitor->reason;
+}
+
-+const char *fsm_settings__get_reason_msg(struct repository *r)
++int fsm_settings__error_if_incompatible(struct repository *r)
+{
+ enum fsmonitor_reason reason = fsm_settings__get_reason(r);
+
+ switch (reason) {
+ case FSMONITOR_REASON_OK:
-+ return NULL;
++ return 0;
+
+ case FSMONITOR_REASON_BARE:
-+ return _("bare repos are incompatible with fsmonitor");
++ error(_("bare repository '%s' is incompatible with fsmonitor"),
++ xgetcwd());
++ return 1;
+ }
+
-+ BUG("Unhandled case in fsm_settings__get_reason_msg '%d'",
++ BUG("Unhandled case in fsm_settings__error_if_incompatible: '%d'",
+ reason);
+}
@@ fsmonitor-settings.h: void fsm_settings__set_disabled(struct repository *r);
const char *fsm_settings__get_hook_path(struct repository *r);
+enum fsmonitor_reason fsm_settings__get_reason(struct repository *r);
-+const char *fsm_settings__get_reason_msg(struct repository *r);
++int fsm_settings__error_if_incompatible(struct repository *r);
+
struct fsmonitor_settings;
@@ t/t7519-status-fsmonitor.sh: test_lazy_prereq UNTRACKED_CACHE '
+ test_must_fail \
+ git -C ./bare-clone -c core.fsmonitor=foo \
+ update-index --fsmonitor 2>actual &&
-+ grep "bare repos are incompatible with fsmonitor" actual &&
++ grep "bare repository .* is incompatible with fsmonitor" actual &&
+
+ test_must_fail \
+ git -C ./bare-clone -c core.fsmonitor=true \
+ update-index --fsmonitor 2>actual &&
-+ grep "bare repos are incompatible with fsmonitor" actual
++ grep "bare repository .* is incompatible with fsmonitor" actual
+'
+
+test_expect_success FSMONITOR_DAEMON 'run fsmonitor-daemon in bare repo' '
+ test_when_finished "rm -rf ./bare-clone actual" &&
+ git init --bare bare-clone &&
+ test_must_fail git -C ./bare-clone fsmonitor--daemon run 2>actual &&
-+ grep "bare repos are incompatible with fsmonitor" actual
++ grep "bare repository .* is incompatible with fsmonitor" actual
+'
+
test_expect_success 'setup' '
5: 6329328d18 ! 5: e32a8a7ea7 fsmonitor-settings: stub in platform-specific incompatibility checking
@@ Metadata
Author: Jeff Hostetler <jeffhost@microsoft.com>
## Commit message ##
- fsmonitor-settings: stub in platform-specific incompatibility checking
+ fsmonitor-settings: stub in Win32-specific incompatibility checking
Extend generic incompatibility checkout with platform-specific
mechanism. Stub in Win32 version.
@@ fsmonitor-settings.c: static int check_for_incompatible(struct repository *r)
## fsmonitor-settings.h ##
-@@ fsmonitor-settings.h: const char *fsm_settings__get_reason_msg(struct repository *r);
+@@ fsmonitor-settings.h: int fsm_settings__error_if_incompatible(struct repository *r);
struct fsmonitor_settings;
6: fa9e86e7de ! 6: 5546339d96 fsmonitor-settings: VFS for Git virtual repos are incompatible
@@ compat/fsmonitor/fsm-settings-win32.c
}
## fsmonitor-settings.c ##
-@@ fsmonitor-settings.c: const char *fsm_settings__get_reason_msg(struct repository *r)
-
- case FSMONITOR_REASON_BARE:
- return _("bare repos are incompatible with fsmonitor");
+@@ fsmonitor-settings.c: int fsm_settings__error_if_incompatible(struct repository *r)
+ error(_("bare repository '%s' is incompatible with fsmonitor"),
+ xgetcwd());
+ return 1;
+
+ case FSMONITOR_REASON_VFS4GIT:
-+ return _("virtual repos are incompatible with fsmonitor");
++ error(_("virtual repository '%s' is incompatible with fsmonitor"),
++ r->worktree);
++ return 1;
}
- BUG("Unhandled case in fsm_settings__get_reason_msg '%d'",
+ BUG("Unhandled case in fsm_settings__error_if_incompatible: '%d'",
## fsmonitor-settings.h ##
@@ fsmonitor-settings.h: enum fsmonitor_mode {
@@ fsmonitor-settings.h: enum fsmonitor_mode {
## t/t7519-status-fsmonitor.sh ##
@@ t/t7519-status-fsmonitor.sh: test_expect_success FSMONITOR_DAEMON 'run fsmonitor-daemon in bare repo' '
- grep "bare repos are incompatible with fsmonitor" actual
+ grep "bare repository .* is incompatible with fsmonitor" actual
'
+test_expect_success MINGW,FSMONITOR_DAEMON 'run fsmonitor-daemon in virtual repo' '
@@ t/t7519-status-fsmonitor.sh: test_expect_success FSMONITOR_DAEMON 'run fsmonitor
+ test_must_fail git -C ./fake-virtual-clone \
+ -c core.virtualfilesystem=true \
+ fsmonitor--daemon run 2>actual &&
-+ grep "virtual repos are incompatible with fsmonitor" actual
++ grep "virtual repository .* is incompatible with fsmonitor" actual
+'
+
test_expect_success 'setup' '
7: c180241041 = 7: 1d2877efda fsmonitor-settings: stub in macOS-specific incompatibility checking
8: e3bfa0bd69 ! 8: 06d7f18676 fsmonitor-settings: remote repos on macOS are incompatible
@@ compat/fsmonitor/fsm-settings-darwin.c
}
## fsmonitor-settings.c ##
-@@ fsmonitor-settings.c: const char *fsm_settings__get_reason_msg(struct repository *r)
- case FSMONITOR_REASON_BARE:
- return _("bare repos are incompatible with fsmonitor");
+@@ fsmonitor-settings.c: int fsm_settings__error_if_incompatible(struct repository *r)
+ xgetcwd());
+ return 1;
+ case FSMONITOR_REASON_ERROR:
-+ return _("repo incompatible with fsmonitor due to errors");
++ error(_("repository '%s' is incompatible with fsmonitor due to errors"),
++ r->worktree);
++ return 1;
+
+ case FSMONITOR_REASON_REMOTE:
-+ return _("remote repos are incompatible with fsmonitor");
++ error(_("remote repository '%s' is incompatible with fsmonitor"),
++ r->worktree);
++ return 1;
+
case FSMONITOR_REASON_VFS4GIT:
- return _("virtual repos are incompatible with fsmonitor");
- }
+ error(_("virtual repository '%s' is incompatible with fsmonitor"),
+ r->worktree);
## fsmonitor-settings.h ##
@@ fsmonitor-settings.h: enum fsmonitor_mode {
9: e32da3118f = 9: 5ca97f482d fsmonitor-settings: remote repos on Windows are incompatible
27: e3e01677d9 ! 10: 6715143724 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: const char *fsm_settings__get_reason_msg(struct repository *r)
-
- case FSMONITOR_REASON_VFS4GIT:
- return _("virtual repos are incompatible with fsmonitor");
+@@ fsmonitor-settings.c: int fsm_settings__error_if_incompatible(struct repository *r)
+ error(_("virtual repository '%s' is incompatible with fsmonitor"),
+ r->worktree);
+ return 1;
+
+ case FSMONITOR_REASON_NOSOCKETS:
-+ return _("repo filesystem does not support Unix sockets");
++ error(_("repository '%s' is incompatible with fsmonitor due to lack of Unix sockets"),
++ r->worktree);
++ return 1;
}
- BUG("Unhandled case in fsm_settings__get_reason_msg '%d'",
+ BUG("Unhandled case in fsm_settings__error_if_incompatible: '%d'",
## fsmonitor-settings.h ##
@@ fsmonitor-settings.h: enum fsmonitor_reason {
10: f63de4eda3 = 11: ed1f723130 unpack-trees: initialize fsmonitor_has_run_once in o->result
11: fe305f5f28 = 12: 35c77b854b fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS
12: c8f3e251b1 ! 13: a5affb359c fsmonitor--daemon: cd out of worktree root
@@ builtin/fsmonitor--daemon.c: static int fsmonitor_run_daemon(void)
+ */
+ home = getenv("HOME");
+ if (home && *home && chdir(home))
-+ die_errno("could not cd home '%s'", home);
++ die_errno(_("could not cd home '%s'"), home);
+
err = fsmonitor_run_daemon_1(&state);
@@ compat/fsmonitor/fsm-listen-win32.c: static int recv_rdcw_watch(struct one_watch
+ * Shutdown if we get any error.
*/
- error("GetOverlappedResult failed on '%s' [GLE %ld]",
+ error(_("GetOverlappedResult failed on '%s' [GLE %ld]"),
## fsmonitor--daemon.h ##
@@ fsmonitor--daemon.h: struct fsmonitor_daemon_state {
13: 71673be2da = 14: 087af5dfb6 fsmonitor--daemon: prepare for adding health thread
14: 5387baaf5d ! 15: e78eb20c1b fsmonitor--daemon: rename listener thread related variables
@@ builtin/fsmonitor--daemon.c: static int fsmonitor_run_daemon(void)
/* Prepare to (recursively) watch the <worktree-root> directory. */
## compat/fsmonitor/fsm-listen-darwin.c ##
-@@ compat/fsmonitor/fsm-listen-darwin.c: void FSEventStreamRelease(FSEventStreamRef stream);
+@@
#include "fsm-listen.h"
#include "fsmonitor--daemon.h"
@@ compat/fsmonitor/fsm-listen-darwin.c: int fsm_listen__ctor(struct fsmonitor_daem
NULL, state->path_worktree_watch.buf, kCFStringEncodingUTF8);
@@ compat/fsmonitor/fsm-listen-darwin.c: int fsm_listen__ctor(struct fsmonitor_daemon_state *state)
failed:
- error("Unable to create FSEventStream.");
+ error(_("Unable to create FSEventStream."));
- FREE_AND_NULL(state->backend_data);
+ FREE_AND_NULL(state->listen_data);
15: f78e4ad87c = 16: 301fff5296 fsmonitor--daemon: stub in health thread
16: bb72f911a0 = 17: c6b5bdd25e fsm-health-win32: add polling framework to monitor daemon health
17: baf8c031a9 ! 18: 13d11713a8 fsm-health-win32: force shutdown daemon if worktree root moves
@@ compat/fsmonitor/fsm-health-win32.c: struct fsm_health_data
+ return 0;
+
+ default:
-+ die("unhandled case in 'has_worktree_moved': %d",
++ die(_("unhandled case in 'has_worktree_moved': %d"),
+ (int)ctx);
+ }
+
18: 796b659139 = 19: 01c1a38c46 fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed
19: 2459192087 = 20: 0f0a5b5ca1 fsmonitor: optimize processing of directory events
20: 06a3241385 ! 21: d8218d197a t7527: FSMonitor tests for directory moves
@@ t/t7527-builtin-fsmonitor.sh: test_expect_success 'setup' '
git -c core.fsmonitor=false add . &&
test_tick &&
git -c core.fsmonitor=false commit -m initial &&
-@@ t/t7527-builtin-fsmonitor.sh: verify_status () {
- echo HELLO AFTER
+@@ t/t7527-builtin-fsmonitor.sh: directory_to_file () {
+ echo 1 >dir1
}
+move_directory_contents_deeper() {
-+ mkdir T1/_new_
++ mkdir T1/_new_ &&
+ mv T1/[A-Z]* T1/_new_
+}
+
21: 4b59013cad = 22: 79da369dcc t/perf/p7527: add perf test for builtin FSMonitor
22: 524d449ed6 ! 23: 4ab4306ada fsmonitor: never set CE_FSMONITOR_VALID on submodules
@@ t/t7527-builtin-fsmonitor.sh: do
+ git -C super submodule add ../sub ./dir_1/dir_2/sub &&
+ git -C super commit -m "add sub" &&
+
-+ start_daemon super &&
++ start_daemon -C super &&
+ git -C super config core.fsmonitor true &&
+ git -C super update-index --fsmonitor &&
+ git -C super status &&
23: c7264decaf ! 24: 5d0fa19929 t7527: test FSMonitor on case insensitive+preserving file system
@@ t/t7527-builtin-fsmonitor.sh: test_expect_success "Submodule" '
+# test_when_finished "stop_daemon_delete_repo test_insensitive" &&
+
+ git init test_insensitive &&
-+ (
-+ GIT_TRACE_FSMONITOR="$(pwd)/insensitive.trace" &&
-+ export GIT_TRACE_FSMONITOR &&
+
-+ start_daemon test_insensitive
-+ ) &&
++ start_daemon -C test_insensitive -tf "$PWD/insensitive.trace" &&
+
+ mkdir -p test_insensitive/abc/def &&
+ echo xyz >test_insensitive/ABC/DEF/xyz &&
24: 95b9d4210d = 25: 264397e8bd fsmonitor: on macOS also emit NFC spelling for NFD pathname
25: 5a0c1b7a28 ! 26: e6b621fb76 t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd
@@ t/lib-unicode-nfc-nfd.sh (new)
+ ls | od -t x1 | grep "64 *5f *cf *89 *cc *94 *cd *82"
+'
+
-+if test $unicode_debug = 1
++# The following is for debugging. I found it useful when
++# trying to understand the various (OS, FS) quirks WRT
++# Unicode and how composition/decomposition is handled.
++# For example, when trying to understand how (macOS, APFS)
++# and (macOS, HFS) and (macOS, FAT32) compare.
++#
++# It is rather noisy, so it is disabled by default.
++#
++if test "$unicode_debug" = "true"
+then
+ if test_have_prereq UNICODE_COMPOSITION_SENSITIVE
+ then
26: a45c1fd300 ! 27: aa96a849ce t7527: test Unicode NFC/NFD handling on MacOS
@@ t/t7527-builtin-fsmonitor.sh: test_expect_success CASE_INSENSITIVE_FS 'case inse
egrep "^event: abc/def/xyz$" ./insensitive.trace
'
-+unicode_debug=0
++# The variable "unicode_debug" is defined in the following library
++# script to dump information about how the (OS, FS) handles Unicode
++# composition. Uncomment the following line if you want to enable it.
++#
++# unicode_debug=true
++
+. "$TEST_DIRECTORY/lib-unicode-nfc-nfd.sh"
+
+# See if the OS or filesystem does NFC/NFD aliasing/munging.
@@ t/t7527-builtin-fsmonitor.sh: test_expect_success CASE_INSENSITIVE_FS 'case inse
+ test_when_finished "stop_daemon_delete_repo test_unicode" &&
+
+ git init test_unicode &&
-+ (
-+ GIT_TRACE_FSMONITOR="$(pwd)/unicode.trace" &&
-+ export GIT_TRACE_FSMONITOR &&
+
-+ start_daemon test_unicode
-+ ) &&
++ start_daemon -C test_unicode -tf "$PWD/unicode.trace" &&
+
+ # Create a directory using an NFC spelling.
+ #
Jeff Hostetler (27):
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
Makefile | 19 +-
builtin/fsmonitor--daemon.c | 104 ++++++-
builtin/update-index.c | 4 +
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 | 92 ++++++
fsmonitor-settings.h | 29 ++
fsmonitor.c | 73 ++++-
fsmonitor.h | 11 +
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 | 311 +++++++++++++++++++
unpack-trees.c | 1 +
24 files changed, 2218 insertions(+), 124 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: e6cf84dc8eb4933220187849b84e5cb96cda185f
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1143%2Fjeffhostetler%2Fbuiltin-fsmonitor-part3-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1143/jeffhostetler/builtin-fsmonitor-part3-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/1143
Range-diff vs v2:
1: 34619e0652b ! 1: 779a15b38e8 fsm-listen-win32: handle shortnames
@@ compat/fsmonitor/fsm-listen-win32.c: static int normalize_path_in_utf8(FILE_NOTI
@@ compat/fsmonitor/fsm-listen-win32.c: static int normalize_path_in_utf8(FILE_NOTIFY_INFORMATION *info,
goto normalize;
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
- error("[GLE %ld] could not convert path to UTF-8: '%.*ls'",
+ error(_("[GLE %ld] could not convert path to UTF-8: '%.*ls'"),
- GetLastError(),
- (int)(info->FileNameLength / sizeof(WCHAR)),
- info->FileName);
@@ t/t7527-builtin-fsmonitor.sh: test_expect_success 'implicit daemon stop (rename
+
+ git init test_implicit_1s &&
+
-+ start_daemon test_implicit_1s &&
++ start_daemon -C test_implicit_1s &&
+
+ # renaming the .git directory will implicitly stop the daemon.
+ # this moves {.git, GIT~1} to {.gitxyz, GITXYZ~1}.
@@ t/t7527-builtin-fsmonitor.sh: test_expect_success 'implicit daemon stop (rename
+ test_path_is_file test_implicit_1s2/GIT~1 &&
+ test_path_is_dir test_implicit_1s2/GIT~2 &&
+
-+ start_daemon test_implicit_1s2 &&
++ start_daemon -C test_implicit_1s2 &&
+
+ # renaming the .git directory will implicitly stop the daemon.
+ # the rename-from FS Event will contain the shortname.
2: 3a0f30b849a ! 2: 11d4a17b692 t7527: test FSMonitor on repos with Unicode root paths
@@ t/t7527-builtin-fsmonitor.sh: do
+ git -C "$u" add file1 &&
+ git -C "$u" config core.fsmonitor true &&
+
-+ start_daemon "$u" &&
++ start_daemon -C "$u" &&
+ git -C "$u" status >actual &&
+ grep "new file: file1" actual
+ '
3: 87d1c0b6f2a ! 3: 901fa32f6ea t/helper/fsmonitor-client: create stress test
@@ t/helper/test-fsmonitor-client.c: static int do_send_flush(void)
+ int nr_requests = 1;
const char * const fsmonitor_client_usage[] = {
- N_("test-helper fsmonitor-client query [<token>]"),
- N_("test-helper fsmonitor-client flush"),
-+ N_("test-helper fsmonitor-client hammer [<token>] [<threads>] [<requests>]"),
+ "test-tool fsmonitor-client query [<token>]",
+ "test-tool fsmonitor-client flush",
++ "test-tool fsmonitor-client hammer [<token>] [<threads>] [<requests>]",
NULL,
};
struct option options[] = {
- OPT_STRING(0, "token", &token, N_("token"),
- N_("command token to send to the server")),
+ OPT_STRING(0, "token", &token, "token",
+ "command token to send to the server"),
+
-+ OPT_INTEGER(0, "threads", &nr_threads, N_("number of client threads")),
-+ OPT_INTEGER(0, "requests", &nr_requests, N_("number of requests per thread")),
++ OPT_INTEGER(0, "threads", &nr_threads, "number of client threads"),
++ OPT_INTEGER(0, "requests", &nr_requests, "number of requests per thread"),
+
OPT_END()
};
4: 8c4f90ae4fd ! 4: a8f0b2a5256 fsmonitor-settings: bare repos are incompatible with FSMonitor
@@ builtin/fsmonitor--daemon.c: int cmd_fsmonitor__daemon(int argc, const char **ar
+ prepare_repo_settings(the_repository);
+ fsm_settings__set_ipc(the_repository);
+
-+ if (fsm_settings__get_mode(the_repository) == FSMONITOR_MODE_INCOMPATIBLE) {
-+ const char *msg = fsm_settings__get_reason_msg(the_repository);
-+
-+ return error("%s '%s'", msg ? msg : "???", xgetcwd());
-+ }
++ if (fsm_settings__error_if_incompatible(the_repository))
++ return 1;
+
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);
+
-+ if (fsm_mode == FSMONITOR_MODE_INCOMPATIBLE) {
-+ const char *msg = fsm_settings__get_reason_msg(r);
-+
-+ return error("%s '%s'", msg ? msg : "???", xgetcwd());
-+ }
++ if (fsm_settings__error_if_incompatible(the_repository))
++ return 1;
+
if (fsm_mode == FSMONITOR_MODE_DISABLED) {
- advise(_("core.fsmonitor is unset; "
- "set it if you really want to "
+ warning(_("core.fsmonitor is unset; "
+ "set it if you really want to "
## fsmonitor-settings.c ##
@@
@@ fsmonitor-settings.c
static void lookup_fsmonitor_settings(struct repository *r)
{
struct fsmonitor_settings *s;
+@@ fsmonitor-settings.c: static void lookup_fsmonitor_settings(struct repository *r)
+
+ CALLOC_ARRAY(s, 1);
+ s->mode = FSMONITOR_MODE_DISABLED;
++ s->reason = FSMONITOR_REASON_OK;
+
+ r->settings.fsmonitor = s;
+
@@ fsmonitor-settings.c: void fsm_settings__set_ipc(struct repository *r)
lookup_fsmonitor_settings(r);
@@ fsmonitor-settings.c: void fsm_settings__set_disabled(struct repository *r)
+ return r->settings.fsmonitor->reason;
+}
+
-+const char *fsm_settings__get_reason_msg(struct repository *r)
++int fsm_settings__error_if_incompatible(struct repository *r)
+{
+ enum fsmonitor_reason reason = fsm_settings__get_reason(r);
+
+ switch (reason) {
+ case FSMONITOR_REASON_OK:
-+ return NULL;
++ return 0;
+
+ case FSMONITOR_REASON_BARE:
-+ return _("bare repos are incompatible with fsmonitor");
++ error(_("bare repository '%s' is incompatible with fsmonitor"),
++ xgetcwd());
++ return 1;
+ }
+
-+ BUG("Unhandled case in fsm_settings__get_reason_msg '%d'",
++ BUG("Unhandled case in fsm_settings__error_if_incompatible: '%d'",
+ reason);
+}
@@ fsmonitor-settings.h: void fsm_settings__set_disabled(struct repository *r);
const char *fsm_settings__get_hook_path(struct repository *r);
+enum fsmonitor_reason fsm_settings__get_reason(struct repository *r);
-+const char *fsm_settings__get_reason_msg(struct repository *r);
++int fsm_settings__error_if_incompatible(struct repository *r);
+
struct fsmonitor_settings;
@@ t/t7519-status-fsmonitor.sh: test_lazy_prereq UNTRACKED_CACHE '
+ test_must_fail \
+ git -C ./bare-clone -c core.fsmonitor=foo \
+ update-index --fsmonitor 2>actual &&
-+ grep "bare repos are incompatible with fsmonitor" actual &&
++ grep "bare repository .* is incompatible with fsmonitor" actual &&
+
+ test_must_fail \
+ git -C ./bare-clone -c core.fsmonitor=true \
+ update-index --fsmonitor 2>actual &&
-+ grep "bare repos are incompatible with fsmonitor" actual
++ grep "bare repository .* is incompatible with fsmonitor" actual
+'
+
+test_expect_success FSMONITOR_DAEMON 'run fsmonitor-daemon in bare repo' '
+ test_when_finished "rm -rf ./bare-clone actual" &&
+ git init --bare bare-clone &&
+ test_must_fail git -C ./bare-clone fsmonitor--daemon run 2>actual &&
-+ grep "bare repos are incompatible with fsmonitor" actual
++ grep "bare repository .* is incompatible with fsmonitor" actual
+'
+
test_expect_success 'setup' '
5: 6329328d185 ! 5: e32a8a7ea7a fsmonitor-settings: stub in platform-specific incompatibility checking
@@ Metadata
Author: Jeff Hostetler <jeffhost@microsoft.com>
## Commit message ##
- fsmonitor-settings: stub in platform-specific incompatibility checking
+ fsmonitor-settings: stub in Win32-specific incompatibility checking
Extend generic incompatibility checkout with platform-specific
mechanism. Stub in Win32 version.
@@ fsmonitor-settings.c: static int check_for_incompatible(struct repository *r)
## fsmonitor-settings.h ##
-@@ fsmonitor-settings.h: const char *fsm_settings__get_reason_msg(struct repository *r);
+@@ fsmonitor-settings.h: int fsm_settings__error_if_incompatible(struct repository *r);
struct fsmonitor_settings;
6: fa9e86e7de7 ! 6: 5546339d963 fsmonitor-settings: VFS for Git virtual repos are incompatible
@@ compat/fsmonitor/fsm-settings-win32.c
}
## fsmonitor-settings.c ##
-@@ fsmonitor-settings.c: const char *fsm_settings__get_reason_msg(struct repository *r)
-
- case FSMONITOR_REASON_BARE:
- return _("bare repos are incompatible with fsmonitor");
+@@ fsmonitor-settings.c: int fsm_settings__error_if_incompatible(struct repository *r)
+ error(_("bare repository '%s' is incompatible with fsmonitor"),
+ xgetcwd());
+ return 1;
+
+ case FSMONITOR_REASON_VFS4GIT:
-+ return _("virtual repos are incompatible with fsmonitor");
++ error(_("virtual repository '%s' is incompatible with fsmonitor"),
++ r->worktree);
++ return 1;
}
- BUG("Unhandled case in fsm_settings__get_reason_msg '%d'",
+ BUG("Unhandled case in fsm_settings__error_if_incompatible: '%d'",
## fsmonitor-settings.h ##
@@ fsmonitor-settings.h: enum fsmonitor_mode {
@@ fsmonitor-settings.h: enum fsmonitor_mode {
## t/t7519-status-fsmonitor.sh ##
@@ t/t7519-status-fsmonitor.sh: test_expect_success FSMONITOR_DAEMON 'run fsmonitor-daemon in bare repo' '
- grep "bare repos are incompatible with fsmonitor" actual
+ grep "bare repository .* is incompatible with fsmonitor" actual
'
+test_expect_success MINGW,FSMONITOR_DAEMON 'run fsmonitor-daemon in virtual repo' '
@@ t/t7519-status-fsmonitor.sh: test_expect_success FSMONITOR_DAEMON 'run fsmonitor
+ test_must_fail git -C ./fake-virtual-clone \
+ -c core.virtualfilesystem=true \
+ fsmonitor--daemon run 2>actual &&
-+ grep "virtual repos are incompatible with fsmonitor" actual
++ grep "virtual repository .* is incompatible with fsmonitor" actual
+'
+
test_expect_success 'setup' '
7: c1802410410 = 7: 1d2877efda0 fsmonitor-settings: stub in macOS-specific incompatibility checking
8: e3bfa0bd69d ! 8: 06d7f18676d fsmonitor-settings: remote repos on macOS are incompatible
@@ compat/fsmonitor/fsm-settings-darwin.c
}
## fsmonitor-settings.c ##
-@@ fsmonitor-settings.c: const char *fsm_settings__get_reason_msg(struct repository *r)
- case FSMONITOR_REASON_BARE:
- return _("bare repos are incompatible with fsmonitor");
+@@ fsmonitor-settings.c: int fsm_settings__error_if_incompatible(struct repository *r)
+ xgetcwd());
+ return 1;
+ case FSMONITOR_REASON_ERROR:
-+ return _("repo incompatible with fsmonitor due to errors");
++ error(_("repository '%s' is incompatible with fsmonitor due to errors"),
++ r->worktree);
++ return 1;
+
+ case FSMONITOR_REASON_REMOTE:
-+ return _("remote repos are incompatible with fsmonitor");
++ error(_("remote repository '%s' is incompatible with fsmonitor"),
++ r->worktree);
++ return 1;
+
case FSMONITOR_REASON_VFS4GIT:
- return _("virtual repos are incompatible with fsmonitor");
- }
+ error(_("virtual repository '%s' is incompatible with fsmonitor"),
+ r->worktree);
## fsmonitor-settings.h ##
@@ fsmonitor-settings.h: enum fsmonitor_mode {
9: e32da3118fb = 9: 5ca97f482d0 fsmonitor-settings: remote repos on Windows are incompatible
27: e3e01677d93 ! 10: 67151437245 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: const char *fsm_settings__get_reason_msg(struct repository *r)
-
- case FSMONITOR_REASON_VFS4GIT:
- return _("virtual repos are incompatible with fsmonitor");
+@@ fsmonitor-settings.c: int fsm_settings__error_if_incompatible(struct repository *r)
+ error(_("virtual repository '%s' is incompatible with fsmonitor"),
+ r->worktree);
+ return 1;
+
+ case FSMONITOR_REASON_NOSOCKETS:
-+ return _("repo filesystem does not support Unix sockets");
++ error(_("repository '%s' is incompatible with fsmonitor due to lack of Unix sockets"),
++ r->worktree);
++ return 1;
}
- BUG("Unhandled case in fsm_settings__get_reason_msg '%d'",
+ BUG("Unhandled case in fsm_settings__error_if_incompatible: '%d'",
## fsmonitor-settings.h ##
@@ fsmonitor-settings.h: enum fsmonitor_reason {
10: f63de4eda31 = 11: ed1f7231309 unpack-trees: initialize fsmonitor_has_run_once in o->result
11: fe305f5f287 = 12: 35c77b854bd fsm-listen-darwin: ignore FSEvents caused by xattr changes on macOS
12: c8f3e251b1f ! 13: a5affb359c4 fsmonitor--daemon: cd out of worktree root
@@ builtin/fsmonitor--daemon.c: static int fsmonitor_run_daemon(void)
+ */
+ home = getenv("HOME");
+ if (home && *home && chdir(home))
-+ die_errno("could not cd home '%s'", home);
++ die_errno(_("could not cd home '%s'"), home);
+
err = fsmonitor_run_daemon_1(&state);
@@ compat/fsmonitor/fsm-listen-win32.c: static int recv_rdcw_watch(struct one_watch
+ * Shutdown if we get any error.
*/
- error("GetOverlappedResult failed on '%s' [GLE %ld]",
+ error(_("GetOverlappedResult failed on '%s' [GLE %ld]"),
## fsmonitor--daemon.h ##
@@ fsmonitor--daemon.h: struct fsmonitor_daemon_state {
13: 71673be2da5 = 14: 087af5dfb63 fsmonitor--daemon: prepare for adding health thread
14: 5387baaf5d7 ! 15: e78eb20c1bf fsmonitor--daemon: rename listener thread related variables
@@ builtin/fsmonitor--daemon.c: static int fsmonitor_run_daemon(void)
/* Prepare to (recursively) watch the <worktree-root> directory. */
## compat/fsmonitor/fsm-listen-darwin.c ##
-@@ compat/fsmonitor/fsm-listen-darwin.c: void FSEventStreamRelease(FSEventStreamRef stream);
+@@
#include "fsm-listen.h"
#include "fsmonitor--daemon.h"
@@ compat/fsmonitor/fsm-listen-darwin.c: int fsm_listen__ctor(struct fsmonitor_daem
NULL, state->path_worktree_watch.buf, kCFStringEncodingUTF8);
@@ compat/fsmonitor/fsm-listen-darwin.c: int fsm_listen__ctor(struct fsmonitor_daemon_state *state)
failed:
- error("Unable to create FSEventStream.");
+ error(_("Unable to create FSEventStream."));
- FREE_AND_NULL(state->backend_data);
+ FREE_AND_NULL(state->listen_data);
15: f78e4ad87c0 = 16: 301fff5296a fsmonitor--daemon: stub in health thread
16: bb72f911a05 = 17: c6b5bdd25e4 fsm-health-win32: add polling framework to monitor daemon health
17: baf8c031a97 ! 18: 13d11713a86 fsm-health-win32: force shutdown daemon if worktree root moves
@@ compat/fsmonitor/fsm-health-win32.c: struct fsm_health_data
+ return 0;
+
+ default:
-+ die("unhandled case in 'has_worktree_moved': %d",
++ die(_("unhandled case in 'has_worktree_moved': %d"),
+ (int)ctx);
+ }
+
18: 796b6591393 = 19: 01c1a38c462 fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed
19: 24591920878 = 20: 0f0a5b5ca16 fsmonitor: optimize processing of directory events
20: 06a32413854 ! 21: d8218d197ad t7527: FSMonitor tests for directory moves
@@ t/t7527-builtin-fsmonitor.sh: test_expect_success 'setup' '
git -c core.fsmonitor=false add . &&
test_tick &&
git -c core.fsmonitor=false commit -m initial &&
-@@ t/t7527-builtin-fsmonitor.sh: verify_status () {
- echo HELLO AFTER
+@@ t/t7527-builtin-fsmonitor.sh: directory_to_file () {
+ echo 1 >dir1
}
+move_directory_contents_deeper() {
-+ mkdir T1/_new_
++ mkdir T1/_new_ &&
+ mv T1/[A-Z]* T1/_new_
+}
+
21: 4b59013cadd = 22: 79da369dcce t/perf/p7527: add perf test for builtin FSMonitor
22: 524d449ed64 ! 23: 4ab4306adab fsmonitor: never set CE_FSMONITOR_VALID on submodules
@@ t/t7527-builtin-fsmonitor.sh: do
+ git -C super submodule add ../sub ./dir_1/dir_2/sub &&
+ git -C super commit -m "add sub" &&
+
-+ start_daemon super &&
++ start_daemon -C super &&
+ git -C super config core.fsmonitor true &&
+ git -C super update-index --fsmonitor &&
+ git -C super status &&
23: c7264decaf6 ! 24: 5d0fa19929d t7527: test FSMonitor on case insensitive+preserving file system
@@ t/t7527-builtin-fsmonitor.sh: test_expect_success "Submodule" '
+# test_when_finished "stop_daemon_delete_repo test_insensitive" &&
+
+ git init test_insensitive &&
-+ (
-+ GIT_TRACE_FSMONITOR="$(pwd)/insensitive.trace" &&
-+ export GIT_TRACE_FSMONITOR &&
+
-+ start_daemon test_insensitive
-+ ) &&
++ start_daemon -C test_insensitive -tf "$PWD/insensitive.trace" &&
+
+ mkdir -p test_insensitive/abc/def &&
+ echo xyz >test_insensitive/ABC/DEF/xyz &&
24: 95b9d4210d2 = 25: 264397e8bd4 fsmonitor: on macOS also emit NFC spelling for NFD pathname
25: 5a0c1b7a287 ! 26: e6b621fb766 t/lib-unicode-nfc-nfd: helper prereqs for testing unicode nfc/nfd
@@ t/lib-unicode-nfc-nfd.sh (new)
+ ls | od -t x1 | grep "64 *5f *cf *89 *cc *94 *cd *82"
+'
+
-+if test $unicode_debug = 1
++# The following is for debugging. I found it useful when
++# trying to understand the various (OS, FS) quirks WRT
++# Unicode and how composition/decomposition is handled.
++# For example, when trying to understand how (macOS, APFS)
++# and (macOS, HFS) and (macOS, FAT32) compare.
++#
++# It is rather noisy, so it is disabled by default.
++#
++if test "$unicode_debug" = "true"
+then
+ if test_have_prereq UNICODE_COMPOSITION_SENSITIVE
+ then
26: a45c1fd3000 ! 27: aa96a849ce4 t7527: test Unicode NFC/NFD handling on MacOS
@@ t/t7527-builtin-fsmonitor.sh: test_expect_success CASE_INSENSITIVE_FS 'case inse
egrep "^event: abc/def/xyz$" ./insensitive.trace
'
-+unicode_debug=0
++# The variable "unicode_debug" is defined in the following library
++# script to dump information about how the (OS, FS) handles Unicode
++# composition. Uncomment the following line if you want to enable it.
++#
++# unicode_debug=true
++
+. "$TEST_DIRECTORY/lib-unicode-nfc-nfd.sh"
+
+# See if the OS or filesystem does NFC/NFD aliasing/munging.
@@ t/t7527-builtin-fsmonitor.sh: test_expect_success CASE_INSENSITIVE_FS 'case inse
+ test_when_finished "stop_daemon_delete_repo test_unicode" &&
+
+ git init test_unicode &&
-+ (
-+ GIT_TRACE_FSMONITOR="$(pwd)/unicode.trace" &&
-+ export GIT_TRACE_FSMONITOR &&
+
-+ start_daemon test_unicode
-+ ) &&
++ start_daemon -C test_unicode -tf "$PWD/unicode.trace" &&
+
+ # Create a directory using an NFC spelling.
+ #
--
gitgitgadget
next prev parent reply other threads:[~2022-03-22 18:23 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 ` Jeff Hostetler via GitGitGadget [this message]
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 ` [PATCH v6 " Jeff Hostetler via GitGitGadget
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.v3.git.1647973380.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=avarab@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).