module SmartS3Sync::DigestCache
Public Class Methods
digest(filename)
click to toggle source
# File lib/smart_s3_sync/digest_cache.rb, line 7 def digest(filename) if (cr = cache_record(filename)) && File.mtime(filename).to_i <= cr[0] cr[1] else Digest::MD5.file(filename).hexdigest.tap do |digest| save_record(filename, File.mtime(filename).to_i, digest) end end end
save_record(filename, mtime, digest)
click to toggle source
# File lib/smart_s3_sync/digest_cache.rb, line 17 def save_record(filename, mtime, digest) database.execute("INSERT OR REPLACE INTO files (filename, mtime, digest) VALUES (?, ?, ?)", [filename, mtime, digest]) end
Private Class Methods
cache_record(filename)
click to toggle source
# File lib/smart_s3_sync/digest_cache.rb, line 23 def cache_record(filename) crow = nil database.execute("SELECT mtime, digest FROM files WHERE filename = ? LIMIT 1", [filename]) do |row| crow = row end crow end
database()
click to toggle source
# File lib/smart_s3_sync/digest_cache.rb, line 31 def database @database ||= SQLite3::Database.new(database_filename).tap do |db| if db.execute("SELECT COUNT(name) FROM sqlite_master WHERE type='table' AND name='files'")[0][0] < 1 db.execute %{ CREATE TABLE files ( filename TEXT PRIMARY KEY, mtime DATETIME, digest VARCHAR(255) ) } end end end
database_filename()
click to toggle source
# File lib/smart_s3_sync/digest_cache.rb, line 45 def database_filename File.expand_path('.filescache.db', '~') end