Branch: refs/heads/smoke-me/tonyc/win32-symlink
  Home:   https://github.com/Perl/perl5
  Commit: 075922ac423c648207748f8c639327e783ec493e
      
https://github.com/Perl/perl5/commit/075922ac423c648207748f8c639327e783ec493e
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-04 (Wed, 04 Nov 2020)

  Changed paths:
    M MANIFEST
    M dosish.h
    M t/op/stat.t
    A t/win32/stat.t
    M win32/config.gc
    M win32/config.vc
    M win32/config_H.gc
    M win32/config_H.vc
    M win32/perlhost.h
    M win32/win32.c
    M win32/win32.h
    M win32/win32iop.h

  Log Message:
  -----------
  Win32: add lstat(), fetch st_dev and st_ino and fetch st_nlink for fstat

We need lstat() for various modules to work well with symlinks,
and the same modules often want to check for matches on the device
and inode number.

The values we're using for st_ino match those that the Python and Rust
libraries use, and Go uses the same volume and file index values for
testing if two stat objects refer to the same file.

They aren't entirely unique, given ReFS uses 128-bit file ids, but
the API used to check for this (GetFileInformationByHandleEx() for
FileIdInfo) is only available on server operating systems, so I can't
directly test it anyway.


  Commit: e562984b0123ff472f1dd792769d72ab8593c4d2
      
https://github.com/Perl/perl5/commit/e562984b0123ff472f1dd792769d72ab8593c4d2
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-04 (Wed, 04 Nov 2020)

  Changed paths:
    M MANIFEST
    M iperlsys.h
    M pod/perlport.pod
    M pp_sys.c
    M t/op/stat.t
    A t/win32/symlink.t
    M win32/Makefile
    M win32/config.gc
    M win32/config.vc
    M win32/config_H.gc
    M win32/config_H.vc
    M win32/config_h.PL
    M win32/perlhost.h
    M win32/win32.c
    M win32/win32iop.h

  Log Message:
  -----------
  Win32: implement symlink() and readlink()

The API used requires Windows Vista or later, but is called in such
a way that perl can still be used on older Windows.

The API itself requires either elevated privileges or a sufficiently
recent version of Windows 10 running in "Developer Mode", so some
tests require updates.


  Commit: 1a0c68b0c01122738ea4df7e895626a3e1957584
      
https://github.com/Perl/perl5/commit/1a0c68b0c01122738ea4df7e895626a3e1957584
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-04 (Wed, 04 Nov 2020)

  Changed paths:
    M pod/perlport.pod
    M t/win32/stat.t
    M win32/win32.c

  Log Message:
  -----------
  Win32: implement our own stat(), and hence our own utime

This fixes at least two problems:

- unlike UCRT, the MSVCRT used for gcc builds has a bug converting
  a FILETIME in an unlike current DST state, returning a time
  offset by an hour.  Fixes GH #6080

- the MSVCRT apparently uses FindFirstFile() to fetch file
  information, but this doesn't follow symlinks(), so stat()
  ends up returning information about the symlink(), not the
  underlying file.  This isn't an issue with the UCRT which
  opens the file as this implementation does.

Currently this code calculates the time_t for st_*time, and the
other way for utime() using a simple multiplication and offset
between time_t and FILETIME values, but this may be incorrect
if leap seconds are enabled.

This code also requires Vista or later.

Some of this is based on code by Tomasz Konojacki (xenu).


  Commit: 4532f3ebe3cf686969b7c60424e70afcccceea9d
      
https://github.com/Perl/perl5/commit/4532f3ebe3cf686969b7c60424e70afcccceea9d
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-04 (Wed, 04 Nov 2020)

  Changed paths:
    M dist/PathTools/Cwd.xs
    M dist/PathTools/t/cwd.t

  Log Message:
  -----------
  PathTools: use PerlLIO_*() functions and chdir() on a symlink differences

Use PerlLIO_lstat() and PerlLIO_readlink() instead of directly calling
the POSIX names, so our Win32 overrides work.

For the test, unlike POSIX, changing directory via a symlink on Win32
appears to store the symlink as part of the current directory rather
so GetCurrentDirectory() fetches that rather than the hardlinked path.


  Commit: 9ef4512f4673ebb1bf2b7e7785494e23cda95a30
      
https://github.com/Perl/perl5/commit/9ef4512f4673ebb1bf2b7e7785494e23cda95a30
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-04 (Wed, 04 Nov 2020)

  Changed paths:
    M ext/File-Find/t/find.t

  Log Message:
  -----------
  File::Find find.t: switch to done_testing()


  Commit: 9d66b39b02ae1324fffc2ed7e94cf5929ae865d6
      
https://github.com/Perl/perl5/commit/9d66b39b02ae1324fffc2ed7e94cf5929ae865d6
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-04 (Wed, 04 Nov 2020)

  Changed paths:
    M ext/File-Find/lib/File/Find.pm
    M ext/File-Find/t/find.t
    M ext/File-Find/t/lib/Testing.pm
    M ext/File-Find/t/taint.t

  Log Message:
  -----------
  File::Find: support Win32 symlinks

