Files

FileUtils

Public Instance Methods

amass(include_globs, exclude_globs=[], ignore=[]) click to toggle source

An intergrated glob like method that take a set of include globs, exclude globs and ignore globs to produce a collection of paths.

The ignore_globs differ from exclude_globs in that they match by the basename of the path rather than the whole pathname.

TODO: Should ignore be based on any portion of the path, not just the basename?

# File lib/path/fileutils.rb, line 70
def amass(include_globs, exclude_globs=[], ignore=[])
  include_files = include_globs.flatten.map{ |g| Dir.glob(g) }.flatten.uniq
  exclude_files = exclude_globs.flatten.map{ |g| Dir.glob(g) }.flatten.uniq

  include_globs = include_globs.map{ |f| File.directory?(f) ? File.join(f, '**/*') : f } # Recursive!
  exclude_globs = exclude_globs.map{ |f| File.directory?(f) ? File.join(f, '**/*') : f } # Recursive!

  include_files = include_globs.flatten.map{ |g| Dir.glob(g) }.flatten.uniq
  exclude_files = exclude_globs.flatten.map{ |g| Dir.glob(g) }.flatten.uniq

  files = include_files - exclude_files

  files = files.reject{ |f| ignore.any?{ |x| File.fnmatch?(x, File.basename(f)) } }

  files
end
out_of_date?(path, *sources) click to toggle source

DEPRECATE Does a path need updating, based on given sources? This compares mtimes of give paths. Returns false if the path needs to be updated.

# File lib/path/fileutils.rb, line 51
def out_of_date?(path, *sources)
  return true unless File.exist?(path)

  sources = sources.collect{ |source| Dir.glob(source) }.flatten
  mtimes  = sources.collect{ |file| File.mtime(file) }

  return true if mtimes.empty?  # TODO: This the way to go here?

  File.mtime(path) < mtimes.max
end
outofdate?(path, *sources) click to toggle source

Opposite of uptodate?

# File lib/path/fileutils.rb, line 41
def outofdate?(path, *sources)
  #return true unless File.exist?(path)
  ! uptodate?(path, sources.flatten)
end
stage(stage_directory, source_directory, files) click to toggle source

Stage by hard linking included files to a stage directory.

stage_directory   Stage directory.
files             Files to link to stage.

TODO: Rename to linkstage or something less likely to name clash? TODO: Add options for :verbose, :noop and :dryrun ?

# File lib/path/fileutils.rb, line 17
def stage(stage_directory, source_directory, files)
  stage_directory, source_directory = stage_directory.to_s, source_directory.to_s
  # Ensure existance of staging area.
  rm_r(stage_directory) if File.directory?(stage_directory)
  mkdir_p(stage_directory)
  # Link files into staging area.
  files.each do |f|
    src  = File.join(source_directory, f)
    file = File.join(stage_directory, f)
    if File.directory?(src)
      mkdir_p(file) unless File.exist?(file)
    else
      fdir = File.dirname(file)
      mkdir_p(fdir) unless File.exist?(fdir)
      unless File.exist?(file) and File.mtime(file) >= File.mtime(src)
        ln(src, file) #safe_ln ?
      end
    end
  end
  return stage_directory
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.