Karsten Blees 2c65aca75e Win32: symlink: add support for symlinks to directories
Symlinks on Windows have a flag that indicates whether the target is a file
or a directory. Symlinks of wrong type simply don't work. This even affects
core Win32 APIs (e.g. DeleteFile() refuses to delete directory symlinks).

However, CreateFile() with FILE_FLAG_BACKUP_SEMANTICS doesn't seem to care.
Check the target type by first creating a tentative file symlink, opening
it, and checking the type of the resulting handle. If it is a directory,
recreate the symlink with the directory flag set.

It is possible to create symlinks before the target exists (or in case of
symlinks to symlinks: before the target type is known). If this happens,
create a tentative file symlink and postpone the directory decision: keep
a list of phantom symlinks to be processed whenever a new directory is
created in mingw_mkdir().

Limitations: This algorithm may fail if a link target changes from file to
directory or vice versa, or if the target directory is created in another
process.

Signed-off-by: Karsten Blees <blees@dcon.de>
2015-05-24 01:55:51 +02:00
2015-05-01 15:35:58 +02:00
2015-05-01 15:35:57 +02:00
2015-03-17 16:01:27 -07:00
2015-03-10 20:53:52 -07:00
2015-05-01 15:33:30 +02:00
2015-05-01 15:33:30 +02:00
2015-04-30 11:25:06 -07:00
2015-03-27 13:02:32 -07:00
2015-05-01 15:35:59 +02:00
2015-05-01 15:36:00 +02:00
2015-03-23 11:12:58 -07:00
2015-04-27 12:25:36 -07:00
2015-03-22 21:39:16 -07:00
2015-03-22 21:39:18 -07:00

Git for Windows

Join the chat at https://gitter.im/git-for-windows/git

This is the source code of Git for Windows, forked from Git.

This project is run by a governance model. If you encounter problems, you can report them as GitHub issues, discuss them on Git for Windows' Google Group, and contribute bug fixes.

Description
A fork of Git containing Windows-specific patches.
Readme 475 MiB
2025-08-19 03:50:05 -05:00
Languages
C 51.7%
Shell 37.5%
Perl 4.3%
Tcl 3%
Python 0.8%
Other 2.5%