find.t, taint.t: check that symlink() works under the current
permissions/filesystem rather than assuming it will work

find.t: since symlinks are now available, an earlier test block
set $FileFileTests_OK, and the tests in this Win32 block don't use
either of the follow options, which is required for fast file tests.

taint.t: ensure we get / separated names to match File::Find's output


  Commit: 14d426af3b38a89b9a2184eb5347fe1e8870ffbb
      
https://github.com/Perl/perl5/commit/14d426af3b38a89b9a2184eb5347fe1e8870ffbb
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-04 (Wed, 04 Nov 2020)

  Changed paths:
    M lib/File/Copy.pm
    M lib/File/Copy.t

  Log Message:
  -----------
  File::Copy: support symlinks on Win32


  Commit: 64c87b8d626e32ac09adee228b45120a5a630d9f
      
https://github.com/Perl/perl5/commit/64c87b8d626e32ac09adee228b45120a5a630d9f
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-04 (Wed, 04 Nov 2020)

  Changed paths:
    M win32/win32.c

  Log Message:
  -----------
  Win32: re-work FILETIME <=> time_t conversions

Current versions of Windows claim to support leap seconds, but the
time conversion I was using ignores that possibility.

Switch to using APIs (FileTimeToSystemTime() and SystemTimeToFileTime())
that are documented to support leap seconds that might be included
in a FILETIME.


  Commit: defd727fe8d083d1790fad51454c83338b77e830
      
https://github.com/Perl/perl5/commit/defd727fe8d083d1790fad51454c83338b77e830
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-04 (Wed, 04 Nov 2020)

  Changed paths:
    M win32/win32.c

  Log Message:
  -----------
  win32 symlink: only use the unprivileged flag if windows is new enough


  Commit: 5e320b49cf65d3c9bca2a7f0f27943c4a2c51983
      
https://github.com/Perl/perl5/commit/5e320b49cf65d3c9bca2a7f0f27943c4a2c51983
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-04 (Wed, 04 Nov 2020)

  Changed paths:
    M mg.c
    M pod/perlvar.pod
    M win32/win32.c
    M win32/win32.h

  Log Message:
  -----------
  remove ${^WIN32_SLOPPY_STAT}

The new implementation, like the UCRT implementation, always
opens the specified file.


  Commit: 0934bd17c591ca2c5a2066ccba4b45a43d2eedfa
      
https://github.com/Perl/perl5/commit/0934bd17c591ca2c5a2066ccba4b45a43d2eedfa
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-04 (Wed, 04 Nov 2020)

  Changed paths:
    M pod/perlport.pod
    M t/win32/stat.t
    M t/win32/symlink.t
    M win32/win32.c

  Log Message:
  -----------
  lstat(), readlink() and unlink() treat directory junctions as symlinks


  Commit: b7f0d20551ffaf55441f694b8e88c934082e2b3d
      
https://github.com/Perl/perl5/commit/b7f0d20551ffaf55441f694b8e88c934082e2b3d
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-04 (Wed, 04 Nov 2020)

  Changed paths:
    M win32/GNUmakefile
    M win32/Makefile
    M win32/config_H.gc
    M win32/config_H.vc
    M win32/config_sh.PL
    M win32/makefile.mk

  Log Message:
  -----------
  Win32: don't include version specific config for prebuilt config_h.*

This fixes the problem where doing a regen_config_h with a compiler
that supports stdbool.h would generate a config_h.* that would
result in a build failure on older compilers that didn't support
stdbool.h.


  Commit: c17f90b6e0848996553f5604aed201a917c19d67
      
https://github.com/Perl/perl5/commit/c17f90b6e0848996553f5604aed201a917c19d67
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-04 (Wed, 04 Nov 2020)

  Changed paths:
    M win32/win32.c

  Log Message:
  -----------
  Win32: try to make the new stat pre-Vista compatible

the win32\stat.t execute flag test will still fail

This is intended mostly for allowing the Win2000 smoker to build and
test.  If we end up dropping pre-Vista support this commit can be
removed (or reverted if it ends up in blead)


  Commit: b5d680daa093e5f28f0ae89b4006b7c252b25cbc
      
https://github.com/Perl/perl5/commit/b5d680daa093e5f28f0ae89b4006b7c252b25cbc
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-04 (Wed, 04 Nov 2020)

  Changed paths:
    M t/op/taint.t

  Log Message:
  -----------
  t/op/taint.t: handle symlink requiring anything unavailable

like privileges, or a filesystem without symlink support


  Commit: 849b785af31a836ecec08126848df7b4d4962367
      
https://github.com/Perl/perl5/commit/849b785af31a836ecec08126848df7b4d4962367
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-04 (Wed, 04 Nov 2020)

  Changed paths:
    M Porting/Maintainers.pl
    M cpan/Test-Harness/t/source.t
    M t/porting/customized.dat

  Log Message:
  -----------
  Test-Harness: don't assume symlink succeeds

https://github.com/Perl-Toolchain-Gang/Test-Harness/pull/103
upstream which has been applied but not released.


Compare: https://github.com/Perl/perl5/compare/9b69397269bc...849b785af31a

Reply via email to