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:
commit
2ab53b59ef
2 changed files with 52 additions and 0 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue