file-digests 0.0.9 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee2508a2c4d70b5a4847f6403d74848db85145b181ff103c4b9dbc631ea03720
4
- data.tar.gz: 7e0b68a73d34e54ba8b98b884f2184eda906ca9c11dac04d98607d8727ec1911
3
+ metadata.gz: fa2168306bdb4d923daef330ec22f3381bc2b3106f56a162b80dae94721e7799
4
+ data.tar.gz: f43dd24befade5a72e4fd0b878f7bd2abbd06266923c4d062b3c50b1d624b1e9
5
5
  SHA512:
6
- metadata.gz: db27ac6edfbe7f6c243d4e2c54cf2c0d6419328e751151e6745bad97836881116ea5710490532cf87c1c4a5f6f50d7495b1ae05863f78b66436a20e5c83f7884
7
- data.tar.gz: 3959e854c8b5539ba8e1882857730fd17f91ffb2f31252db070b31dcc69fb6fdf4ac02f99e2ce53ba1767085bada121840f2bb582f708ca6881128f92359cbb9
6
+ metadata.gz: 051d97686878d0d53cf3e2206c5e1f2ee8b0d4e678a7f8f5cc1edeb3fc5e34d706b6afdc2dc9c75a68863e9cc1a6afb6f14c4346ac46f2007c72427b38ed2ee2
7
+ data.tar.gz: a94aeec79e617d803f6f3e81bbabe07c68c0e287a0413ade53a4f085c007c92874f96432a5eb7505c4ca9057c4f5525a40f1f560f6ba05a258d0e78b4366bc7d
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'file-digests'
4
-
5
3
  QUIET = (ENV["QUIET"] == "true")
6
4
  TEST_ONLY = (ENV["TEST_ONLY"] == "true")
7
5
 
6
+ require 'file-digests'
7
+
8
8
  FileDigests.perform_check
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'file-digests'
4
-
5
3
  QUIET = (ENV["QUIET"] == "true")
6
4
  TEST_ONLY = true
7
5
 
6
+ require 'file-digests'
7
+
8
8
  FileDigests.perform_check
@@ -30,10 +30,8 @@ module FileDigests
30
30
  end
31
31
 
32
32
  def self.perform_check
33
- files_path = Pathname.new patch_path_string(ARGV[0] || ".")
34
- digest_database_path = Pathname.new patch_path_string(ARGV[1]) if ARGV[1]
35
- checker = Checker.new files_path, digest_database_path
36
- checker.check
33
+ checker = Checker.new ARGV[0], ARGV[1]
34
+ checker.perform_check
37
35
  end
38
36
 
39
37
  class DigestDatabase
@@ -154,22 +152,36 @@ module FileDigests
154
152
 
155
153
  class Checker
156
154
  def initialize files_path, digest_database_path
157
- @counters = {good: 0, updated: 0, new: 0, missing: 0, renamed: 0, likely_damaged: 0, exceptions: 0}
158
- @files_path = files_path
155
+ @files_path = Pathname.new(FileDigests::patch_path_string(files_path || ".")).cleanpath
159
156
  @prefix_to_remove = @files_path.to_s + '/'
160
157
 
161
- unless digest_database_path
162
- digest_database_path = @files_path + '.file-digests.sqlite'
158
+ raise "Files path must be a readable directory" unless (File.directory?(@files_path) && File.readable?(@files_path))
159
+
160
+ @digest_database_path = if digest_database_path
161
+ Pathname.new(FileDigests::patch_path_string(digest_database_path)).cleanpath
162
+ else
163
+ @files_path + '.file-digests.sqlite'
164
+ end
165
+
166
+ if File.directory?(@digest_database_path)
167
+ @digest_database_path = @digest_database_path + '.file-digests.sqlite'
168
+ end
169
+
170
+ if @files_path == @digest_database_path.dirname
163
171
  @skip_file_digests_sqlite = true
164
172
  end
165
173
 
166
- FileDigests::ensure_dir_exists @files_path
167
- FileDigests::ensure_dir_exists digest_database_path.dirname
174
+ FileDigests::ensure_dir_exists @digest_database_path.dirname
168
175
 
169
- @digest_database = DigestDatabase.new digest_database_path
176
+ if File.exist?(@digest_database_path.dirname + '.file-digests.sha512')
177
+ @use_sha512 = true
178
+ end
179
+
180
+ @digest_database = DigestDatabase.new @digest_database_path
181
+ @counters = {good: 0, updated: 0, new: 0, missing: 0, renamed: 0, likely_damaged: 0, exceptions: 0}
170
182
  end
171
183
 
172
- def check
184
+ def perform_check
173
185
  FileDigests::measure_time do
174
186
  walk_files do |filename|
175
187
  process_file filename
@@ -206,25 +218,27 @@ module FileDigests
206
218
  return if stat.socket?
207
219
 
208
220
  if @skip_file_digests_sqlite
209
- return if filename == '.file-digests.sqlite'
210
- return if filename == '.file-digests.sqlite-wal'
211
- return if filename == '.file-digests.sqlite-shm'
221
+ basename = File.basename(filename)
222
+ return if basename == '.file-digests.sha512'
223
+ return if basename == '.file-digests.sqlite'
224
+ return if basename == '.file-digests.sqlite-wal'
225
+ return if basename == '.file-digests.sqlite-shm'
212
226
  end
213
227
 
214
228
  @digest_database.insert_or_update(
215
- filename.delete_prefix(@prefix_to_remove).unicode_normalize(:nfkc),
229
+ filename.delete_prefix(@prefix_to_remove).encode('utf-8', universal_newline: true).unicode_normalize(:nfkc),
216
230
  stat.mtime.utc.strftime('%Y-%m-%d %H:%M:%S'),
217
231
  get_file_digest(filename),
218
232
  @counters
219
233
  )
220
234
  rescue => exception
221
235
  @counters[:exceptions] += 1
222
- STDERR.puts "EXCEPTION: #{filename}: #{exception.message}"
236
+ STDERR.puts "EXCEPTION: #{filename.encode('utf-8', universal_newline: true)}: #{exception.message}"
223
237
  end
224
238
 
225
239
  def get_file_digest filename
226
240
  File.open(filename, 'rb') do |io|
227
- digest = Digest::SHA512.new
241
+ digest = (@use_sha512 ? Digest::SHA512 : Digest::SHA256).new
228
242
  buffer = ""
229
243
  while io.read(40960, buffer)
230
244
  digest.update(buffer)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: file-digests
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stanislav Senotrusov