Module: Lemans::TreeDigest

Defined in:
lib/lemans/tree_digest.rb

Overview

A directory's contents reduced to one number. Paths hash alongside contents, and dotfiles are included — glob skips them by default.

Class Method Summary collapse

Class Method Details

.call(dir) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/lemans/tree_digest.rb', line 9

def self.call(dir)
  dir = Pathname(dir)
  sha = Digest::SHA256.new
  dir.glob("**/*", File::FNM_DOTMATCH).sort.each do |entry|
    next unless entry.file?

    path = entry.relative_path_from(dir).to_s
    contents = entry.binread
    sha << [path.bytesize, contents.bytesize].pack("Q>Q>")
    sha << path
    sha << contents
  end
  sha.hexdigest
end