Class: Puppet::FileSystem::FileImpl
- Defined in:
- lib/puppet/file_system/file_impl.rb
Overview
Abstract implementation of the Puppet::FileSystem
Direct Known Subclasses
Instance Method Summary collapse
- #assert_path(path) ⇒ Object
- #basename(path) ⇒ Object
- #binread(path) ⇒ Object
- #children(path) ⇒ Object
- #chmod(mode, path) ⇒ Object
- #compare_stream(path, stream) ⇒ Object
- #dir(path) ⇒ Object
- #directory?(path) ⇒ Boolean
- #each_line(path, &block) ⇒ Object
- #exclusive_create(path, mode, &block) ⇒ Object
- #exclusive_open(path, mode, options = 'r', timeout = 300, &block) ⇒ Object
- #executable?(path) ⇒ Boolean
- #exist?(path) ⇒ Boolean
- #expand_path(path, dir_string = nil) ⇒ Object
- #file?(path) ⇒ Boolean
- #lstat(path) ⇒ Object
- #mkpath(path) ⇒ Object
- #open(path, mode, options, &block) ⇒ Object
- #path_string(path) ⇒ Object
- #pathname(path) ⇒ Object
- #read(path, opts = {}) ⇒ Object
- #read_preserve_line_endings(path) ⇒ Object
- #readlink(path) ⇒ Object
- #replace_file(path, mode = nil) ⇒ Object
- #size(path) ⇒ Object
- #stat(path) ⇒ Object
- #symlink(path, dest, options = {}) ⇒ Object
- #symlink?(path) ⇒ Boolean
- #touch(path, mtime: nil) ⇒ Object
- #unlink(*paths) ⇒ Object
- #writable?(path) ⇒ Boolean
Instance Method Details
#assert_path(path) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/puppet/file_system/file_impl.rb', line 9 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
38 39 40 |
# File 'lib/puppet/file_system/file_impl.rb', line 38 def basename(path) path.basename.to_s end |
#binread(path) ⇒ Object
90 91 92 |
# File 'lib/puppet/file_system/file_impl.rb', line 90 def binread(path) raise NotImplementedError end |
#children(path) ⇒ Object
122 123 124 |
# File 'lib/puppet/file_system/file_impl.rb', line 122 def children(path) path.children end |
#chmod(mode, path) ⇒ Object
154 155 156 |
# File 'lib/puppet/file_system/file_impl.rb', line 154 def chmod(mode, path) FileUtils.chmod(mode, path) end |
#compare_stream(path, stream) ⇒ Object
150 151 152 |
# File 'lib/puppet/file_system/file_impl.rb', line 150 def compare_stream(path, stream) open(path, 0, 'rb') { |this| FileUtils.compare_stream(this, stream) } end |
#dir(path) ⇒ Object
34 35 36 |
# File 'lib/puppet/file_system/file_impl.rb', line 34 def dir(path) path.dirname end |
#directory?(path) ⇒ Boolean
98 99 100 |
# File 'lib/puppet/file_system/file_impl.rb', line 98 def directory?(path) ::File.directory?(path) end |
#each_line(path, &block) ⇒ Object
74 75 76 77 78 79 80 |
# File 'lib/puppet/file_system/file_impl.rb', line 74 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
46 47 48 49 |
# File 'lib/puppet/file_system/file_impl.rb', line 46 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
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/puppet/file_system/file_impl.rb', line 51 def exclusive_open(path, mode, = 'r', timeout = 300, &block) wait = 0.001 + (Kernel.rand / 1000) written = false while !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
106 107 108 |
# File 'lib/puppet/file_system/file_impl.rb', line 106 def executable?(path) ::File.executable?(path) end |
#exist?(path) ⇒ Boolean
94 95 96 |
# File 'lib/puppet/file_system/file_impl.rb', line 94 def exist?(path) ::File.exist?(path) end |
#expand_path(path, dir_string = nil) ⇒ Object
25 26 27 28 |
# File 'lib/puppet/file_system/file_impl.rb', line 25 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
102 103 104 |
# File 'lib/puppet/file_system/file_impl.rb', line 102 def file?(path) ::File.file?(path) end |
#lstat(path) ⇒ Object
146 147 148 |
# File 'lib/puppet/file_system/file_impl.rb', line 146 def lstat(path) File.lstat(path) end |
#mkpath(path) ⇒ Object
118 119 120 |
# File 'lib/puppet/file_system/file_impl.rb', line 118 def mkpath(path) path.mkpath end |
#open(path, mode, options, &block) ⇒ Object
30 31 32 |
# File 'lib/puppet/file_system/file_impl.rb', line 30 def open(path, mode, , &block) ::File.open(path, , mode, &block) end |
#path_string(path) ⇒ Object
21 22 23 |
# File 'lib/puppet/file_system/file_impl.rb', line 21 def path_string(path) path.to_s end |
#pathname(path) ⇒ Object
5 6 7 |
# File 'lib/puppet/file_system/file_impl.rb', line 5 def pathname(path) path.is_a?(Pathname) ? path : Pathname.new(path) end |
#read(path, opts = {}) ⇒ Object
82 83 84 |
# File 'lib/puppet/file_system/file_impl.rb', line 82 def read(path, opts = {}) path.read(**opts) end |
#read_preserve_line_endings(path) ⇒ Object
86 87 88 |
# File 'lib/puppet/file_system/file_impl.rb', line 86 def read_preserve_line_endings(path) read(path) end |
#readlink(path) ⇒ Object
134 135 136 |
# File 'lib/puppet/file_system/file_impl.rb', line 134 def readlink(path) File.readlink(path) end |
#replace_file(path, mode = nil) ⇒ Object
158 159 160 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 |
# File 'lib/puppet/file_system/file_impl.rb', line 158 def replace_file(path, mode = nil) begin stat = Puppet::FileSystem.lstat(path) gid = stat.gid uid = stat.uid mode ||= stat.mode & 07777 rescue Errno::ENOENT mode ||= 0640 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, Puppet::FileSystem.path_string(path)) ensure tempfile.close! end end |
#size(path) ⇒ Object
42 43 44 |
# File 'lib/puppet/file_system/file_impl.rb', line 42 def size(path) path.size end |
#stat(path) ⇒ Object
142 143 144 |
# File 'lib/puppet/file_system/file_impl.rb', line 142 def stat(path) File.stat(path) end |
#symlink(path, dest, options = {}) ⇒ Object
126 127 128 |
# File 'lib/puppet/file_system/file_impl.rb', line 126 def symlink(path, dest, = {}) FileUtils.symlink(path, dest, ) end |
#symlink?(path) ⇒ Boolean
130 131 132 |
# File 'lib/puppet/file_system/file_impl.rb', line 130 def symlink?(path) File.symlink?(path) end |
#touch(path, mtime: nil) ⇒ Object
114 115 116 |
# File 'lib/puppet/file_system/file_impl.rb', line 114 def touch(path, mtime: nil) ::FileUtils.touch(path, mtime: mtime) end |
#unlink(*paths) ⇒ Object
138 139 140 |
# File 'lib/puppet/file_system/file_impl.rb', line 138 def unlink(*paths) File.unlink(*paths) end |
#writable?(path) ⇒ Boolean
110 111 112 |
# File 'lib/puppet/file_system/file_impl.rb', line 110 def writable?(path) path.writable? end |