file-digests 0.0.14 → 0.0.15
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 +4 -4
- data/lib/file-digests.rb +36 -30
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 573cd697002f30d083625d586b4d03caf8c0f2cb763bed75e2bc9ac0a8b03612
|
4
|
+
data.tar.gz: 7cfbef9cdf7a9110c6b84b27591a498960515842675fabf6bf5512a78d7e54bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4916e667dccfb630a31fdaa74271a9c85a5f28a81f28143a4f5b406784e0e78652a29ff8e3fd9ff6507a5d90a4d9baacd2385f7de169f2c9dda6dc0f3b58866b
|
7
|
+
data.tar.gz: be5ae679122bbcffc703940b113e8d1e1057e46f7ce61ead1f52664f6b147bbd9c201d56b7faeafef29da30297cfde2e40f38c8e9400d615b9bbc6e630557259
|
data/lib/file-digests.rb
CHANGED
@@ -8,27 +8,6 @@ require 'sqlite3'
|
|
8
8
|
|
9
9
|
module FileDigests
|
10
10
|
|
11
|
-
def self.ensure_dir_exists path
|
12
|
-
if File.exist?(path)
|
13
|
-
unless File.directory?(path)
|
14
|
-
raise "#{path} is not a directory"
|
15
|
-
end
|
16
|
-
else
|
17
|
-
FileUtils.mkdir_p path
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.measure_time
|
22
|
-
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
23
|
-
yield
|
24
|
-
elapsed = (Process.clock_gettime(Process::CLOCK_MONOTONIC) - start).to_i
|
25
|
-
puts "Elapsed time: #{elapsed / 3600}h #{(elapsed % 3600) / 60}m #{elapsed % 60}s" unless QUIET
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.patch_path_string path
|
29
|
-
Gem.win_platform? ? path.gsub(/\\/, '/') : path
|
30
|
-
end
|
31
|
-
|
32
11
|
def self.perform_check
|
33
12
|
checker = Checker.new ARGV[0], ARGV[1]
|
34
13
|
checker.perform_check
|
@@ -152,13 +131,13 @@ module FileDigests
|
|
152
131
|
|
153
132
|
class Checker
|
154
133
|
def initialize files_path, digest_database_path
|
155
|
-
@files_path =
|
134
|
+
@files_path = cleanup_path(files_path || ".")
|
156
135
|
@prefix_to_remove = @files_path.to_s + '/'
|
157
136
|
|
158
137
|
raise "Files path must be a readable directory" unless (File.directory?(@files_path) && File.readable?(@files_path))
|
159
138
|
|
160
139
|
@digest_database_path = if digest_database_path
|
161
|
-
|
140
|
+
cleanup_path(digest_database_path)
|
162
141
|
else
|
163
142
|
@files_path + '.file-digests.sqlite'
|
164
143
|
end
|
@@ -171,7 +150,7 @@ module FileDigests
|
|
171
150
|
@skip_file_digests_sqlite = true
|
172
151
|
end
|
173
152
|
|
174
|
-
|
153
|
+
ensure_dir_exists @digest_database_path.dirname
|
175
154
|
|
176
155
|
if File.exist?(@digest_database_path.dirname + '.file-digests.sha512')
|
177
156
|
@use_sha512 = true
|
@@ -182,7 +161,7 @@ module FileDigests
|
|
182
161
|
end
|
183
162
|
|
184
163
|
def perform_check
|
185
|
-
|
164
|
+
measure_time do
|
186
165
|
walk_files do |filename|
|
187
166
|
process_file filename
|
188
167
|
end
|
@@ -197,11 +176,7 @@ module FileDigests
|
|
197
176
|
puts @counters.inspect
|
198
177
|
end
|
199
178
|
|
200
|
-
|
201
|
-
Dir.glob(@files_path + '**' + '*', File::FNM_DOTMATCH) do |filename|
|
202
|
-
yield filename
|
203
|
-
end
|
204
|
-
end
|
179
|
+
private
|
205
180
|
|
206
181
|
def process_file filename
|
207
182
|
return if File.symlink? filename
|
@@ -236,6 +211,30 @@ module FileDigests
|
|
236
211
|
STDERR.puts "EXCEPTION: #{filename.encode('utf-8', universal_newline: true)}: #{exception.message}"
|
237
212
|
end
|
238
213
|
|
214
|
+
def patch_path_string path
|
215
|
+
Gem.win_platform? ? path.gsub(/\\/, '/') : path
|
216
|
+
end
|
217
|
+
|
218
|
+
def cleanup_path path
|
219
|
+
Pathname.new(patch_path_string(digest_database_path)).cleanpath
|
220
|
+
end
|
221
|
+
|
222
|
+
def ensure_dir_exists path
|
223
|
+
if File.exist?(path)
|
224
|
+
unless File.directory?(path)
|
225
|
+
raise "#{path} is not a directory"
|
226
|
+
end
|
227
|
+
else
|
228
|
+
FileUtils.mkdir_p path
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
def walk_files
|
233
|
+
Dir.glob(@files_path + '**' + '*', File::FNM_DOTMATCH) do |filename|
|
234
|
+
yield filename
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
239
238
|
def get_file_digest filename
|
240
239
|
File.open(filename, 'rb') do |io|
|
241
240
|
digest = (@use_sha512 ? Digest::SHA512 : Digest::SHA256).new
|
@@ -247,5 +246,12 @@ module FileDigests
|
|
247
246
|
end
|
248
247
|
end
|
249
248
|
|
249
|
+
def measure_time
|
250
|
+
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
251
|
+
yield
|
252
|
+
elapsed = (Process.clock_gettime(Process::CLOCK_MONOTONIC) - start).to_i
|
253
|
+
puts "Elapsed time: #{elapsed / 3600}h #{(elapsed % 3600) / 60}m #{elapsed % 60}s" unless QUIET
|
254
|
+
end
|
255
|
+
|
250
256
|
end
|
251
257
|
end
|