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

[PATCH v5] t2000: modernize overall structure and path checks

From
Zakariyah Ali <zakariyahali100@gmail.com>
Date
Apr 7, 2026, 03:44 UTC
Message-ID
<20260407034446.409175-1-zakariyahali100@gmail.com>
In-Reply-To
<20260405011135.125912-1-zakariyahali100@gmail.com>

This test script that dates back to 2005 certainly shows its age and both its style and the way the tests are laid out do not match the modern standard. Modernize it to match the current testing standards:

  * Executables that prepare the data used to test the command should
    be inside the test_expect_success block in modern tests.
  * In modern tests, running a command that is being tested, making
    sure it succeeds, and inspecting other side effects that are
    expected, are all done in a single test_expect_success block.
  * A test_expect_success block in modern tests are laid out as
         test_expect_success 'title of the test' '
                 body of the test &&
                 ...
                 body of the test
         '
    not as
         test_expect_success \
                 'title of the test' \
                 'body of the test &&
                 ...
                 body of the test'
    which is in a prehistoric style.
  * In modern tests, each &&-chained statement in the body of the
    test_expect_success block are indented with a horizontal tab,
    unlike prehistoric style that used 4-space indent.
  * Replace bare 'test -f/-d' and 'test ! -h' assertions with dedicated
    test_path_is_* helpers (specifically test_path_is_file_not_symlink and
    test_path_is_dir_not_symlink). While less commonly used in the test
    suite than test_path_is_file/dir, they act as direct replacements
    for the specific checks being performed and provide clearer
    diagnostics on failure.
Helped-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Karthik Nayak <karthik.188@gmail.com>
Helped-by: Tian Yuchen <cat@malon.dev>
Signed-off-by: Zakariyah Ali <zakariyahali100@gmail.com>
---
 t/t2000-conflict-when-checking-files-out.sh | 88 +++++++--------------
 1 file changed, 30 insertions(+), 58 deletions(-)
diff --git a/t/t2000-conflict-when-checking-files-out.sh b/t/t2000-conflict-when-checking-files-out.sh
index f18616ad2b..44728329f3 100755
--- a/t/t2000-conflict-when-checking-files-out.sh
+++ b/t/t2000-conflict-when-checking-files-out.sh
@@ -48,17 +48,16 @@ mkdir path0
 date >path0/file0
 date >path1
 
-test_expect_success \
-    'git checkout-index without -f should fail on conflicting work tree.' \
-    'test_must_fail git checkout-index -a'
-
-test_expect_success \
-    'git checkout-index with -f should succeed.' \
-    'git checkout-index -f -a'
+test_expect_success 'git checkout-index without -f should fail on conflicting work tree.' '
+	test_must_fail git checkout-index -a
+'
 
-test_expect_success \
-    'git checkout-index conflicting paths.' \
-    'test -f path0 && test -d path1 && test -f path1/file1'
+test_expect_success 'git checkout-index with -f should succeed.' '
+	git checkout-index -f -a &&
+	test_path_is_file path0 &&
+	test_path_is_dir path1 &&
+	test_path_is_file path1/file1
+'
 
 test_expect_success SYMLINKS 'checkout-index -f twice with --prefix' '
 	mkdir -p tar/get &&
@@ -83,53 +82,26 @@ test_expect_success SYMLINKS 'checkout-index -f twice with --prefix' '
 # path path3 is occupied by a non-directory.  With "-f" it should remove
 # the symlink path3 and create directory path3 and file path3/file1.
 
-mkdir path2
-date >path2/file0
-test_expect_success \
-    'git update-index --add path2/file0' \
-    'git update-index --add path2/file0'
-test_expect_success \
-    'writing tree out with git write-tree' \
-    'tree1=$(git write-tree)'
-test_debug 'show_files $tree1'
-
-mkdir path3
-date >path3/file1
-test_expect_success \
-    'git update-index --add path3/file1' \
-    'git update-index --add path3/file1'
-test_expect_success \
-    'writing tree out with git write-tree' \
-    'tree2=$(git write-tree)'
-test_debug 'show_files $tree2'
-
-rm -fr path3
-test_expect_success \
-    'read previously written tree and checkout.' \
-    'git read-tree -m $tree1 && git checkout-index -f -a'
-test_debug 'show_files $tree1'
-
-test_expect_success \
-    'add a symlink' \
-    'test_ln_s_add path2 path3'
-test_expect_success \
-    'writing tree out with git write-tree' \
-    'tree3=$(git write-tree)'
-test_debug 'show_files $tree3'
-
-# Morten says "Got that?" here.
-# Test begins.
-
-test_expect_success \
-    'read previously written tree and checkout.' \
-    'git read-tree $tree2 && git checkout-index -f -a'
-test_debug 'show_files $tree2'
-
-test_expect_success \
-    'checking out conflicting path with -f' \
-    'test ! -h path2 && test -d path2 &&
-     test ! -h path3 && test -d path3 &&
-     test ! -h path2/file0 && test -f path2/file0 &&
-     test ! -h path3/file1 && test -f path3/file1'
+test_expect_success 'checkout-index -f resolves symlink conflict on leading path' '
+	mkdir path2 &&
+	date >path2/file0 &&
+	git update-index --add path2/file0 &&
+	tree1=$(git write-tree) &&
+	mkdir path3 &&
+	date >path3/file1 &&
+	git update-index --add path3/file1 &&
+	tree2=$(git write-tree) &&
+	rm -fr path3 &&
+	git read-tree -m $tree1 &&
+	git checkout-index -f -a &&
+	test_ln_s_add path2 path3 &&
+	tree3=$(git write-tree) &&
+	git read-tree $tree2 &&
+	git checkout-index -f -a &&
+	test_path_is_dir_not_symlink path2 &&
+	test_path_is_dir_not_symlink path3 &&
+	test_path_is_file_not_symlink path2/file0 &&
+	test_path_is_file_not_symlink path3/file1
+'
 
 test_done
-- 
2.43.0
Previous: Tian YuchenNext: Junio C Hamano
Message 11 of 17 in “Github Patch”
  1. Zakariyah AliMar 26, 2026
  2. PabloMar 26, 2026
  3. t2000: modernize path checks with test_path_is_* helpersZakariyah Ali, Mar 26, 2026
  4. Junio C HamanoMar 26, 2026
  5. [GSoC][PATCH v3] t2000: modernise overall structureZakariyah Ali, Mar 27, 2026
  6. Zakariyah AliMar 30, 2026
  7. Tian YuchenApr 1, 2026
  8. 1/1 t2000: modernize overall structure and path checksZakariyah Ali, Apr 5, 2026
  9. Karthik NayakApr 5, 2026
  10. Tian YuchenApr 6, 2026
  11. t2000: modernize overall structure and path checksZakariyah Ali, Apr 7, 2026
  12. Junio C HamanoApr 7, 2026
  13. Junio C HamanoApr 7, 2026
  14. t2000: consolidate second scenario into a single test blockZakariyah Ali, Apr 29, 2026
  15. Zakariyah AliMay 5, 2026
  16. Junio C HamanoMay 12, 2026
  17. Zakariyah AliMay 12, 2026

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.