ev/ftools.rb in rwdmovies-0.6 vs ev/ftools.rb in rwdmovies-0.7

- old
+ new

@@ -1,170 +1,170 @@ -require "ftools" - -class Dir - def self.mkdirrec(dir) - pdir = File.dirname(dir) - - if not pdir.empty? and not File.directory?(pdir) - Dir.mkdirrec(pdir) - end - - Dir.mkdir(dir) rescue nil - end - - def self.copy(from, to) - if File.directory?(from) - pdir = Dir.pwd - todir = File.expand_path(to) - - mkdirrec(todir) - - Dir.chdir(from) - Dir.new(".").each do |e| - Dir.copy(e, todir+"/"+e) if not [".", ".."].include?(e) - end - Dir.chdir(pdir) - else - todir = File.dirname(File.expand_path(to)) - - mkdirrec(todir) - - File.copy(from, to) - end - end - - def self.move(from, to) - Dir.copy(from, to) - Dir.rm_rf(from) - end - - def self.rm_rf(entry) - if File.ftype(entry) == "directory" - pdir = Dir.pwd - - Dir.chdir(entry) - Dir.new(".").each do |e| - Dir.rm_rf(e) if not [".", ".."].include?(e) - end - Dir.chdir(pdir) - - Dir.delete(entry) - else - File.delete(entry) - end - end - - def self.find(entry=nil, mask=nil) - entry = "." if entry.nil? - - entry = entry.gsub!(/[\/\\]*$/, "") unless entry.nil? - - mask = /^#{mask}$/i if mask.kind_of?(String) - - res = [] - - if File.directory?(entry) - pdir = Dir.pwd - - res += ["%s/" % entry] if mask.nil? or entry =~ mask - - begin - Dir.chdir(entry) - - begin - Dir.new(".").each do |e| - res += Dir.find(e, mask).collect{|e| entry+"/"+e} unless [".", ".."].include?(e) - end - ensure - Dir.chdir(pdir) - end - rescue Errno::EACCES => error - puts error - end - else - res += [entry] if mask.nil? or entry =~ mask - end - - res - end -end - -class File - def self.rollbackup(file, mode=nil) - backupfile = file + ".RB.BACKUP" - controlfile = file + ".RB.CONTROL" - res = nil - - File.touch(file) unless File.file?(file) - - # Rollback - - if File.file?(backupfile) and File.file?(controlfile) - $stdout.puts "Restoring #{file}..." - - File.copy(backupfile, file) # Rollback from phase 3 - end - - # Reset - - File.delete(backupfile) if File.file?(backupfile) # Reset from phase 2 or 3 - File.delete(controlfile) if File.file?(controlfile) # Reset from phase 3 or 4 - - # Backup - - File.copy(file, backupfile) # Enter phase 2 - File.touch(controlfile) # Enter phase 3 - - # The real thing - - if block_given? - if mode.nil? - res = yield - else - File.open(file, mode) do |f| - res = yield(f) - end - end - end - - # Cleanup - - File.delete(backupfile) # Enter phase 4 - File.delete(controlfile) # Enter phase 5 - - # Return, like File.open - - res = File.open(file, (mode or "r")) unless block_given? - - res - end - - def self.touch(file) - File.open(file, "a"){|f|} - end - - def self.which(file) - res = nil - - if windows? - file = file.gsub(/\.exe$/i, "") + ".exe" - sep = ";" - else - sep = ":" - end - - catch :stop do - ENV["PATH"].split(/#{sep}/).reverse.each do |d| - if File.directory?(d) - Dir.new(d).each do |e| - if e.downcase == file.downcase - res = File.expand_path(e, d) - throw :stop - end - end - end - end - end - - res - end -end +require "ftools" + +class Dir + def self.mkdirrec(dir) + pdir = File.dirname(dir) + + if not pdir.empty? and not File.directory?(pdir) + Dir.mkdirrec(pdir) + end + + Dir.mkdir(dir) rescue nil + end + + def self.copy(from, to) + if File.directory?(from) + pdir = Dir.pwd + todir = File.expand_path(to) + + mkdirrec(todir) + + Dir.chdir(from) + Dir.new(".").each do |e| + Dir.copy(e, todir+"/"+e) if not [".", ".."].include?(e) + end + Dir.chdir(pdir) + else + todir = File.dirname(File.expand_path(to)) + + mkdirrec(todir) + + File.copy(from, to) + end + end + + def self.move(from, to) + Dir.copy(from, to) + Dir.rm_rf(from) + end + + def self.rm_rf(entry) + if File.ftype(entry) == "directory" + pdir = Dir.pwd + + Dir.chdir(entry) + Dir.new(".").each do |e| + Dir.rm_rf(e) if not [".", ".."].include?(e) + end + Dir.chdir(pdir) + + Dir.delete(entry) + else + File.delete(entry) + end + end + + def self.find(entry=nil, mask=nil) + entry = "." if entry.nil? + + entry = entry.gsub!(/[\/\\]*$/, "") unless entry.nil? + + mask = /^#{mask}$/i if mask.kind_of?(String) + + res = [] + + if File.directory?(entry) + pdir = Dir.pwd + + res += ["%s/" % entry] if mask.nil? or entry =~ mask + + begin + Dir.chdir(entry) + + begin + Dir.new(".").each do |e| + res += Dir.find(e, mask).collect{|e| entry+"/"+e} unless [".", ".."].include?(e) + end + ensure + Dir.chdir(pdir) + end + rescue Errno::EACCES => error + puts error + end + else + res += [entry] if mask.nil? or entry =~ mask + end + + res + end +end + +class File + def self.rollbackup(file, mode=nil) + backupfile = file + ".RB.BACKUP" + controlfile = file + ".RB.CONTROL" + res = nil + + File.touch(file) unless File.file?(file) + + # Rollback + + if File.file?(backupfile) and File.file?(controlfile) + $stdout.puts "Restoring #{file}..." + + File.copy(backupfile, file) # Rollback from phase 3 + end + + # Reset + + File.delete(backupfile) if File.file?(backupfile) # Reset from phase 2 or 3 + File.delete(controlfile) if File.file?(controlfile) # Reset from phase 3 or 4 + + # Backup + + File.copy(file, backupfile) # Enter phase 2 + File.touch(controlfile) # Enter phase 3 + + # The real thing + + if block_given? + if mode.nil? + res = yield + else + File.open(file, mode) do |f| + res = yield(f) + end + end + end + + # Cleanup + + File.delete(backupfile) # Enter phase 4 + File.delete(controlfile) # Enter phase 5 + + # Return, like File.open + + res = File.open(file, (mode or "r")) unless block_given? + + res + end + + def self.touch(file) + File.open(file, "a"){|f|} + end + + def self.which(file) + res = nil + + if windows? + file = file.gsub(/\.exe$/i, "") + ".exe" + sep = ";" + else + sep = ":" + end + + catch :stop do + ENV["PATH"].split(/#{sep}/).reverse.each do |d| + if File.directory?(d) + Dir.new(d).each do |e| + if e.downcase == file.downcase + res = File.expand_path(e, d) + throw :stop + end + end + end + end + end + + res + end +end