1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-10-28 04:49:43 +01:00

Merge branch 'kn/osx-fsmonitor-with-submodules-fix'

macOS with fsmonitor daemon can hang forever when a submodule is
involved, which has been corrected.

* kn/osx-fsmonitor-with-submodules-fix:
  fsmonitor OSX: fix hangs for submodules
This commit is contained in:
Junio C Hamano 2024-10-04 14:21:43 -07:00
commit 2ab53b59ef
2 changed files with 52 additions and 0 deletions

View file

@ -1314,6 +1314,7 @@ static int fsmonitor_run_daemon(void)
strbuf_reset(&state.path_gitdir_watch);
strbuf_addstr(&state.path_gitdir_watch,
absolute_path(repo_get_git_dir(the_repository)));
strbuf_strip_suffix(&state.path_gitdir_watch, "/.");
state.nr_paths_watching = 2;
}

View file

@ -907,6 +907,57 @@ test_expect_success "submodule absorbgitdirs implicitly starts daemon" '
test_subcommand git fsmonitor--daemon start <super-sub.trace
'
start_git_in_background () {
git "$@" &
git_pid=$!
git_pgid=$(ps -o pgid= -p $git_pid)
nr_tries_left=10
while true
do
if test $nr_tries_left -eq 0
then
kill -- -$git_pgid
exit 1
fi
sleep 1
nr_tries_left=$(($nr_tries_left - 1))
done >/dev/null 2>&1 &
watchdog_pid=$!
wait $git_pid
}
stop_git () {
while kill -0 -- -$git_pgid
do
kill -- -$git_pgid
sleep 1
done
}
stop_watchdog () {
while kill -0 $watchdog_pid
do
kill $watchdog_pid
sleep 1
done
}
test_expect_success !MINGW "submodule implicitly starts daemon by pull" '
test_atexit "stop_watchdog" &&
test_when_finished "stop_git; rm -rf cloned super 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" &&
git clone --recurse-submodules super cloned &&
git -C cloned/dir_1/dir_2/sub config core.fsmonitor true &&
set -m &&
start_git_in_background -C cloned pull --recurse-submodules
'
# On a case-insensitive file system, confirm that the daemon
# notices when the .git directory is moved/renamed/deleted
# regardless of how it is spelled in the FS event.