]> git.ipfire.org Git - thirdparty/git.git/blobdiff - t/t7527-builtin-fsmonitor.sh
Merge branch 'js/diff-cached-fsmonitor-fix' into maint-2.42
[thirdparty/git.git] / t / t7527-builtin-fsmonitor.sh
index 1d4c0cbab8afa5bdd16a60ad6cd5357210a31279..78503158fd699d2df75e8fbbbaf164a129f2578b 100755 (executable)
@@ -871,27 +871,9 @@ test_expect_success 'submodule always visited' '
 # the submodule, and someone does a `git submodule absorbgitdirs`
 # in the super, Git will recursively invoke `git submodule--helper`
 # to do the work and this may try to read the index.  This will
-# try to start the daemon in the submodule *and* pass (either
-# directly or via inheritance) the `--super-prefix` arg to the
-# `git fsmonitor--daemon start` command inside the submodule.
-# This causes a warning because fsmonitor--daemon does take that
-# global arg (see the table in git.c)
-#
-# This causes a warning when trying to start the daemon that is
-# somewhat confusing.  It does not seem to hurt anything because
-# the fsmonitor code maps the query failure into a trivial response
-# and does the work anyway.
-#
-# It would be nice to silence the warning, however.
+# try to start the daemon in the submodule.
 
-have_t2_error_event () {
-       log=$1
-       msg="fsmonitor--daemon doesnQt support --super-prefix" &&
-
-       tr '\047' Q <$1 | grep -e "$msg"
-}
-
-test_expect_success "stray submodule super-prefix warning" '
+test_expect_success "submodule absorbgitdirs implicitly starts daemon" '
        test_when_finished "rm -rf super; \
                            rm -rf sub;   \
                            rm super-sub.trace" &&
@@ -909,21 +891,31 @@ test_expect_success "stray submodule super-prefix warning" '
 
        test_path_is_dir super/dir_1/dir_2/sub/.git &&
 
+       cwd="$(cd super && pwd)" &&
+       cat >expect <<-EOF &&
+       Migrating git directory of '\''dir_1/dir_2/sub'\'' from
+       '\''$cwd/dir_1/dir_2/sub/.git'\'' to
+       '\''$cwd/.git/modules/dir_1/dir_2/sub'\''
+       EOF
        GIT_TRACE2_EVENT="$PWD/super-sub.trace" \
-               git -C super submodule absorbgitdirs &&
+               git -C super submodule absorbgitdirs >out 2>actual &&
+       test_cmp expect actual &&
+       test_must_be_empty out &&
 
-       ! have_t2_error_event super-sub.trace
+       # Confirm that the trace2 log contains a record of the
+       # daemon starting.
+       test_subcommand git fsmonitor--daemon start <super-sub.trace
 '
 
 # 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 the FS event.
+# regardless of how it is spelled in the FS event.
 # That is, does the FS event receive the spelling of the
 # operation or does it receive the spelling preserved with
 # the file/directory.
 #
 test_expect_success CASE_INSENSITIVE_FS 'case insensitive+preserving' '
-#      test_when_finished "stop_daemon_delete_repo test_insensitive" &&
+       test_when_finished "stop_daemon_delete_repo test_insensitive" &&
 
        git init test_insensitive &&
 
@@ -935,8 +927,8 @@ test_expect_success CASE_INSENSITIVE_FS 'case insensitive+preserving' '
        test_path_is_dir test_insensitive/.git &&
        test_path_is_dir test_insensitive/.GIT &&
 
-       # Rename .git using an alternate spelling to verify that that
-       # daemon detects it and automatically shuts down.
+       # Rename .git using an alternate spelling to verify that
+       # the daemon detects it and automatically shuts down.
        mv test_insensitive/.GIT test_insensitive/.FOO &&
 
        # See [1] above.
@@ -948,9 +940,9 @@ test_expect_success CASE_INSENSITIVE_FS 'case insensitive+preserving' '
        # directories and files that we touched.  We may or may not get a
        # trailing slash on modified directories.
        #
-       egrep "^event: abc/?$"       ./insensitive.trace &&
-       egrep "^event: abc/def/?$"   ./insensitive.trace &&
-       egrep "^event: abc/def/xyz$" ./insensitive.trace
+       grep -E "^event: abc/?$"       ./insensitive.trace &&
+       grep -E "^event: abc/def/?$"   ./insensitive.trace &&
+       grep -E "^event: abc/def/xyz$" ./insensitive.trace
 '
 
 # The variable "unicode_debug" is defined in the following library
@@ -992,20 +984,57 @@ test_expect_success !UNICODE_COMPOSITION_SENSITIVE 'Unicode nfc/nfd' '
        then
                # We should have seen NFC event from OS.
                # We should not have synthesized an NFD event.
-               egrep    "^event: nfc/c_${utf8_nfc}/?$" ./unicode.trace &&
-               egrep -v "^event: nfc/c_${utf8_nfd}/?$" ./unicode.trace
+               grep -E    "^event: nfc/c_${utf8_nfc}/?$" ./unicode.trace &&
+               grep -E -v "^event: nfc/c_${utf8_nfd}/?$" ./unicode.trace
        else
                # We should have seen NFD event from OS.
                # We should have synthesized an NFC event.
-               egrep "^event: nfc/c_${utf8_nfd}/?$" ./unicode.trace &&
-               egrep "^event: nfc/c_${utf8_nfc}/?$" ./unicode.trace
+               grep -E "^event: nfc/c_${utf8_nfd}/?$" ./unicode.trace &&
+               grep -E "^event: nfc/c_${utf8_nfc}/?$" ./unicode.trace
        fi &&
 
        # We assume UNICODE_NFD_PRESERVED.
        # We should have seen explicit NFD from OS.
        # We should have synthesized an NFC event.
-       egrep "^event: nfd/d_${utf8_nfd}/?$" ./unicode.trace &&
-       egrep "^event: nfd/d_${utf8_nfc}/?$" ./unicode.trace
+       grep -E "^event: nfd/d_${utf8_nfd}/?$" ./unicode.trace &&
+       grep -E "^event: nfd/d_${utf8_nfc}/?$" ./unicode.trace
+'
+
+test_expect_success 'split-index and FSMonitor work well together' '
+       git init split-index &&
+       test_when_finished "git -C \"$PWD/split-index\" \
+               fsmonitor--daemon stop" &&
+       (
+               cd split-index &&
+               git config core.splitIndex true &&
+               # force split-index in most cases
+               git config splitIndex.maxPercentChange 99 &&
+               git config core.fsmonitor true &&
+
+               # Create the following commit topology:
+               #
+               # *   merge three
+               # |\
+               # | * three
+               # * | merge two
+               # |\|
+               # | * two
+               # * | one
+               # |/
+               # * 5a5efd7 initial
+
+               test_commit initial &&
+               test_commit two &&
+               test_commit three &&
+               git reset --hard initial &&
+               test_commit one &&
+               test_tick &&
+               git merge two &&
+               test_tick &&
+               git merge three &&
+
+               git rebase --force-rebase -r one
+       )
 '
 
 test_done