git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 8/8] test-lib: clear watchman watches at test completion

From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
Date
Dec 9, 2019, 16:10 UTC
Message-ID
<e51165f260d564ccb7a9b8e696691eccb184c01a.1575907804.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.466.v2.git.1575907804.gitgitgadget@gmail.com>
From: Derrick Stolee <dstolee@microsoft.com>

The fsmonitor feature allows an external tool such as watchman to monitor the working directory. The direct test t7619-status-fsmonitor.sh provides some coverage, but it would be better to run the entire test suite with watchman enabled. This would provide more confidence that the feature is working as intended.

When running the test suite in parallel with 'prove -j <N>', many repos are created and deleted in parallel. When GIT_TEST_FSMONITOR points to t/t7519/fsmonitor-watchman, this can lead to watchman tracking many different folders, overloading its watch queue.

As a test script completes, we can tell watchman to stop watching the directories inside the TRASH_DIRECTORY.

This is particularly important on Windows where watchman keeps an open handle on the directories it watches, preventing them from being deleted. There is currently a bug in watchman [1] where this handle still is not closed, but if that is updated then these tests can be run on Windows as well.

[1] https://github.com/facebook/watchman/issues/764
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
---
 t/test-lib-functions.sh | 15 +++++++++++++++
 t/test-lib.sh           |  4 ++++
 2 files changed, 19 insertions(+)
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index e0b3f28d3a..ef840ce097 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -1475,3 +1475,18 @@ test_set_port () {
 	port=$(($port + ${GIT_TEST_STRESS_JOB_NR:-0}))
 	eval $var=$port
 }
+
+test_clear_watchman () {
+	if test -n "$GIT_TEST_FSMONITOR"
+	then
+		watchman watch-list |
+			grep "$TRASH_DIRECTORY" |
+			sed "s/\",//g" |
+			sed "s/\"//g" >repo-list
+
+		while read repo
+		do
+			watchman watch-del "$repo"
+		done <repo-list
+	fi
+}
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 30b07e310f..4114953ebc 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -1081,6 +1081,10 @@ test_atexit_handler () {
 test_done () {
 	GIT_EXIT_OK=t
 
+	# If watchman is being used with GIT_TEST_FSMONITOR, then
+	# clear all watches on directories inside the TRASH_DIRECTORY.
+	test_clear_watchman
+
 	# Run the atexit commands _before_ the trash directory is
 	# removed, so the commands can access pidfiles and socket files.
 	test_atexit_handler
-- 
gitgitgadget
Previous: Derrick Stolee via GitGitGadgetNext: Junio C Hamano
Message 32 of 41 in “Improve testability with GIT_TEST_FSMONITOR”
  1. 00/11 Improve testability with GIT_TEST_FSMONITORDerrick Stolee via GitGitGadget, Nov 21, 2019
  2. 01/11 fsmonitor: disable in a bare repoDerrick Stolee via GitGitGadget, Nov 21, 2019
  3. Denton LiuNov 21, 2019
  4. Derrick StoleeNov 22, 2019
  5. 02/11 fsmonitor: do not output to stderr for testsDerrick Stolee via GitGitGadget, Nov 21, 2019
  6. 03/11 t1301-shared-repo.sh: disable FSMONITORDerrick Stolee via GitGitGadget, Nov 21, 2019
  7. 04/11 t1510-repo-setup.sh: disable fsmonitor if no .git dirDerrick Stolee via GitGitGadget, Nov 21, 2019
  8. 05/11 fsmonitor: disable fsmonitor with worktreesDerrick Stolee via GitGitGadget, Nov 21, 2019
  9. 07/11 t3600-rm.sh: disable fsmonitor when deleting populated submoduleDerrick Stolee via GitGitGadget, Nov 21, 2019
  10. 06/11 t3030-merge-recursive.sh: disable fsmonitor when tweaking GIT_WORK_TREEDerrick Stolee via GitGitGadget, Nov 21, 2019
  11. 09/11 t7063: disable fsmonitor with status cacheDerrick Stolee via GitGitGadget, Nov 21, 2019
  12. 08/11 tests: disable fsmonitor in submodule testsDerrick Stolee via GitGitGadget, Nov 21, 2019
  13. 11/11 test-lib: clear watchman watches at test completionDerrick Stolee via GitGitGadget, Nov 21, 2019
  14. SZEDER GáborNov 22, 2019
  15. Derrick StoleeDec 9, 2019
  16. SZEDER GáborDec 9, 2019
  17. Derrick StoleeDec 10, 2019
  18. 10/11 t7519: disable external GIT_TEST_FSMONITOR variableDerrick Stolee via GitGitGadget, Nov 21, 2019
  19. 0/8 Improve testability with GIT_TEST_FSMONITORDerrick Stolee via GitGitGadget, Dec 9, 2019
  20. 1/8 fsmonitor: disable in a bare repoDerrick Stolee via GitGitGadget, Dec 9, 2019
  21. SZEDER GáborDec 10, 2019
  22. 2/8 fsmonitor: do not output to stderr for testsDerrick Stolee via GitGitGadget, Dec 9, 2019
  23. 3/8 t1301-shared-repo.sh: disable FSMONITORDerrick Stolee via GitGitGadget, Dec 9, 2019
  24. SZEDER GáborDec 10, 2019
  25. 4/8 t3030-merge-recursive.sh: disable fsmonitor when tweaking GIT_WORK_TREEDerrick Stolee via GitGitGadget, Dec 9, 2019
  26. SZEDER GáborDec 10, 2019
  27. Derrick StoleeDec 10, 2019
  28. SZEDER GáborDec 10, 2019
  29. SZEDER GáborDec 10, 2019
  30. Derrick StoleeJan 23, 2020
  31. 7/8 t7519: disable external GIT_TEST_FSMONITOR variableDerrick Stolee via GitGitGadget, Dec 9, 2019
  32. 8/8 test-lib: clear watchman watches at test completionDerrick Stolee via GitGitGadget, Dec 9, 2019
  33. Junio C HamanoDec 9, 2019
  34. Derrick StoleeDec 10, 2019
  35. Junio C HamanoDec 10, 2019
  36. Derrick StoleeDec 10, 2019
  37. Johannes SchindelinDec 10, 2019
  38. 6/8 t7063: disable fsmonitor with status cacheDerrick Stolee via GitGitGadget, Dec 9, 2019
  39. 5/8 tests: disable fsmonitor in submodule testsDerrick Stolee via GitGitGadget, Dec 9, 2019
  40. SZEDER GáborDec 10, 2019
  41. Derrick StoleeDec 10, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.