Module: Lemans::Config::TreeDigest

Defined in:
lib/lemans/config/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



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

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