(PUP-391) Ruby 2 Compatibility / FFI fixes#2829
(PUP-391) Ruby 2 Compatibility / FFI fixes#2829joshcooper merged 5 commits intopuppetlabs:masterfrom
Conversation
|
CLA signed by all contributors. |
|
The taskscheduler test fails on Ruby 2 require an update to the win32-taskscheduler gem. See chef/win32-taskscheduler#9 |
|
So I'm guessing we should always be specifying the RDoc I also don't think that it should be the current source directory in specs either, but rather the folder full of test files. I'll try to make sure I fully understand the tests, and how we use it in our codebase. |
|
Also looks like RDoc introduced In contrast, my Ruby 1.9.3 distribution has RDoc 3.9.5. I believe that since |
- The GetFileAttributes Win32 API call returns a DWORD, which is a platform independent 32-bit wide unsigned integer: http://msdn.microsoft.com/en-us/library/windows/desktop/aa364944(v=vs.85).aspx It's max value is 4294967295: http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx - FFI::Pointer.new(-1).address is platform dependent and on x64 is 18446744073709551615, the max value of a 64-bit wide unsigned int. - The INVALID_FILE_ATTRIBUTES constant is a valid return value of GetFileAttributes and is defined in winbase.h as: #define INVALID_FILE_ATTRIBUTES ((DWORD)-1) - Therefore INVALID_FILE_ATTRIBUTES should be defined as 0xFFFFFFFF
- In commit bf6f5c4, @@GetLastError was introduced as a band-aid to ensure the appropriate error code was read out of the thread local storage after a Win32 API call was made. At that time, not all of the code had been converted to FFI compatible and not all gems had been upgraded to FFI compatible. Calls still made using Win32API were not captured by FFI.errno (which only calls GetLastError *after* making an FFI defined Win32 API call) resulting in a number of test fails. The solution at the time was to manually call GetLastError instead to retrieve the value set by SetLastError. - Now that all Win32 API calls are made through FFI, FFI will automatically capture API results by calling GetLastError, and we can remove the unnecessary binding to GetLastError here.
- When calling the document method on RDoc and the root option has not been specified, RDoc will provide a default in the options class: @root = Pathname(Dir.pwd). NOTE: This does not affect RDoc 3.9.5 that ships with Ruby 1.9.3 on Windows, only RDoc 4.0.0+ that ships with Ruby 2.0.0+ on Windows. - The win32-dir monkey patches the Dir.pwd method, and instead of using / separators like the rest of Ruby, it uses \ as a path separator. - RDoc uses Pathname, specifically the relative_path_from method which expects / separators, and gets confused with \. Therefore, provide a workaround to ensure that Windows uses the appropriate / in paths.
- File.open now raises EISDIR when a path is a directory, prior to verifying permissions in Ruby 2. Files continue to return EACCESS.
No description provided.