8000 Merge pull request #423 from hainesr/sync-options · rubyzip/rubyzip@c925bdb · GitHub
[go: up one dir, main page]

Skip to content

Commit c925bdb

Browse files
authored
Merge pull request #423 from hainesr/sync-options
Sync options and fix inconsistent behaviour of `Zip::File#get_entry` and `Zip::File#find_entry`.
2 parents 6389d65 + f3a2f4a commit c925bdb

File tree

4 files changed

+43
-6
lines changed

4 files changed

+43
-6
lines changed

lib/zip/entry.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def set_default_vars_values
3434
end
3535
@follow_symlinks = false
3636

37-
@restore_times = true
37+
@restore_times = false
3838
@restore_permissions = false
3939
@restore_ownership = false
4040
# BUG: need an extra field to support uid/gid's

lib/zip/file.rb

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,13 @@ def commit_required?
376376
# Searches for entry with the specified name. Returns nil if
377377
# no entry is found. See also get_entry
378378
def find_entry(entry_name)
379-
@entry_set.find_entry(entry_name)
379+
selected_entry = @entry_set.find_entry(entry_name)
380+
return if selected_entry.nil?
381+
382+
selected_entry.restore_ownership = @restore_ownership
383+
selected_entry.restore_permissions = @restore_permissions
384+
selected_entry.restore_times = @restore_times
385+
selected_entry
380386
end
381387

382388
# Searches for entries given a glob
@@ -388,10 +394,8 @@ def glob(*args, &block)
388394
# if no entry is found.
389395
def get_entry(entry)
390396
selected_entry = find_entry(entry)
391-
raise Errno::ENOENT, entry unless selected_entry
392-
selected_entry.restore_ownership = @restore_ownership
393-
selected_entry.restore_permissions = @restore_permissions
394-
selected_entry.restore_times = @restore_times
397+
raise Errno::ENOENT, entry if selected_entry.nil?
398+
395399
selected_entry
396400
end
397401

test/file_options_test.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,24 @@ def test_restore_times_false
7575
assert_time_equal(::Time.now, ::File.mtime(EXTPATH_2))
7676
end
7777

78+
def test_get_find_consistency
79+
testzip = ::File.expand_path(::File.join('data', 'globTest.zip'), __dir__)
80+
file_f = ::File.expand_path('f_test.txt', Dir.tmpdir)
81+
file_g = ::File.expand_path('g_test.txt', Dir.tmpdir)
82+
83+
::Zip::File.open(testzip) do |zip|
84+
e1 = zip.find_entry('globTest/food.txt')
85+
e1.extract(file_f)
86+
e2 = zip.get_entry('globTest/food.txt')
87+
e2.extract(file_g)
88+
end
89+
90+
assert_time_equal(::File.mtime(file_f), ::File.mtime(file_g))
91+
ensure
92+
::File.unlink(file_f)
93+
::File.unlink(file_g)
94+
end
95+
7896
private
7997

8098
# Method to compare file times. DOS times only have 2 second accuracy.

test/file_test.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,21 @@ def test_open_xls_does_not_raise_type_error
653653
::Zip::File.open('test/data/test.xls')
654654
end
655655

656+
def test_find_get_entry
657+
::Zip::File.open(TEST_ZIP.zip_name) do |zf|
658+
assert_nil zf.find_entry('not_in_here.txt')
659+
660+
refute_nil zf.find_entry('test/data/generated/empty.txt')
661+
662+
assert_raises(Errno::ENOENT) do
663+
zf.get_entry('not_in_here.txt')
664+
end
665+
666+
# Should not raise anything.
667+
zf.get_entry('test/data/generated/empty.txt')
668+
end
669+
end
670+
656671
private
657672

658673
def assert_contains(zf, entryName, filename = entryName)

0 commit comments

Comments
 (0)
0