Merge pull request #423 from hainesr/sync-options
Sync options and fix inconsistent behaviour of `Zip::File#get_entry` and `Zip::File#find_entry`.
This commit is contained in:
commit
c925bdbf3a
|
|
@ -34,7 +34,7 @@ module Zip
|
|||
end
|
||||
@follow_symlinks = false
|
||||
|
||||
@restore_times = true
|
||||
@restore_times = false
|
||||
@restore_permissions = false
|
||||
@restore_ownership = false
|
||||
# BUG: need an extra field to support uid/gid's
|
||||
|
|
|
|||
|
|
@ -376,7 +376,13 @@ module Zip
|
|||
# Searches for entry with the specified name. Returns nil if
|
||||
# no entry is found. See also get_entry
|
||||
def find_entry(entry_name)
|
||||
@entry_set.find_entry(entry_name)
|
||||
selected_entry = @entry_set.find_entry(entry_name)
|
||||
return if selected_entry.nil?
|
||||
|
||||
selected_entry.restore_ownership = @restore_ownership
|
||||
selected_entry.restore_permissions = @restore_permissions
|
||||
selected_entry.restore_times = @restore_times
|
||||
selected_entry
|
||||
end
|
||||
|
||||
# Searches for entries given a glob
|
||||
|
|
@ -388,10 +394,8 @@ module Zip
|
|||
# if no entry is found.
|
||||
def get_entry(entry)
|
||||
selected_entry = find_entry(entry)
|
||||
raise Errno::ENOENT, entry unless selected_entry
|
||||
selected_entry.restore_ownership = @restore_ownership
|
||||
selected_entry.restore_permissions = @restore_permissions
|
||||
selected_entry.restore_times = @restore_times
|
||||
raise Errno::ENOENT, entry if selected_entry.nil?
|
||||
|
||||
selected_entry
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -75,6 +75,24 @@ class FileOptionsTest < MiniTest::Test
|
|||
assert_time_equal(::Time.now, ::File.mtime(EXTPATH_2))
|
||||
end
|
||||
|
||||
def test_get_find_consistency
|
||||
testzip = ::File.expand_path(::File.join('data', 'globTest.zip'), __dir__)
|
||||
file_f = ::File.expand_path('f_test.txt', Dir.tmpdir)
|
||||
file_g = ::File.expand_path('g_test.txt', Dir.tmpdir)
|
||||
|
||||
::Zip::File.open(testzip) do |zip|
|
||||
e1 = zip.find_entry('globTest/food.txt')
|
||||
e1.extract(file_f)
|
||||
e2 = zip.get_entry('globTest/food.txt')
|
||||
e2.extract(file_g)
|
||||
end
|
||||
|
||||
assert_time_equal(::File.mtime(file_f), ::File.mtime(file_g))
|
||||
ensure
|
||||
::File.unlink(file_f)
|
||||
::File.unlink(file_g)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Method to compare file times. DOS times only have 2 second accuracy.
|
||||
|
|
|
|||
|
|
@ -653,6 +653,21 @@ class ZipFileTest < MiniTest::Test
|
|||
::Zip::File.open('test/data/test.xls')
|
||||
end
|
||||
|
||||
def test_find_get_entry
|
||||
::Zip::File.open(TEST_ZIP.zip_name) do |zf|
|
||||
assert_nil zf.find_entry('not_in_here.txt')
|
||||
|
||||
refute_nil zf.find_entry('test/data/generated/empty.txt')
|
||||
|
||||
assert_raises(Errno::ENOENT) do
|
||||
zf.get_entry('not_in_here.txt')
|
||||
end
|
||||
|
||||
# Should not raise anything.
|
||||
zf.get_entry('test/data/generated/empty.txt')
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def assert_contains(zf, entryName, filename = entryName)
|
||||
|
|
|
|||
Loading…
Reference in New Issue