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 47 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 53 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 82 def delete(*wildcards) wildcards.each do |wildcard| Dir[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 97 def delete_all(*wildcards) wildcards.each do |wildcard| Dir[wildcard].each do |fn| next if ! File.exist?(fn) if File.directory?(fn) Dir["#{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 162 def for_files(*wildcards) wildcards.each do |wildcard| Dir[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 126 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 29 def install(wildcard, dest_dir, mode) Dir[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 58 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 64 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 146 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 117 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 152 def quiet(&block) with_verbose(false, &block) end
Run a Ruby interpreter with the given arguments.
# File lib/rake/contrib/sys.rb, line 42 def ruby(*args) run "#{RUBY} #{args.join(' ')}" end
Run the system command cmd
.
# File lib/rake/contrib/sys.rb, line 36 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 138 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 69 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 75 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 157 def verbose(&block) with_verbose(true, &block) end
Private Instance Methods
# File lib/rake/contrib/sys.rb, line 174 def for_matching_files(wildcard, dest_dir) Dir[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 183 def with_verbose(v) oldverbose = $verbose $verbose = v yield ensure $verbose = oldverbose end