summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJames Turnbull <james@lovedthanlost.net>2008-02-15 13:17:12 +1100
committerJames Turnbull <james@lovedthanlost.net>2008-02-15 13:17:12 +1100
commitc004d2c081ef53952f7a30a32d0208e10747cbe0 (patch)
tree20afa250ff3ddc7936f6a9a1b9a585d3337ae836 /lib
parentdf3fbc77b52bde3ce643d25f4a0d28a2cd35ef52 (diff)
parent6013b2500d9e799f8aba9f614de15d4eb477860a (diff)
downloadpuppet-c004d2c081ef53952f7a30a32d0208e10747cbe0.tar.gz
puppet-c004d2c081ef53952f7a30a32d0208e10747cbe0.tar.xz
puppet-c004d2c081ef53952f7a30a32d0208e10747cbe0.zip
Merge branch '0.24.x' of git://reductivelabs.com/puppet into 0.24.x
Diffstat (limited to 'lib')
-rw-r--r--lib/puppet/util/checksums.rb64
1 files changed, 51 insertions, 13 deletions
diff --git a/lib/puppet/util/checksums.rb b/lib/puppet/util/checksums.rb
index 6f6ea59b5..598b3adfa 100644
--- a/lib/puppet/util/checksums.rb
+++ b/lib/puppet/util/checksums.rb
@@ -1,37 +1,75 @@
+# A stand-alone module for calculating checksums
+# in a generic way.
module Puppet::Util::Checksums
+ # Calculate a checksum using Digest::MD5.
def md5(content)
require 'digest/md5'
Digest::MD5.hexdigest(content)
end
- def md5_file(filename)
+ # Calculate a checksum of the first 500 chars of the content using Digest::MD5.
+ def md5lite(content)
+ md5(content[0..511])
+ end
+
+ # Calculate a checksum of a file's content using Digest::MD5.
+ def md5_file(filename, lite = false)
require 'digest/md5'
- incr_digest = Digest::MD5.new()
- File.open(filename, 'r') do |file|
- file.each_line do |line|
- incr_digest << line
- end
- end
+ digest = Digest::MD5.new()
+ return checksum_file(digest, filename, lite)
+ end
+
+ # Calculate a checksum of the first 500 chars of a file's content using Digest::MD5.
+ def md5lite_file(filename)
+ md5_file(filename, true)
+ end
- return incr_digest.hexdigest
+ # Return the :mtime timestamp of a file.
+ def mtime_file(filename)
+ File.stat(filename).send(:mtime)
end
+ # Calculate a checksum using Digest::SHA1.
def sha1(content)
require 'digest/sha1'
Digest::SHA1.hexdigest(content)
end
- def sha1_file(filename)
+ # Calculate a checksum of the first 500 chars of the content using Digest::SHA1.
+ def sha1lite(content)
+ sha1(content[0..511])
+ end
+
+ # Calculate a checksum of a file's content using Digest::SHA1.
+ def sha1_file(filename, lite = false)
require 'digest/sha1'
- incr_digest = Digest::SHA1.new()
+ digest = Digest::SHA1.new()
+ return checksum_file(digest, filename, lite)
+ end
+
+ # Calculate a checksum of the first 500 chars of a file's content using Digest::SHA1.
+ def sha1lite_file(filename)
+ sha1_file(filename, true)
+ end
+
+ # Return the :ctime of a file.
+ def timestamp_file(filename)
+ File.stat(filename).send(:ctime)
+ end
+
+ private
+
+ # Perform an incremental checksum on a file.
+ def checksum_file(digest, filename, lite = false)
File.open(filename, 'r') do |file|
- file.each_line do |line|
- incr_digest << line
+ while content = file.read(512)
+ digest << content
+ break if lite
end
end
- return incr_digest.hexdigest
+ return digest.hexdigest
end
end