zipr 0.3.0 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/zipr/archive.rb +24 -8
- data/lib/zipr/helper.rb +10 -2
- 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: 6976718d5e5290a0ae2569b40ddbcb99e96215356a1ec154f3b6bfe2a2486062
|
4
|
+
data.tar.gz: d59070f7523eb976b4e443440e7c8f5468b42fc7465ad95041f10081971bfdb4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31dd85955d53b08413d931d7a65c755c697c2b54e1dd3d85d54fea007fcd346e079b5badac853815670644d15f06e16ea460c00c13a1257817b98ee0b05f6b39
|
7
|
+
data.tar.gz: fe3f113d4098f1ddfac92b70b470b3aced82a49806b78f0df4284330e75e433595da060699ad4121fc6afaf23d13ed251289e4c76b8cbc9005325952fff16e44
|
data/lib/zipr/archive.rb
CHANGED
@@ -210,7 +210,7 @@ module Zipr
|
|
210
210
|
unless ::File.exist?(@path)
|
211
211
|
# If the archive doesn't exist but checksums were provided, check for files to extract based off of checksums
|
212
212
|
return @checksums.select { |entry_name, checksum| _extract_file?(entry_name, checksum == 'directory', destination_folder, files_to_check) }.keys unless @checksums.nil? || @checksums.empty?
|
213
|
-
# If the archive doesn't exist and no checksums were found, extract all files_to_check
|
213
|
+
# If the archive doesn't exist and no checksums were found, extract all files_to_check
|
214
214
|
return files_to_check
|
215
215
|
end
|
216
216
|
|
@@ -234,13 +234,22 @@ module Zipr
|
|
234
234
|
# An array of files to be added (or the :all symbol).
|
235
235
|
# Parameters:
|
236
236
|
# source_folder: The filesystem directory where files are being added from.
|
237
|
-
# files_to_check: Array of files intended to be added to an archive. Can be exact names/paths or names/paths with wildcards (glob style).
|
237
|
+
# files_to_check: Array of files intended to be added to an archive. Can be exact names/paths or names/paths with wildcards (glob style) or a Regexp.
|
238
238
|
# default: All files and folders under the source_folder.
|
239
239
|
def determine_files_to_add(source_folder, files_to_check: nil)
|
240
240
|
files_to_check ||= Dir.glob("#{source_folder}/**/*".tr('\\', '/')) if files_to_check.nil?
|
241
241
|
files_to_add = []
|
242
|
+
source_folder_glob = nil
|
242
243
|
files_to_check.each do |target_search|
|
243
|
-
files =
|
244
|
+
files = if target_search.is_a?(Regexp)
|
245
|
+
source_folder_glob ||= Dir.glob("#{source_folder.tr('\\', '/')}/**/*")
|
246
|
+
source_folder_glob.select do |path|
|
247
|
+
path =~ target_search
|
248
|
+
end
|
249
|
+
source_folder_glob.select { |path| path.to_s =~ target_search }
|
250
|
+
else
|
251
|
+
Dir.glob(Zipr.prepend_source_folder(source_folder, target_search))
|
252
|
+
end
|
244
253
|
files.each do |source_file|
|
245
254
|
relative_path = Zipr.slice_source_folder(source_folder, source_file)
|
246
255
|
exists_in_zip = !!@checksums[relative_path]
|
@@ -432,6 +441,7 @@ module Zipr
|
|
432
441
|
def _extract_file?(archive_entry_name, is_a_directory, destination_folder, files_to_check)
|
433
442
|
destination_path = "#{destination_folder}/#{archive_entry_name}"
|
434
443
|
return false unless files_to_check == :all || files_to_check.include?(archive_entry_name) # Make sure the file is in the whitelist if it was provided
|
444
|
+
return false if archive_entry_name == 'archive_checksum'
|
435
445
|
return false if ::File.directory?(destination_path) && is_a_directory # Archive item is a directory and the destination directory exists
|
436
446
|
return false if @mode == :if_missing && ::File.exist?(destination_path) # File exists and we're not overwriting existing files due to the mode
|
437
447
|
return false if _excluded_file?(archive_entry_name, destination_path: destination_path) # File is excluded in :options
|
@@ -443,18 +453,24 @@ module Zipr
|
|
443
453
|
@options[:exclude_files] ||= []
|
444
454
|
@options[:exclude_unless_missing] ||= []
|
445
455
|
@options[:exclude_unless_archive_changed] ||= []
|
446
|
-
return true if @options[:exclude_files].any? { |e| file_path.tr('\\', '/') =~
|
447
|
-
return true if ::File.exist?(destination_path) && @options[:exclude_unless_missing].any? { |e| file_path.tr('\\', '/') =~
|
448
|
-
return true if exists_in_zip && @options[:exclude_unless_missing].any? { |e| file_path.tr('\\', '/') =~
|
449
|
-
return true if !@archive_changed && ::File.exist?(destination_path) && @options[:exclude_unless_archive_changed].any? { |e| file_path.tr('\\', '/') =~
|
456
|
+
return true if @options[:exclude_files].any? { |e| file_path.tr('\\', '/') =~ _convert_backslashes_and_cast_to_regexp(e) }
|
457
|
+
return true if ::File.exist?(destination_path) && @options[:exclude_unless_missing].any? { |e| file_path.tr('\\', '/') =~ _convert_backslashes_and_cast_to_regexp(e) }
|
458
|
+
return true if exists_in_zip && @options[:exclude_unless_missing].any? { |e| file_path.tr('\\', '/') =~ _convert_backslashes_and_cast_to_regexp(e) }
|
459
|
+
return true if !@archive_changed && ::File.exist?(destination_path) && @options[:exclude_unless_archive_changed].any? { |e| file_path.tr('\\', '/') =~ _convert_backslashes_and_cast_to_regexp(e) }
|
450
460
|
false
|
451
461
|
end
|
452
462
|
|
463
|
+
def _convert_backslashes_and_cast_to_regexp(path)
|
464
|
+
return path if path.is_a?(Regexp) # If it's already a regexp, leave it alone
|
465
|
+
path = path.tr('\\', '/')
|
466
|
+
/^#{Zipr.wildcard_to_regexp(path)}$/i
|
467
|
+
end
|
468
|
+
|
453
469
|
def _assign_common_accessors(options: nil, checksums: nil, mode: nil)
|
454
470
|
_assign_checksums(checksums)
|
455
471
|
@options = options || @options || {}
|
456
472
|
@mode = mode || @mode || :idempotent
|
457
|
-
@archive_changed = ::File.exist?(@path) && @checksums['archive_checksum'] != Digest::SHA256.file(@path).hexdigest
|
473
|
+
@archive_changed = (::File.exist?(@path) && @checksums['archive_checksum'] != Digest::SHA256.file(@path).hexdigest) || !::File.exist?(@checksum_path)
|
458
474
|
end
|
459
475
|
|
460
476
|
def _assign_checksums(checksums)
|
data/lib/zipr/helper.rb
CHANGED
@@ -21,19 +21,27 @@ module Zipr
|
|
21
21
|
def flattened_paths(source_folder, files)
|
22
22
|
return files if source_folder.nil? || source_folder.empty?
|
23
23
|
result = []
|
24
|
+
source_folder_glob = nil
|
24
25
|
files.each do |entry|
|
26
|
+
if entry.is_a?(Regexp)
|
27
|
+
source_folder_glob ||= Dir.glob("#{source_folder.tr('\\', '/')}/**/*")
|
28
|
+
matched_files = source_folder_glob.select { |path| path =~ entry }
|
29
|
+
result += matched_files.map { |f| slice_source_folder(source_folder, f) }
|
30
|
+
next
|
31
|
+
end
|
32
|
+
|
25
33
|
standardized_entry = "#{source_folder.tr('\\', '/')}/#{slice_source_folder(source_folder, entry)}"
|
26
34
|
files_found = Dir.glob(standardized_entry)
|
27
35
|
if files_found.empty?
|
28
36
|
result.push(entry)
|
29
37
|
else
|
30
|
-
result += files_found.map { |
|
38
|
+
result += files_found.map { |f| slice_source_folder(source_folder, f) }
|
31
39
|
end
|
32
40
|
end
|
33
41
|
result
|
34
42
|
end
|
35
43
|
|
36
|
-
def
|
44
|
+
def wildcard_to_regexp(entry)
|
37
45
|
return entry if entry.is_a?(Regexp)
|
38
46
|
escaped_entry = Regexp.escape(entry).gsub(/\\\*/, '.*') # Convert asterisks to .*
|
39
47
|
/#{escaped_entry}/
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zipr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Munoz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: easy_io
|