file-digests 0.0.37 → 0.0.38
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 +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
|