Sha256: 6012c8a95aa5292e54ea4b339b0134bd2bf67a496ffb180e0665a1cbad5a9efb

Contents?: true

Size: 1.32 KB

Versions: 26

Compression:

Stored size: 1.32 KB

Contents

module Autoproj
    module Ops
        # Shamelessly stolen from ActiveSupport
        def self.atomic_write(file_name, temp_dir = Dir.tmpdir)
            require 'tempfile' unless defined?(Tempfile)
            require 'fileutils' unless defined?(FileUtils)
    
            temp_file = Tempfile.new(File.basename(file_name), temp_dir)
            yield temp_file
            temp_file.flush
            begin temp_file.fsync
            rescue NotImplementedError
            end
            temp_file.close
    
            begin
                # Get original file permissions
                old_stat = File.stat(file_name)
            rescue Errno::ENOENT
                # No old permissions, write a temp file to determine the defaults
                check_name = File.join(
                    File.dirname(file_name), ".permissions_check.#{Thread.current.object_id}.#{Process.pid}.#{rand(1000000)}")
                File.open(check_name, "w") { }
                old_stat = File.stat(check_name)
                File.unlink(check_name)
            end

            # Overwrite original file with temp file
            FileUtils.mv(temp_file.path, file_name)

            # Set correct permissions on new file
            File.chown(old_stat.uid, old_stat.gid, file_name)
            File.chmod(old_stat.mode, file_name)
        end
    end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
autoproj-2.14.0 lib/autoproj/ops/atomic_write.rb
autoproj-2.13.0 lib/autoproj/ops/atomic_write.rb
autoproj-2.12.1 lib/autoproj/ops/atomic_write.rb
autoproj-2.12.0 lib/autoproj/ops/atomic_write.rb
autoproj-2.11.0 lib/autoproj/ops/atomic_write.rb
autoproj-2.10.2 lib/autoproj/ops/atomic_write.rb
autoproj-2.10.1 lib/autoproj/ops/atomic_write.rb
autoproj-2.10.0 lib/autoproj/ops/atomic_write.rb
autoproj-2.9.0 lib/autoproj/ops/atomic_write.rb
autoproj-2.8.8 lib/autoproj/ops/atomic_write.rb
autoproj-2.8.7 lib/autoproj/ops/atomic_write.rb
autoproj-2.8.6 lib/autoproj/ops/atomic_write.rb
autoproj-2.8.5 lib/autoproj/ops/atomic_write.rb
autoproj-2.8.5.b1 lib/autoproj/ops/atomic_write.rb
autoproj-2.8.4 lib/autoproj/ops/atomic_write.rb
autoproj-2.8.3 lib/autoproj/ops/atomic_write.rb
autoproj-2.8.2 lib/autoproj/ops/atomic_write.rb
autoproj-2.8.1 lib/autoproj/ops/atomic_write.rb
autoproj-2.8.0 lib/autoproj/ops/atomic_write.rb
autoproj-2.7.1 lib/autoproj/ops/atomic_write.rb