From: anne001 Date: 2006-08-02T10:15:06+09:00 Subject: Can you explain what this repo (yaml/Marshal) code do? repositiory is a hash keyed on some kind of check sum derived from the file. But what is the use of Marshal? something to do with memory management, instead of writing to file? What is the format of what is spewed out? REPO_FILE = "repo.bin".freeze class Repository attr_accessor :main_dir, :duplicate_dir, :extensions def initialize(extensions = %w{mp3 ogg}) @extension = extensions @repository = {} end def process_dir(dir) # find all files with the extensions we support Dir[File.join(dir, "*.{#{extensions.join(',')}}")].each do |f| process_file( File.join(dir, f) ) end end def process_file(file) digest = digest(file) name = @repository[digest] if name target = duplicate_dir # ... else target = main_dir # ... end FileUtils.cp( file, File.join( target, File.basename( file ) ) ) end def digest(file) Digest::MD5.hexdigest( File.open(file, 'rb') {|io| io.read}) end def self.load(file) File.open(file, 'rb') {|io| Marshal.load(io)} end def save(file) File.open(file, 'wb') {|io| Marshal.dump(self, io)} end end repo = begin Repository.load( REPO_FILE ) rescue Exception => e # not there => create r = Repository.new r.main_dir = "foo" r.duplicate_dir = "bar" r end ARGV.each {|dir| repo.process_dir(dir)} repo.save( REPO_FILE ) http://groups.google.com/group/comp.lang.ruby/browse_frm/thread/88c20ef88239c54a/fa358e55b7f86841?lnk=gst&q=repo&rnum=2#fa358e55b7f86841