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>
Subject: [PATCH v4 00/10] Prepare Git's test suite for symbolic link support on Windows
Date: Wed, 17 Dec 2025 14:18:36 +0000 [thread overview]
Message-ID: <pull.2009.v4.git.1765981126.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2009.v3.git.1765885577.gitgitgadget@gmail.com>
Git for Windows has supported symbolic links for quite some time: In
https://github.com/git-for-windows/git/pull/156, this support was introduced
already into Git for Windows v2.4.2.windows.1 in May 2015.
However, the Git for Windows CI never ran the test suite with symbolic link
support because the MSYS2 runtime (i.e. the POSIX emulation layer required
to run Git's test suite because the latter is written in Unix shell script)
does not support symbolic links right out of the box. This is for historical
reasons: Symbolic link support was introduced in Windows 7, where these
links could only be created by administrators by default, and it took until
Windows 10 Build 14972 that at least in Developer Mode, non-administrators
would be permitted to create them.
The MSYS2 runtime does have some sort of support for symbolic links,
although with caveats: seeing as it expects the inputs as Unix-like paths,
but the outputs need to be Win32 symbolic links pointing to Win32 paths,
some normalization has to be performed in the process. This leads to
sometimes surprising behavior e.g. when a link target like a/b/.. is
normalized to a.
It has been a minute or three since the time when Windows versions without
symbolic link support were common, therefore there are plans to turn on that
support in the MSYS2 runtime on these Windows versions by default, see
https://github.com/msys2/msys2-runtime/pull/114 for more details about this.
To prepare for this, I am working toward upstreaming Git for Windows' own
support for symbolic links. And to prepare for that, in turn, I am hereby
contributing preemptively the fixes required to eventually let Git's test
suite pass when both MSYS2 runtime and Git support symbolic links.
As a bonus, this patch series also contains fixes for the Perl tests (which
were broken for a few years, unnoticed because the CI runs need to save on
runtime and therefore skip the Perl tests because the consume a lot of
time).
Changes since v3:
* Re-added the credits to Patrick's research that was accidentally dropped
from the commit message of "t0600: fix incomplete prerequisite for a test
case"
Changes since v2:
* Polished commit messages.
Changes since v1:
* Fixed a grammar issue.
* Using cmp rather than skipping the comparison (thanks Junio).
* Extended a commit message to explain that it covers all the cases where
core.preferSymlinkRefs needs special care.
Johannes Schindelin (10):
t9700: accommodate for Windows paths
apply: symbolic links lack a "trustable executable bit"
mingw: special-case `open(symlink, O_CREAT | O_EXCL)`
t0001: handle `diff --no-index` gracefully
t0301: another fix for Windows compatibility
t0600: fix incomplete prerequisite for a test case
t1006: accommodate for symlink support in MSYS2
t1305: skip symlink tests that do not apply to Windows
t6423: introduce Windows-specific handling for symlinking to /dev/null
t7800: work around the MSYS path conversion on Windows
apply.c | 2 +-
compat/mingw.c | 14 ++++++++++++++
t/t0001-init.sh | 6 +++++-
t/t0301-credential-cache.sh | 3 ++-
t/t0600-reffiles-backend.sh | 2 +-
t/t1006-cat-file.sh | 24 +++++++++++++++++-------
t/t1305-config-include.sh | 4 ++--
t/t6423-merge-rename-directories.sh | 9 +++++++--
t/t7800-difftool.sh | 8 ++++----
t/t9700/test.pl | 9 +++++++--
10 files changed, 60 insertions(+), 21 deletions(-)
base-commit: 9a2fb147f2c61d0cab52c883e7e26f5b7948e3ed
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2009%2Fdscho%2Fprepare-the-test-suite-for-symlink-support-on-windows-v4
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2009/dscho/prepare-the-test-suite-for-symlink-support-on-windows-v4
Pull-Request: https://github.com/gitgitgadget/git/pull/2009
Range-diff vs v3:
1: 2d329837e3 = 1: 2d329837e3 t9700: accommodate for Windows paths
2: b97afa9a5c = 2: b97afa9a5c apply: symbolic links lack a "trustable executable bit"
3: f42a2f14bc = 3: f42a2f14bc mingw: special-case `open(symlink, O_CREAT | O_EXCL)`
4: 70237394c6 = 4: 70237394c6 t0001: handle `diff --no-index` gracefully
5: 0d371ee552 = 5: 0d371ee552 t0301: another fix for Windows compatibility
6: 91bd72062c ! 6: 7b233c2d40 t0600: fix incomplete prerequisite for a test case
@@ Commit message
However, the `preferSymlinkRefs` feature is not supported on Windows,
therefore this test case needs the `MINGW` prerequisite, too.
+ There's a couple more cases where we set this config key:
+
+ - In a subsequent test in t0600, but there we explicitly set it to
+ "false". So this would naturally be supported by Windows.
+
+ - In t7201 we set the value to `yes`, but we never verify that the
+ written reference is a symbolic link in the first place. I guess
+ that we could rather remove setting the configuration value here, as
+ we are about to deprecate support for symrefs via symbolic links in
+ the first place. But that's certainly outside of the scope of this
+ patch.
+
+ - In t9903 we do the same, but likewise, we don't check whether the
+ written file is a symbolic link.
+
+ Therefore this seems to be the only instance where the tests actually
+ need to be adapted.
+
+ Helped-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
## t/t0600-reffiles-backend.sh ##
7: c2d3212f11 = 7: 31ed59481c t1006: accommodate for symlink support in MSYS2
8: 03ff6d756d = 8: 37f9614ef5 t1305: skip symlink tests that do not apply to Windows
9: 4ab6aaf2cf = 9: e604ace822 t6423: introduce Windows-specific handling for symlinking to /dev/null
10: 5f056902df = 10: 6caf8bf0b1 t7800: work around the MSYS path conversion on Windows
--
gitgitgadget
next prev parent reply other threads:[~2025-12-17 14:18 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 ` [PATCH v3 07/10] t1006: accommodate for symlink support in MSYS2 Johannes Schindelin via GitGitGadget
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 ` Johannes Schindelin via GitGitGadget [this message]
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=pull.2009.v4.git.1765981126.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=johannes.schindelin@gmx.de \
--cc=ps@pks.im \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
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;
as well as URLs for NNTP newsgroup(s).