Module: Sys

Extended by:
Sys
Included in:
Sys
Defined in:
lib/rake/contrib/sys.rb

Overview

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.

Constant Summary collapse

RUBY =
RbConfig::CONFIG['ruby_install_name']

Instance Method Summary collapse

Instance Method Details

#copy(file_name, dest_file) ⇒ Object

Copy a single file from file_name to dest_file.


48
49
50
51
# 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_files(wildcard, dest_dir) ⇒ Object

Copy all files matching wildcard into the directory dest_dir.


54
55
56
# 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

#delete(*wildcards) ⇒ Object

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.


83
84
85
86
87
88
89
90
91
92
93
94
95
# 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

#delete_all(*wildcards) ⇒ Object

Recursively delete all files and directories matching wildcard.


98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# 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

#for_files(*wildcards) ⇒ Object

Perform a block with each file matching a set of wildcards.


163
164
165
166
167
168
169
# 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

#indir(dir) ⇒ Object

Make dir the current working directory for the duration of executing the given block.


127
128
129
130
131
132
133
# File 'lib/rake/contrib/sys.rb', line 127

def indir(dir)
  olddir = Dir.pwd
  Dir.chdir(dir)
  yield
ensure
  Dir.chdir(olddir)
end

#install(wildcard, dest_dir, mode) ⇒ Object

Install all the files matching wildcard into the dest_dir directory. The permission mode is set to mode.


30
31
32
33
34
# 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.


59
60
61
62
# 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.


65
66
67
# 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

#log(msg) ⇒ Object

Write a message to standard error if $verbose is enabled.


147
148
149
150
# File 'lib/rake/contrib/sys.rb', line 147

def log(msg)
  print "  " if $trace && $verbose
  $stderr.puts msg if $verbose
end

#makedirs(*dirs) ⇒ Object

Make the directories given in dirs.


118
119
120
121
122
123
# File 'lib/rake/contrib/sys.rb', line 118

def makedirs(*dirs)
  dirs.each do |fn|
    log "Making directory #{fn}"
    File.makedirs(fn)
  end
end

#quiet(&block) ⇒ Object

Perform a block with $verbose disabled.


153
154
155
# File 'lib/rake/contrib/sys.rb', line 153

def quiet(&block)
  with_verbose(false, &block)
end

#ruby(*args) ⇒ Object

Run a Ruby interpreter with the given arguments.


43
44
45
# File 'lib/rake/contrib/sys.rb', line 43

def ruby(*args)
  run "#{RUBY} #{args.join(' ')}"
end

#run(cmd) ⇒ Object

Run the system command cmd.


37
38
39
40
# File 'lib/rake/contrib/sys.rb', line 37

def run(cmd)
  log cmd
  system(cmd) or fail "Command Failed: [#{cmd}]"
end

#split_all(path) ⇒ Object

Split a file path into individual directory names.

For example:

split_all("a/b/c") =>  ['a', 'b', 'c']

139
140
141
142
143
144
# 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.


70
71
72
73
# 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.


76
77
78
# 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

#verbose(&block) ⇒ Object

Perform a block with $verbose enabled.


158
159
160
# File 'lib/rake/contrib/sys.rb', line 158

def verbose(&block)
  with_verbose(true, &block)
end