module Sys
Sys provides a number of file manipulation tools for
the convenience of writing Rakefiles. All commands in this module will
announce their activity on standard output if the $verbose flag is set
($verbose = true is the default). You can control this by globally setting
$verbose or by using the verbose
and quiet
methods.
Sys has been deprecated in favor of the FileUtils module available in Ruby 1.8.
Constants
- RUBY
Public Instance Methods
Copy a single file from file_name
to dest_file
.
# File lib/rake/contrib/sys.rb, line 48 def copy(file_name, dest_file) log "Copying file #{file_name} to #{dest_file}" File.copy(file_name, dest_file) end
Copy all files matching wildcard
into the directory
dest_dir
.
# File lib/rake/contrib/sys.rb, line 54 def copy_files(wildcard, dest_dir) for_matching_files(wildcard, dest_dir) { |from, to| copy(from, to) } end
Remove all files matching wildcard
. If a matching file is a
directory, it must be empty to be removed. used delete_all
to
recursively delete directories.
# File lib/rake/contrib/sys.rb, line 83 def delete(*wildcards) wildcards.each do |wildcard| FileList.glob(wildcard).each do |fn| if File.directory?(fn) log "Deleting directory #{fn}" Dir.delete(fn) else log "Deleting file #{fn}" File.delete(fn) end end end end
Recursively delete all files and directories matching
wildcard
.
# File lib/rake/contrib/sys.rb, line 98 def delete_all(*wildcards) wildcards.each do |wildcard| FileList.glob(wildcard).each do |fn| next if ! File.exist?(fn) if File.directory?(fn) FileList.glob("#{fn}/*").each do |subfn| next if subfn=='.' || subfn=='..' delete_all(subfn) end log "Deleting directory #{fn}" Dir.delete(fn) else log "Deleting file #{fn}" File.delete(fn) end end end end
Perform a block with each file matching a set of wildcards.
# File lib/rake/contrib/sys.rb, line 163 def for_files(*wildcards) wildcards.each do |wildcard| FileList.glob(wildcard).each do |fn| yield(fn) end end end
Make dir
the current working directory for the duration of
executing the given block.
# File lib/rake/contrib/sys.rb, line 127 def indir(dir) olddir = Dir.pwd Dir.chdir(dir) yield ensure Dir.chdir(olddir) end
Install all the files matching wildcard
into the
dest_dir
directory. The permission mode is set to
mode
.
# File lib/rake/contrib/sys.rb, line 30 def install(wildcard, dest_dir, mode) FileList.glob(wildcard).each do |fn| File.install(fn, dest_dir, mode, $verbose) end end
Link file_name
to dest_file
.
# File lib/rake/contrib/sys.rb, line 59 def link(file_name, dest_file) log "Linking file #{file_name} to #{dest_file}" File.link(file_name, dest_file) end
Link all files matching wildcard
into the directory
dest_dir
.
# File lib/rake/contrib/sys.rb, line 65 def link_files(wildcard, dest_dir) for_matching_files(wildcard, dest_dir) { |from, to| link(from, to) } end
Write a message to standard error if $verbose is enabled.
# File lib/rake/contrib/sys.rb, line 147 def log(msg) print " " if $trace && $verbose $stderr.puts msg if $verbose end
Make the directories given in dirs
.
# File lib/rake/contrib/sys.rb, line 118 def makedirs(*dirs) dirs.each do |fn| log "Making directory #{fn}" File.makedirs(fn) end end
Perform a block with $verbose disabled.
# File lib/rake/contrib/sys.rb, line 153 def quiet(&block) with_verbose(false, &block) end
Run a Ruby interpreter with the given arguments.
# File lib/rake/contrib/sys.rb, line 43 def ruby(*args) run "#{RUBY} #{args.join(' ')}" end
Run the system command cmd
.
# File lib/rake/contrib/sys.rb, line 37 def run(cmd) log cmd system(cmd) or fail "Command Failed: [#{cmd}]" end
Split a file path into individual directory names.
For example:
split_all("a/b/c") => ['a', 'b', 'c']
# File lib/rake/contrib/sys.rb, line 139 def split_all(path) head, tail = File.split(path) return [tail] if head == '.' || tail == '/' return [head, tail] if head == '/' return split_all(head) + [tail] end
Symlink file_name
to dest_file
.
# File lib/rake/contrib/sys.rb, line 70 def symlink(file_name, dest_file) log "Symlinking file #{file_name} to #{dest_file}" File.symlink(file_name, dest_file) end
Symlink all files matching wildcard
into the directory
dest_dir
.
# File lib/rake/contrib/sys.rb, line 76 def symlink_files(wildcard, dest_dir) for_matching_files(wildcard, dest_dir) { |from, to| link(from, to) } end
Perform a block with $verbose enabled.
# File lib/rake/contrib/sys.rb, line 158 def verbose(&block) with_verbose(true, &block) end
Private Instance Methods
# File lib/rake/contrib/sys.rb, line 175 def for_matching_files(wildcard, dest_dir) FileList.glob(wildcard).each do |fn| dest_file = File.join(dest_dir, fn) parent = File.dirname(dest_file) makedirs(parent) if ! File.directory?(parent) yield(fn, dest_file) end end
# File lib/rake/contrib/sys.rb, line 184 def with_verbose(v) oldverbose = $verbose $verbose = v yield ensure $verbose = oldverbose end