diff options
author | danielsdeleo <dan@opscode.com> | 2012-12-21 12:08:53 -0800 |
---|---|---|
committer | danielsdeleo <dan@opscode.com> | 2012-12-21 12:15:18 -0800 |
commit | 72cf70f4495009e0f6fc8ab7e23b4eb8232d371b (patch) | |
tree | 0c686878aa3f56727e8e801b56e66b6ffd3d4da2 /lib/chef/digester.rb | |
parent | 67a74e5029c5db0bffc63a4709ecf125353a247c (diff) | |
download | chef-72cf70f4495009e0f6fc8ab7e23b4eb8232d371b.tar.gz |
[CHEF-3715] rename files checksum_cache -> digester
Diffstat (limited to 'lib/chef/digester.rb')
-rw-r--r-- | lib/chef/digester.rb | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/lib/chef/digester.rb b/lib/chef/digester.rb new file mode 100644 index 0000000000..669ff8b8a5 --- /dev/null +++ b/lib/chef/digester.rb @@ -0,0 +1,73 @@ +# +# Author:: Adam Jacob (<adam@opscode.com>) +# Author:: Daniel DeLeo (<dan@kallistec.com>) +# Copyright:: Copyright (c) 2009 Opscode, Inc. +# Copyright:: Copyright (c) 2009 Daniel DeLeo +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require 'digest' + +class Chef + class Digester + + def self.instance + @instance ||= new + end + + def self.checksum_for_file(*args) + instance.checksum_for_file(*args) + end + + def validate_checksum(*args) + self.class.validate_checksum(*args) + end + + def checksum_for_file(file) + generate_checksum(file) + end + + def generate_checksum(file) + checksum_file(file, Digest::SHA256.new) + end + + def self.generate_md5_checksum_for_file(*args) + instance.generate_md5_checksum_for_file(*args) + end + + def generate_md5_checksum_for_file(file) + checksum_file(file, Digest::MD5.new) + end + + def generate_md5_checksum(io) + checksum_io(io, Digest::MD5.new) + end + + private + + def checksum_file(file, digest) + File.open(file, 'rb') { |f| checksum_io(f, digest) } + end + + def checksum_io(io, digest) + while chunk = io.read(1024 * 8) + digest.update(chunk) + end + digest.hexdigest + end + + end +end + |