Class: Puppet::FileSystem::Windows
- Defined in:
- lib/puppet/file_system/windows.rb
Instance Method Summary collapse
- #chmod(mode, path) ⇒ Object
- #exist?(path) ⇒ Boolean
- #expand_path(path, dir_string = nil) ⇒ Object
- #lstat(path) ⇒ Object
- #open(path, mode, options, &block) ⇒ Object
- #read_preserve_line_endings(path) ⇒ Object
- #readlink(path) ⇒ Object
- #stat(path) ⇒ Object
- #symlink(path, dest, options = {}) ⇒ Object
- #symlink?(path) ⇒ Boolean
- #unlink(*file_names) ⇒ Object
Methods inherited from Posix
Methods inherited from FileImpl
#assert_path, #basename, #binread, #children, #compare_stream, #dir, #directory?, #each_line, #exclusive_create, #exclusive_open, #executable?, #file?, #mkpath, #path_string, #pathname, #read, #size, #touch, #writable?
Instance Method Details
#chmod(mode, path) ⇒ Object
105 106 107 |
# File 'lib/puppet/file_system/windows.rb', line 105 def chmod(mode, path) Puppet::Util::Windows::Security.set_mode(mode, path.to_s) end |
#exist?(path) ⇒ Boolean
33 34 35 |
# File 'lib/puppet/file_system/windows.rb', line 33 def exist?(path) return Puppet::Util::Windows::File.exist?(path) end |
#expand_path(path, dir_string = nil) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/puppet/file_system/windows.rb', line 14 def (path, dir_string = nil) # ensure `nil` values behave like underlying File.expand_path string_path = ::File.(path.nil? ? nil : path_string(path), dir_string) # if no tildes, nothing to expand, no need to call Windows API, return original string return string_path if !string_path.index('~') begin # no need to do existence check up front as GetLongPathName implies that check is performed # and it should be the exception that files aren't actually present string_path = Puppet::Util::Windows::File.get_long_pathname(string_path) rescue Puppet::Util::Windows::Error => e # preserve original File.expand_path behavior for file / path not found by returning string raise if (e.code != Puppet::Util::Windows::File::ERROR_FILE_NOT_FOUND && e.code != Puppet::Util::Windows::File::ERROR_PATH_NOT_FOUND) end string_path end |
#lstat(path) ⇒ Object
98 99 100 101 102 103 |
# File 'lib/puppet/file_system/windows.rb', line 98 def lstat(path) if ! Puppet.features.manages_symlinks? return Puppet::Util::Windows::File.stat(path) end Puppet::Util::Windows::File.lstat(path) end |
#open(path, mode, options, &block) ⇒ Object
6 7 8 9 10 11 12 |
# File 'lib/puppet/file_system/windows.rb', line 6 def open(path, mode, , &block) # PUP-6959 mode is explicitly ignored until it can be implemented # Ruby on Windows uses mode for setting file attributes like read-only and # archived, not for setting permissions like POSIX raise TypeError.new('mode must be specified as an Integer') if mode && !mode.is_a?(Numeric) ::File.open(path, , nil, &block) end |
#read_preserve_line_endings(path) ⇒ Object
109 110 111 112 113 114 115 |
# File 'lib/puppet/file_system/windows.rb', line 109 def read_preserve_line_endings(path) contents = path.read( :mode => 'rb', :encoding => Encoding::UTF_8) contents = path.read( :mode => 'rb', :encoding => Encoding::default_external) unless contents.valid_encoding? contents = path.read unless contents.valid_encoding? contents end |
#readlink(path) ⇒ Object
63 64 65 66 |
# File 'lib/puppet/file_system/windows.rb', line 63 def readlink(path) raise_if_symlinks_unsupported Puppet::Util::Windows::File.readlink(path) end |
#stat(path) ⇒ Object
94 95 96 |
# File 'lib/puppet/file_system/windows.rb', line 94 def stat(path) Puppet::Util::Windows::File.stat(path) end |
#symlink(path, dest, options = {}) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/puppet/file_system/windows.rb', line 37 def symlink(path, dest, = {}) raise_if_symlinks_unsupported dest_exists = exist?(dest) # returns false on dangling symlink dest_stat = Puppet::Util::Windows::File.stat(dest) if dest_exists # silent fail to preserve semantics of original FileUtils return 0 if dest_exists && dest_stat.ftype == 'directory' if dest_exists && dest_stat.ftype == 'file' && [:force] != true raise(Errno::EEXIST, "#{dest} already exists and the :force option was not specified") end if [:noop] != true ::File.delete(dest) if dest_exists # can only be file Puppet::Util::Windows::File.symlink(path, dest) end 0 end |
#symlink?(path) ⇒ Boolean
58 59 60 61 |
# File 'lib/puppet/file_system/windows.rb', line 58 def symlink?(path) return false if ! Puppet.features.manages_symlinks? Puppet::Util::Windows::File.symlink?(path) end |
#unlink(*file_names) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/puppet/file_system/windows.rb', line 68 def unlink(*file_names) if ! Puppet.features.manages_symlinks? return ::File.unlink(*file_names) end file_names.each do |file_name| file_name = file_name.to_s # handle PathName stat = Puppet::Util::Windows::File.stat(file_name) rescue nil # sigh, Ruby + Windows :( if !stat ::File.unlink(file_name) rescue Dir.rmdir(file_name) elsif stat.ftype == 'directory' if Puppet::Util::Windows::File.symlink?(file_name) Dir.rmdir(file_name) else raise Errno::EPERM.new(file_name) end else ::File.unlink(file_name) end end file_names.length end |