A
anne001
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...f86841?lnk=gst&q=repo&rnum=2#fa358e55b7f86841
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...f86841?lnk=gst&q=repo&rnum=2#fa358e55b7f86841