-C Add\saggregate\sfunction\szipfile()\sto\sthe\szipfile\sextension.\sFor\scomposing\snew\nzip\sarchives\sin\smemory.
-D 2018-01-29T18:41:07.175
+C Add\sunix-only\stests\sto\scheck\sthat\sthe\s"unzip"\sprogram\scan\sunpack\sarchives\ngenerated\sby\sthe\szipfile\sextension.
+D 2018-01-29T19:47:32.262
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F Makefile.in 7a3f714b4fcf793108042b7b0a5c720b0b310ec84314d61ba7f3f49f27e550ea
F ext/misc/csv.c 1a009b93650732e22334edc92459c4630b9fa703397cbb3c8ca279921a36ca11
F ext/misc/dbdump.c 3509fa6b8932d04e932d6b6b827b6a82ca362781b8e8f3c77336f416793e215e
F ext/misc/eval.c f971962e92ebb8b0a4e6b62949463ee454d88fa2
-F ext/misc/fileio.c bd2f717be63a9ae9ff85977a756c43a96d47a7763d98ae913636c64b714c232b
+F ext/misc/fileio.c 4cad3a78bfbbea9b1414b4405fd704ee57fbe2621254b011888dae7b0ba8c513
F ext/misc/fuzzer.c 7c64b8197bb77b7d64eff7cac7848870235d4c25
F ext/misc/ieee754.c f190d0cc5182529acb15babd177781be1ac1718c
F ext/misc/json1.c dbe086615b9546c156bf32b9378fc09383b58bd17513b866cfd24c1e15281984
F test/writecrash.test f1da7f7adfe8d7f09ea79b42e5ca6dcc41102f27f8e334ad71539501ddd910cc
F test/zeroblob.test 3857870fe681b8185654414a9bccfde80b62a0fa
F test/zerodamage.test 9c41628db7e8d9e8a0181e59ea5f189df311a9f6ce99cc376dc461f66db6f8dc
-F test/zipfile.test 12199631759785b0185ceb1ff3cffdcc91985ef61475ab1c69139686b09a87c8
+F test/zipfile.test c40ae3a5d3fd0a31a8c6bdae1dbef55dd7140acb0d3b316c8edb744085ea6134
F tool/GetFile.cs a15e08acb5dd7539b75ba23501581d7c2b462cb5
F tool/GetTclKit.bat 8995df40c4209808b31f24de0b58f90930239a234f7591e3675d45bfbb990c5d
F tool/Replace.cs 02c67258801c2fb5f63231e0ac0f220b4b36ba91
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 8767f7b880f2e4112f75f0b6ef7be3f50ab1ae20e103e7d03d8bfe77e6c79438
-R 5f1a0bf3bc3038aabd0aee2df4b1bd63
+P e364eeac76a8225146b37d801bc6cabe03e9abede5a1412ebe9d94a32d8838cc
+R 78b9ab6ccbbf51cef503aff35913fad6
U dan
-Z eba1cb16b20a1e223d496488c50326dc
+Z 634d51e6967cb83c15fce21d55a23989
set data
}
+if {$::tcl_platform(platform)=="unix" && [catch {exec unzip}]==0} {
+ set ::UNZIP 1
+ load_static_extension db fileio
+ proc do_unzip {file} {
+ forcedelete test_unzip
+ file mkdir test_unzip
+ exec unzip -d test_unzip $file
+
+ set res [db eval {
+ SELECT replace(name,'test_unzip/',''),mode,mtime,data
+ FROM fsdir('test_unzip')
+ WHERE name!='test_unzip'
+ ORDER BY name
+ }]
+ set res
+ }
+}
+
# Argument $file is the name of a zip archive on disk. This function
# executes test cases to check that the results of each of the following
# are the same:
#puts $r3
uplevel [list do_test $tn.1 [list set {} $r2] $r1]
- uplevel [list do_test $tn.1 [list set {} $r3] $r1]
+ uplevel [list do_test $tn.2 [list set {} $r3] $r1]
+}
+
+# Argument $file is a zip file on disk. This command runs tests to:
+#
+# 1. Unpack the archive with unix command [unzip] and compare the
+# results to reading the same archive using the zipfile() table
+# valued function.
+#
+# 2. Creates a new archive with the same contents using the zipfile()
+# aggregate function as follows:
+#
+# SELECT writefile('test_unzip.zip',
+# ( SELECT zipfile(name,mode,mtime,data,method) FROM zipfile($file) )
+# );
+#
+# Then tests that unpacking the new archive using [unzip] produces
+# the same results as in (1).
+#
+proc do_unzip_test {tn file} {
+ if {[info vars ::UNZIP]==""} { return }
+ db func sss strip_slash
+
+ db eval {
+ SELECT writefile('test_unzip.zip',
+ ( SELECT zipfile(name,mode,mtime,data,method) FROM zipfile($file) )
+ );
+ }
+
+ set r1 [db eval {
+ SELECT sss(name),mode,mtime,data FROM zipfile($file) ORDER BY name
+ }]
+ set r2 [do_unzip $file]
+ set r3 [do_unzip test_unzip.zip]
+
+ uplevel [list do_test $tn.1 [list set {} $r2] $r1]
+ uplevel [list do_test $tn.2 [list set {} $r3] $r1]
+}
+proc strip_slash {in} { regsub {/$} $in {} }
+
+proc do_zip_tests {tn file} {
+ uplevel do_zipfile_blob_test $tn.1 $file
+ uplevel do_unzip_test $tn.2 $file
}
forcedelete test.zip
f.txt 1000000000 abcde
g.txt 1000000002 12345
}
-do_zipfile_blob_test 1.2.1 test.zip
+do_zip_tests 1.2a test.zip
do_execsql_test 1.3 {
INSERT INTO zz(name, mode, mtime, data) VALUES('h.txt',
'-rw-r--r--', 1000000004, 'aaaaaaaaaabbbbbbbbbb'
);
}
-do_zipfile_blob_test 1.3.1 test.zip
+do_zip_tests 1.3a test.zip
do_execsql_test 1.4 {
SELECT name, mtime, data, method FROM zipfile('test.zip');
h.txt 33188 1000000004 aaaaaaaaaabbbbbbbbbb 8
i.txt 33188 1000000006 zxcvb 0
}
-do_zipfile_blob_test 1.6.1a test.zip
+do_zip_tests 1.6.1a test.zip
do_execsql_test 1.6.2 {
UPDATE zz SET mtime=4 WHERE name='i.txt';
h.txt 33189 1000000004 aaaaaaaaaabbbbbbbbbb 8
i.txt 33188 4 zxcvb 0
}
-do_zipfile_blob_test 1.6.3a test.zip
+do_zip_tests 1.6.3a test.zip
do_execsql_test 1.6.4 {
UPDATE zz SET name = 'blue.txt' WHERE name='f.txt';
h.txt 33189 1000000004 aaaaaaaaaabbbbbbbbbb 8
i.txt 33188 4 zxcvb 0
}
-do_zipfile_blob_test 1.6.4a test.zip
+do_zip_tests 1.6.4a test.zip
do_execsql_test 1.6.5 {
UPDATE zz SET data = 'edcba' WHERE name='blue.txt';
db close
forcedelete test.zip
reset_db
+load_static_extension db fileio
load_static_extension db zipfile
do_execsql_test 2.1 {
CREATE VIRTUAL TABLE zzz USING zipfile('test.zip');
dirname2/ 16877 {}
dirname2/file1.txt 33188 abcdefghijklmnop
}
-do_zipfile_blob_test 2.4.1 test.zip
+do_zip_tests 2.4a test.zip
# If on unix, check that the [unzip] utility can unpack our archive.
#