Class: Puppet::FileSystem::FileImpl Private
- Defined in:
- lib/puppet/file_system/file_impl.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Abstract implementation of the Puppet::FileSystem
Direct Known Subclasses
Instance Method Summary collapse
- #assert_path(path) ⇒ Object private
- #basename(path) ⇒ Object private
- #binread(path) ⇒ Object private
- #children(path) ⇒ Object private
- #chmod(mode, path) ⇒ Object private
- #compare_stream(path, stream) ⇒ Object private
- #dir(path) ⇒ Object private
- #directory?(path) ⇒ Boolean private
- #each_line(path, &block) ⇒ Object private
- #exclusive_create(path, mode, &block) ⇒ Object private
- #exclusive_open(path, mode, options = 'r', timeout = 300, &block) ⇒ Object private
- #executable?(path) ⇒ Boolean private
- #exist?(path) ⇒ Boolean private
- #expand_path(path, dir_string = nil) ⇒ Object private
- #file?(path) ⇒ Boolean private
- #lstat(path) ⇒ Object private
- #mkpath(path) ⇒ Object private
- #open(path, mode, options, &block) ⇒ Object private
- #path_string(path) ⇒ Object private
- #pathname(path) ⇒ Object private
- #read(path, opts = {}) ⇒ Object private
- #read_preserve_line_endings(path) ⇒ Object private
- #readlink(path) ⇒ Object private
- #replace_file(path, mode = nil) ⇒ Object private
- #size(path) ⇒ Object private
- #stat(path) ⇒ Object private
- #symlink(path, dest, options = {}) ⇒ Object private
- #symlink?(path) ⇒ Boolean private
- #touch(path, mtime: nil) ⇒ Object private
- #unlink(*paths) ⇒ Object private
- #writable?(path) ⇒ Boolean private
Instance Method Details
#assert_path(path) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/puppet/file_system/file_impl.rb', line 10 def assert_path(path) return path if path.is_a?(Pathname) # Some paths are string, or in the case of WatchedFile, it pretends to be # one by implementing to_str. if path.respond_to?(:to_str) Pathname.new(path) else raise ArgumentError, _("FileSystem implementation expected Pathname, got: '%{klass}'") % { klass: path.class } end end |
#basename(path) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
39 40 41 |
# File 'lib/puppet/file_system/file_impl.rb', line 39 def basename(path) path.basename.to_s end |
#binread(path) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
93 94 95 |
# File 'lib/puppet/file_system/file_impl.rb', line 93 def binread(path) raise NotImplementedError end |
#children(path) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
125 126 127 |
# File 'lib/puppet/file_system/file_impl.rb', line 125 def children(path) path.children end |
#chmod(mode, path) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
157 158 159 |
# File 'lib/puppet/file_system/file_impl.rb', line 157 def chmod(mode, path) FileUtils.chmod(mode, path) end |
#compare_stream(path, stream) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
153 154 155 |
# File 'lib/puppet/file_system/file_impl.rb', line 153 def compare_stream(path, stream) ::File.open(path, 0, 'rb') { |this| FileUtils.compare_stream(this, stream) } end |
#dir(path) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
35 36 37 |
# File 'lib/puppet/file_system/file_impl.rb', line 35 def dir(path) path.dirname end |
#directory?(path) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
101 102 103 |
# File 'lib/puppet/file_system/file_impl.rb', line 101 def directory?(path) ::File.directory?(path) end |
#each_line(path, &block) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
75 76 77 78 79 80 81 |
# File 'lib/puppet/file_system/file_impl.rb', line 75 def each_line(path, &block) ::File.open(path) do |f| f.each_line do |line| yield line end end end |
#exclusive_create(path, mode, &block) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
47 48 49 50 |
# File 'lib/puppet/file_system/file_impl.rb', line 47 def exclusive_create(path, mode, &block) opt = File::CREAT | File::EXCL | File::WRONLY self.open(path, mode, opt, &block) end |
#exclusive_open(path, mode, options = 'r', timeout = 300, &block) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/puppet/file_system/file_impl.rb', line 52 def exclusive_open(path, mode, = 'r', timeout = 300, &block) wait = 0.001 + (Kernel.rand / 1000) written = false until written ::File.open(path, , mode) do |rf| if rf.flock(::File::LOCK_EX | ::File::LOCK_NB) Puppet.debug { _("Locked '%{path}'") % { path: path } } yield rf written = true Puppet.debug { _("Unlocked '%{path}'") % { path: path } } else Puppet.debug { "Failed to lock '%s' retrying in %.2f milliseconds" % [path, wait * 1000] } sleep wait timeout -= wait wait *= 2 if timeout < 0 raise Timeout::Error, _("Timeout waiting for exclusive lock on %{path}") % { path: path } end end end end end |
#executable?(path) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
109 110 111 |
# File 'lib/puppet/file_system/file_impl.rb', line 109 def executable?(path) ::File.executable?(path) end |
#exist?(path) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
97 98 99 |
# File 'lib/puppet/file_system/file_impl.rb', line 97 def exist?(path) ::File.exist?(path) end |
#expand_path(path, dir_string = nil) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
26 27 28 29 |
# File 'lib/puppet/file_system/file_impl.rb', line 26 def (path, dir_string = nil) # ensure `nil` values behave like underlying File.expand_path ::File.(path.nil? ? nil : path_string(path), dir_string) end |
#file?(path) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
105 106 107 |
# File 'lib/puppet/file_system/file_impl.rb', line 105 def file?(path) ::File.file?(path) end |
#lstat(path) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
149 150 151 |
# File 'lib/puppet/file_system/file_impl.rb', line 149 def lstat(path) ::File.lstat(path) end |
#mkpath(path) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
121 122 123 |
# File 'lib/puppet/file_system/file_impl.rb', line 121 def mkpath(path) path.mkpath end |
#open(path, mode, options, &block) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
31 32 33 |
# File 'lib/puppet/file_system/file_impl.rb', line 31 def open(path, mode, , &block) ::File.open(path, , mode, &block) end |
#path_string(path) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
22 23 24 |
# File 'lib/puppet/file_system/file_impl.rb', line 22 def path_string(path) path.to_s end |
#pathname(path) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
6 7 8 |
# File 'lib/puppet/file_system/file_impl.rb', line 6 def pathname(path) path.is_a?(Pathname) ? path : Pathname.new(path) end |
#read(path, opts = {}) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
83 84 85 |
# File 'lib/puppet/file_system/file_impl.rb', line 83 def read(path, opts = {}) path.read(**opts) end |
#read_preserve_line_endings(path) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
87 88 89 90 91 |
# File 'lib/puppet/file_system/file_impl.rb', line 87 def read_preserve_line_endings(path) default_encoding = Encoding.default_external.name encoding = default_encoding.downcase.start_with?('utf-') ? "bom|#{default_encoding}" : default_encoding read(path, encoding: encoding) end |
#readlink(path) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
137 138 139 |
# File 'lib/puppet/file_system/file_impl.rb', line 137 def readlink(path) ::File.readlink(path) end |
#replace_file(path, mode = nil) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/puppet/file_system/file_impl.rb', line 161 def replace_file(path, mode = nil) begin stat = lstat(path) gid = stat.gid uid = stat.uid mode ||= stat.mode & 0o7777 rescue Errno::ENOENT mode ||= 0o640 end tempfile = Puppet::FileSystem::Uniquefile.new(Puppet::FileSystem.basename_string(path), Puppet::FileSystem.dir_string(path)) begin begin yield tempfile tempfile.flush tempfile.fsync ensure tempfile.close end tempfile_path = tempfile.path FileUtils.chown(uid, gid, tempfile_path) if uid && gid chmod(mode, tempfile_path) ::File.rename(tempfile_path, path_string(path)) ensure tempfile.close! end end |
#size(path) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
43 44 45 |
# File 'lib/puppet/file_system/file_impl.rb', line 43 def size(path) path.size end |
#stat(path) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
145 146 147 |
# File 'lib/puppet/file_system/file_impl.rb', line 145 def stat(path) ::File.stat(path) end |
#symlink(path, dest, options = {}) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
129 130 131 |
# File 'lib/puppet/file_system/file_impl.rb', line 129 def symlink(path, dest, = {}) FileUtils.symlink(path, dest, **) end |
#symlink?(path) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
133 134 135 |
# File 'lib/puppet/file_system/file_impl.rb', line 133 def symlink?(path) ::File.symlink?(path) end |
#touch(path, mtime: nil) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
117 118 119 |
# File 'lib/puppet/file_system/file_impl.rb', line 117 def touch(path, mtime: nil) ::FileUtils.touch(path, mtime: mtime) end |
#unlink(*paths) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
141 142 143 |
# File 'lib/puppet/file_system/file_impl.rb', line 141 def unlink(*paths) ::File.unlink(*paths) end |
#writable?(path) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
113 114 115 |
# File 'lib/puppet/file_system/file_impl.rb', line 113 def writable?(path) path.writable? end |