module FileOperations

This module requires: verbose?, no_harm?

This module requires: verbose?, no_harm?

Constants

DIR_REJECT

Public Instance Methods

command(*args) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 653
def command(*args)
  $stderr.puts args.join(' ') if verbose?
  system(*args) or raise RuntimeError,
      "system(#{args.map{|a| a.inspect }.join(' ')}) failed"
end
diff?(new_content, path) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 648
def diff?(new_content, path)
  return true unless File.exist?(path)
  new_content != File.binread(path)
end
directories_of(dir) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 679
def directories_of(dir)
  Dir.open(dir) {|d|
    return d.select {|ent| File.dir?("#{dir}/#{ent}") } - DIR_REJECT
  }
end
extdir?(dir) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 667
def extdir?(dir)
  File.exist?("#{dir}/MANIFEST") or File.exist?("#{dir}/extconf.rb")
end
files_of(dir) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 671
def files_of(dir)
  Dir.open(dir) {|d|
    return d.select {|ent| File.file?("#{dir}/#{ent}") }
  }
end
force_remove_file(path) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 610
def force_remove_file(path)
  begin
    remove_file path
  rescue
  end
end
install(from, dest, mode, prefix = nil) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 622
def install(from, dest, mode, prefix = nil)
  $stderr.puts "install #{from} #{dest}" if verbose?
  return if no_harm?

  realdest = prefix ? prefix + File.expand_path(dest) : dest
  realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest)
  str = File.binread(from)
  if diff?(str, realdest)
    verbose_off {
      rm_f realdest if File.exist?(realdest)
    }
    File.open(realdest, 'wb') {|f|
      f.write str
    }
    File.chmod mode, realdest

    File.open("#{objdir_root()}/InstalledFiles", 'a') {|f|
      if prefix
        f.puts realdest.sub(prefix, '')
      else
        f.puts realdest
      end
    }
  end
end
make(task = nil) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 663
def make(task = nil)
  command(*[config('makeprog'), task].compact)
end
mkdir_p(dirname, prefix = nil) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 538
def mkdir_p(dirname, prefix = nil)
  dirname = prefix + File.expand_path(dirname) if prefix
  $stderr.puts "mkdir -p #{dirname}" if verbose?
  return if no_harm?

  # Does not check '/', it's too abnormal.
  dirs = File.expand_path(dirname).split(%r<(?=/)>)
  if /\A[a-z]:\z/i =~ dirs[0]
    disk = dirs.shift
    dirs[0] = disk + dirs[0]
  end
  dirs.each_index do |idx|
    path = dirs[0..idx].join('')
    Dir.mkdir path unless File.dir?(path)
  end
end
move_file(src, dest) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 597
def move_file(src, dest)
  force_remove_file dest
  begin
    File.rename src, dest
  rescue
    File.open(dest, 'wb') {|f|
      f.write File.binread(src)
    }
    File.chmod File.stat(src).mode, dest
    File.unlink src
  end
end
remove_file(path) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 617
def remove_file(path)
  File.chmod 0777, path
  File.unlink path
end
remove_tree(path) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 567
def remove_tree(path)
  if File.symlink?(path)
    remove_file path
  elsif File.dir?(path)
    remove_tree0 path
  else
    force_remove_file path
  end
end
remove_tree0(path) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 577
def remove_tree0(path)
  Dir.foreach(path) do |ent|
    next if ent == '.'
    next if ent == '..'
    entpath = "#{path}/#{ent}"
    if File.symlink?(entpath)
      remove_file entpath
    elsif File.dir?(entpath)
      remove_tree0 entpath
    else
      force_remove_file entpath
    end
  end
  begin
    Dir.rmdir path
  rescue Errno::ENOTEMPTY
    # directory may not be empty
  end
end
rm_f(path) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 555
def rm_f(path)
  $stderr.puts "rm -f #{path}" if verbose?
  return if no_harm?
  force_remove_file path
end
rm_rf(path) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 561
def rm_rf(path)
  $stderr.puts "rm -rf #{path}" if verbose?
  return if no_harm?
  remove_tree path
end
ruby(*args) click to toggle source
# File pkg/statsample-1.4.0/setup.rb, line 659
def ruby(*args)
  command config('rubyprog'), *args
end