file-digests 0.0.37 → 0.0.38
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/file-digests.rb +46 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a7193a9795eb785cd22a7663fa4dae908d3349b854be8d3613750f24ce6b711
|
4
|
+
data.tar.gz: 32a8172cc7115240f5954b7e4775f841ddce10102c7e48e184690d2643e7a476
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 584a6fc4c10e6a33d9e55d9647abcfce913fa18b046eddf7193807408d7ac4167b1b7114aa300531426e767668841f483ad66775bf7f492ff552f290d19f6e2a
|
7
|
+
data.tar.gz: 877dea6a6ba8f3ab091ed6d5b0379090a60cff4477ad9d4409fa9fef9674bd39b9134682ac534d49535a21ed58382b02088fa00f83524d31add7c23919e9c0c4
|
data/lib/file-digests.rb
CHANGED
@@ -140,13 +140,13 @@ class FileDigests
|
|
140
140
|
|
141
141
|
def initialize_paths files_path, digest_database_path
|
142
142
|
@files_path = cleanup_path(files_path || ".")
|
143
|
-
|
144
143
|
raise "Files path must be a readable directory" unless (File.directory?(@files_path) && File.readable?(@files_path))
|
144
|
+
@files_path = realpath_with_disk @files_path
|
145
145
|
|
146
146
|
@digest_database_path = digest_database_path ? cleanup_path(digest_database_path) : @files_path
|
147
147
|
@digest_database_path += ".file-digests.sqlite" if File.directory?(@digest_database_path)
|
148
148
|
ensure_dir_exist @digest_database_path.dirname
|
149
|
-
|
149
|
+
@digest_database_path = realdirpath_with_disk @digest_database_path
|
150
150
|
@digest_database_files = ["#{@digest_database_path}", "#{@digest_database_path}-wal", "#{@digest_database_path}-shm"]
|
151
151
|
|
152
152
|
if @options[:verbose]
|
@@ -273,7 +273,7 @@ class FileDigests
|
|
273
273
|
perhaps_transaction(@new_digest_algorithm, :exclusive) do
|
274
274
|
@counters = {good: 0, updated: 0, renamed: 0, likely_damaged: 0, exceptions: 0}
|
275
275
|
|
276
|
-
walk_files do |filename|
|
276
|
+
walk_files(@files_path.to_s) do |filename|
|
277
277
|
process_file filename
|
278
278
|
end
|
279
279
|
|
@@ -340,9 +340,11 @@ class FileDigests
|
|
340
340
|
private
|
341
341
|
|
342
342
|
def process_file filename
|
343
|
-
|
343
|
+
perhaps_nt_filename = perhaps_nt_path filename
|
344
|
+
|
345
|
+
return if File.symlink? perhaps_nt_filename
|
344
346
|
|
345
|
-
stat = File.stat
|
347
|
+
stat = File.stat perhaps_nt_filename
|
346
348
|
|
347
349
|
return if stat.blockdev?
|
348
350
|
return if stat.chardev?
|
@@ -359,7 +361,7 @@ class FileDigests
|
|
359
361
|
|
360
362
|
normalized_filename = filename.delete_prefix("#{@files_path.to_s}/").encode("utf-8", universal_newline: true).unicode_normalize(:nfkc)
|
361
363
|
mtime_string = time_to_database stat.mtime
|
362
|
-
digest, new_digest = get_file_digest(
|
364
|
+
digest, new_digest = get_file_digest(perhaps_nt_filename)
|
363
365
|
|
364
366
|
nested_transaction do
|
365
367
|
new_digests_insert(normalized_filename, new_digest) if new_digest
|
@@ -542,6 +544,22 @@ class FileDigests
|
|
542
544
|
|
543
545
|
# Filesystem-related helpers
|
544
546
|
|
547
|
+
def realpath_with_disk path
|
548
|
+
path = path.realpath
|
549
|
+
if Gem.win_platform? && path.to_s[0] == "/"
|
550
|
+
return Pathname(Dir.pwd[0, 2] + path.to_s)
|
551
|
+
end
|
552
|
+
path
|
553
|
+
end
|
554
|
+
|
555
|
+
def realdirpath_with_disk path
|
556
|
+
path = path.realdirpath
|
557
|
+
if Gem.win_platform? && path.to_s[0] == "/"
|
558
|
+
return Pathname(Dir.pwd[0, 2] + path.to_s)
|
559
|
+
end
|
560
|
+
path
|
561
|
+
end
|
562
|
+
|
545
563
|
def patch_path_string path
|
546
564
|
Gem.win_platform? ? path.gsub(/\\/, "/") : path
|
547
565
|
end
|
@@ -560,10 +578,28 @@ class FileDigests
|
|
560
578
|
end
|
561
579
|
end
|
562
580
|
|
563
|
-
def walk_files
|
564
|
-
|
565
|
-
|
566
|
-
|
581
|
+
def walk_files(path, &block)
|
582
|
+
Dir.each_child(path, encoding: "UTF-8") do |item|
|
583
|
+
item = "#{path}#{File::SEPARATOR}#{item}"
|
584
|
+
test_item = perhaps_nt_path item
|
585
|
+
if File.readable?(test_item)
|
586
|
+
if File.directory?(test_item)
|
587
|
+
walk_files(item, &block)
|
588
|
+
else
|
589
|
+
yield item
|
590
|
+
end
|
591
|
+
else
|
592
|
+
STDERR.puts "ERROR: Directory entry is not readable: #{item}"
|
593
|
+
@counters[:exceptions] += 1
|
594
|
+
end
|
595
|
+
end
|
596
|
+
end
|
597
|
+
|
598
|
+
def perhaps_nt_path path
|
599
|
+
if Gem.win_platform?
|
600
|
+
"\\??\\#{path.gsub(/\//,"\\")}"
|
601
|
+
else
|
602
|
+
path
|
567
603
|
end
|
568
604
|
end
|
569
605
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: file-digests
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.38
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stanislav Senotrusov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: openssl
|