Branch: refs/heads/smoke-me/tonyc/win32-symlink
  Home:   https://github.com/Perl/perl5
  Commit: 6f9f5ab3aba606b89f7e248e4101ed422275d7e0
      
https://github.com/Perl/perl5/commit/6f9f5ab3aba606b89f7e248e4101ed422275d7e0
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-05 (Thu, 05 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: 5ad42220515b9adee695c47c1119bbad37a375e9
      
https://github.com/Perl/perl5/commit/5ad42220515b9adee695c47c1119bbad37a375e9
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-09 (Mon, 09 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.

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: ea05232725c26444af32dd5adae4634262c3a0f8
      
https://github.com/Perl/perl5/commit/ea05232725c26444af32dd5adae4634262c3a0f8
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-09 (Mon, 09 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: a36a317d1c48e26208fb48752cb42c68bab1feeb
      
https://github.com/Perl/perl5/commit/a36a317d1c48e26208fb48752cb42c68bab1feeb
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-09 (Mon, 09 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: 59dd4afd915d2a69f7f3c03bdd3b69ebca4235d2
      
https://github.com/Perl/perl5/commit/59dd4afd915d2a69f7f3c03bdd3b69ebca4235d2
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-09 (Mon, 09 Nov 2020)

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

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


  Commit: 6b0cd1298fd73b607bb9f5e34c76af490b767bad
      
https://github.com/Perl/perl5/commit/6b0cd1298fd73b607bb9f5e34c76af490b767bad
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-09 (Mon, 09 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: 16a0347bac9820ef29f5651da090dd61a6e75ec1
      
https://github.com/Perl/perl5/commit/16a0347bac9820ef29f5651da090dd61a6e75ec1
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-09 (Mon, 09 Nov 2020)

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

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


  Commit: e8eaac003335c3f02c1c369fae90171b7b797f05
      
https://github.com/Perl/perl5/commit/e8eaac003335c3f02c1c369fae90171b7b797f05
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-09 (Mon, 09 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: 14c4c2529f5b04bf3f430856529b1bd7cf3619db
      
https://github.com/Perl/perl5/commit/14c4c2529f5b04bf3f430856529b1bd7cf3619db
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-09 (Mon, 09 Nov 2020)

  Changed paths:
    M win32/win32.c

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


  Commit: 5da4846386d5962ef3e0bd7fda08837fd6d0e52e
      
https://github.com/Perl/perl5/commit/5da4846386d5962ef3e0bd7fda08837fd6d0e52e
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-09 (Mon, 09 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: 6c2049f2dd68f798564213171d50d25670cc7907
      
https://github.com/Perl/perl5/commit/6c2049f2dd68f798564213171d50d25670cc7907
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-09 (Mon, 09 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: b53b5fac15b0cef2479eca78818a623a591830f8
      
https://github.com/Perl/perl5/commit/b53b5fac15b0cef2479eca78818a623a591830f8
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-09 (Mon, 09 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: 383e5e7bdafce693f64dd7a1492d2ce5cff41431
      
https://github.com/Perl/perl5/commit/383e5e7bdafce693f64dd7a1492d2ce5cff41431
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-09 (Mon, 09 Nov 2020)

  Changed paths:
    M win32/win32.c

  Log Message:
  -----------
  pre-vista support for win32_symlink


  Commit: d5041d541b2a4fa8398aa667d0ca7e358889b7b2
      
https://github.com/Perl/perl5/commit/d5041d541b2a4fa8398aa667d0ca7e358889b7b2
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-09 (Mon, 09 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: b6244f79d1fa9673b2dba188b6e6cf39670e4065
      
https://github.com/Perl/perl5/commit/b6244f79d1fa9673b2dba188b6e6cf39670e4065
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-09 (Mon, 09 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: 6fbcba6143facfc8c86ee4f86e9dabf90c459db8
      
https://github.com/Perl/perl5/commit/6fbcba6143facfc8c86ee4f86e9dabf90c459db8
  Author: Tony Cook <t...@develop-help.com>
  Date:   2020-11-09 (Mon, 09 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/849b785af31a...6fbcba6143fa

Reply via email to