public inbox for git@vger.kernel.org 
 help / color / mirror / Atom feed
From: "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail•com>
To: git@vger•kernel.org
Cc: Eric Sunshine <sunshine@sunshineco•com>,
	Patrick Steinhardt <ps@pks•im>,
	Johannes Schindelin <johannes.schindelin@gmx•de>,
	Johannes Schindelin <johannes.schindelin@gmx•de>
Subject: [PATCH v3 07/10] t1006: accommodate for symlink support in MSYS2
Date: Tue, 16 Dec 2025 11:46:14 +0000	[thread overview]
Message-ID: <c2d3212f11ada7a0cae66812938b3d88a186a4ed.1765885577.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2009.v3.git.1765885577.gitgitgadget@gmail.com>

From: Johannes Schindelin <johannes.schindelin@gmx•de>

The MSYS2 runtime (which inherits this trait from the Cygwin runtime,
and which is used by Git for Windows' Bash to emulate POSIX
functionality on Windows, the same Bash that is also used to run Git's
test suite on Windows) has a mode where it can create native symbolic
links on Windows.

Naturally, this is a bit of a strange feature, given that Cygwin goes
out of its way to support Unix-like paths even if no Win32 program
understands those, and the symbolic links have to use Win32 paths
instead (which Win32 programs understand very well).

As a consequence, the symbolic link targets get normalized before the
links are created.

This results in certain quirks that Git's test suite is ill equipped to
accommodate (because Git's test suite expects to be able to use
Unix-like paths even on Windows).

The test script t1006-cat-file.sh contains two prime examples, two test
cases that need to skip a couple assertions because they are simply
wrong in the context of Git for Windows.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx•de>
---
 t/t1006-cat-file.sh | 24 +++++++++++++++++-------
 1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/t/t1006-cat-file.sh b/t/t1006-cat-file.sh
index 1f61b666a7..0eee3bb878 100755
--- a/t/t1006-cat-file.sh
+++ b/t/t1006-cat-file.sh
@@ -1048,18 +1048,28 @@ test_expect_success 'git cat-file --batch-check --follow-symlinks works for out-
 	echo .. >>expect &&
 	echo HEAD:dir/subdir/out-of-repo-link-dir | git cat-file --batch-check --follow-symlinks >actual &&
 	test_cmp expect actual &&
-	echo symlink 3 >expect &&
-	echo ../ >>expect &&
+	if test_have_prereq MINGW,SYMLINKS
+	then
+		test_write_lines "symlink 2" ..
+	else
+		test_write_lines "symlink 3" ../
+	fi >expect &&
 	echo HEAD:dir/subdir/out-of-repo-link-dir-trailing | git cat-file --batch-check --follow-symlinks >actual &&
 	test_cmp expect actual
 '
 
 test_expect_success 'git cat-file --batch-check --follow-symlinks works for symlinks with internal ..' '
-	echo HEAD: | git cat-file --batch-check >expect &&
-	echo HEAD:up-down | git cat-file --batch-check --follow-symlinks >actual &&
-	test_cmp expect actual &&
-	echo HEAD:up-down-trailing | git cat-file --batch-check --follow-symlinks >actual &&
-	test_cmp expect actual &&
+	if test_have_prereq !MINGW
+	then
+		# The `up-down` and `up-down-trailing` symlinks are normalized
+		# in MSYS in `winsymlinks` mode and are therefore in a
+		# different shape than Git expects them.
+		echo HEAD: | git cat-file --batch-check >expect &&
+		echo HEAD:up-down | git cat-file --batch-check --follow-symlinks >actual &&
+		test_cmp expect actual &&
+		echo HEAD:up-down-trailing | git cat-file --batch-check --follow-symlinks >actual &&
+		test_cmp expect actual
+	fi &&
 	echo HEAD:up-down-file | git cat-file --batch-check --follow-symlinks >actual &&
 	test_cmp found actual &&
 	echo symlink 7 >expect &&
-- 
gitgitgadget


  parent reply	other threads:[~2025-12-16 11:46 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-29 18:28 [PATCH 00/10] Prepare Git's test suite for symbolic link support on Windows Johannes Schindelin via GitGitGadget
2025-11-29 18:28 ` [PATCH 01/10] t9700: accommodate for Windows paths Johannes Schindelin via GitGitGadget
2025-11-29 18:28 ` [PATCH 02/10] apply: symbolic links lack a "trustable executable bit" Johannes Schindelin via GitGitGadget
2025-11-29 18:28 ` [PATCH 03/10] mingw: special-case `open(symlink, O_CREAT | O_EXCL)` Johannes Schindelin via GitGitGadget
2025-11-30  6:49   ` Junio C Hamano
2025-12-01 13:18     ` Johannes Schindelin
2025-12-06  2:17       ` Junio C Hamano
2025-11-29 18:28 ` [PATCH 04/10] t0001: handle `diff --no-index` gracefully Johannes Schindelin via GitGitGadget
2025-11-30  5:59   ` Junio C Hamano
2025-12-01 13:20     ` Johannes Schindelin
2025-12-02  8:15       ` Junio C Hamano
2025-11-29 18:28 ` [PATCH 05/10] t0301: another fix for Windows compatibility Johannes Schindelin via GitGitGadget
2025-11-30  6:09   ` Junio C Hamano
2025-12-01 13:25     ` Johannes Schindelin
2025-12-02  8:15       ` Junio C Hamano
2025-12-02 11:14         ` Johannes Schindelin
2025-12-06  1:05           ` Junio C Hamano
2025-11-29 18:28 ` [PATCH 06/10] t0600: fix incomplete prerequisite for a test case Johannes Schindelin via GitGitGadget
2025-12-01  9:46   ` Patrick Steinhardt
2025-12-01 13:27     ` Johannes Schindelin
2025-11-29 18:28 ` [PATCH 07/10] t1006: accommodate for symlink support in MSYS2 Johannes Schindelin via GitGitGadget
2025-12-01  9:47   ` Patrick Steinhardt
2025-12-01 13:29     ` Johannes Schindelin
2025-12-01 13:34       ` Patrick Steinhardt
2025-11-29 18:28 ` [PATCH 08/10] t1305: skip symlink tests that do not apply to Windows Johannes Schindelin via GitGitGadget
2025-11-29 18:28 ` [PATCH 09/10] t6423: introduce Windows-specific handling for symlinking to /dev/null Johannes Schindelin via GitGitGadget
2025-11-29 18:28 ` [PATCH 10/10] t7800: work around the MSYS path conversion on Windows Johannes Schindelin via GitGitGadget
2025-11-30  6:49   ` Junio C Hamano
2025-11-30  6:57   ` Eric Sunshine
2025-12-01 13:30     ` Johannes Schindelin
2025-12-05 15:02 ` [PATCH v2 00/10] Prepare Git's test suite for symbolic link support " Johannes Schindelin via GitGitGadget
2025-12-05 15:02   ` [PATCH v2 01/10] t9700: accommodate for Windows paths Johannes Schindelin via GitGitGadget
2025-12-05 15:02   ` [PATCH v2 02/10] apply: symbolic links lack a "trustable executable bit" Johannes Schindelin via GitGitGadget
2025-12-05 15:02   ` [PATCH v2 03/10] mingw: special-case `open(symlink, O_CREAT | O_EXCL)` Johannes Schindelin via GitGitGadget
2025-12-05 15:02   ` [PATCH v2 04/10] t0001: handle `diff --no-index` gracefully Johannes Schindelin via GitGitGadget
2025-12-05 15:02   ` [PATCH v2 05/10] t0301: another fix for Windows compatibility Johannes Schindelin via GitGitGadget
2025-12-05 15:02   ` [PATCH v2 06/10] t0600: fix incomplete prerequisite for a test case Johannes Schindelin via GitGitGadget
2025-12-05 15:02   ` [PATCH v2 07/10] t1006: accommodate for symlink support in MSYS2 Johannes Schindelin via GitGitGadget
2025-12-05 15:02   ` [PATCH v2 08/10] t1305: skip symlink tests that do not apply to Windows Johannes Schindelin via GitGitGadget
2025-12-05 15:02   ` [PATCH v2 09/10] t6423: introduce Windows-specific handling for symlinking to /dev/null Johannes Schindelin via GitGitGadget
2025-12-05 15:02   ` [PATCH v2 10/10] t7800: work around the MSYS path conversion on Windows Johannes Schindelin via GitGitGadget
2025-12-09  8:04   ` [PATCH v2 00/10] Prepare Git's test suite for symbolic link support " Patrick Steinhardt
2025-12-09 22:18     ` Junio C Hamano
2025-12-16 11:46   ` [PATCH v3 " Johannes Schindelin via GitGitGadget
2025-12-16 11:46     ` [PATCH v3 01/10] t9700: accommodate for Windows paths Johannes Schindelin via GitGitGadget
2025-12-16 11:46     ` [PATCH v3 02/10] apply: symbolic links lack a "trustable executable bit" Johannes Schindelin via GitGitGadget
2025-12-16 11:46     ` [PATCH v3 03/10] mingw: special-case `open(symlink, O_CREAT | O_EXCL)` Johannes Schindelin via GitGitGadget
2025-12-16 11:46     ` [PATCH v3 04/10] t0001: handle `diff --no-index` gracefully Johannes Schindelin via GitGitGadget
2025-12-16 11:46     ` [PATCH v3 05/10] t0301: another fix for Windows compatibility Johannes Schindelin via GitGitGadget
2025-12-16 11:46     ` Johannes Schindelin via GitGitGadget [this message]
2025-12-16 11:46     ` [PATCH v3 08/10] t1305: skip symlink tests that do not apply to Windows Johannes Schindelin via GitGitGadget
2025-12-16 11:46     ` [PATCH v3 09/10] t6423: introduce Windows-specific handling for symlinking to /dev/null Johannes Schindelin via GitGitGadget
2025-12-16 11:46     ` [PATCH v3 10/10] t7800: work around the MSYS path conversion on Windows Johannes Schindelin via GitGitGadget
2025-12-16 18:42     ` [PATCH v3 00/10] Prepare Git's test suite for symbolic link support " Junio C Hamano
2025-12-16 19:35       ` Johannes Schindelin
2025-12-17  4:31         ` Junio C Hamano
2025-12-17 14:18     ` [PATCH v4 " Johannes Schindelin via GitGitGadget
2025-12-17 14:18       ` [PATCH v4 01/10] t9700: accommodate for Windows paths Johannes Schindelin via GitGitGadget
2025-12-17 14:18       ` [PATCH v4 02/10] apply: symbolic links lack a "trustable executable bit" Johannes Schindelin via GitGitGadget
2025-12-17 14:18       ` [PATCH v4 03/10] mingw: special-case `open(symlink, O_CREAT | O_EXCL)` Johannes Schindelin via GitGitGadget
2025-12-17 14:18       ` [PATCH v4 04/10] t0001: handle `diff --no-index` gracefully Johannes Schindelin via GitGitGadget
2025-12-17 14:18       ` [PATCH v4 05/10] t0301: another fix for Windows compatibility Johannes Schindelin via GitGitGadget
2025-12-17 14:18       ` [PATCH v4 06/10] t0600: fix incomplete prerequisite for a test case Johannes Schindelin via GitGitGadget
2025-12-17 14:18       ` [PATCH v4 07/10] t1006: accommodate for symlink support in MSYS2 Johannes Schindelin via GitGitGadget
2025-12-17 14:18       ` [PATCH v4 08/10] t1305: skip symlink tests that do not apply to Windows Johannes Schindelin via GitGitGadget
2025-12-17 14:18       ` [PATCH v4 09/10] t6423: introduce Windows-specific handling for symlinking to /dev/null Johannes Schindelin via GitGitGadget
2025-12-17 14:18       ` [PATCH v4 10/10] t7800: work around the MSYS path conversion on Windows Johannes Schindelin via GitGitGadget
2025-12-17 23:19       ` [PATCH v4 00/10] Prepare Git's test suite for symbolic link support " Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c2d3212f11ada7a0cae66812938b3d88a186a4ed.1765885577.git.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail$(echo .)com \
    --cc=git@vger$(echo .)kernel.org \
    --cc=johannes.schindelin@gmx$(echo .)de \
    --cc=ps@pks$(echo .)im \
    --cc=sunshine@sunshineco$(echo .)com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox