/* UnTGZ是NSIS解压tgz/tar/gz/lzma/bz2/tlz/tbz压缩文件的插件 UnTGZ可以解压大多数的压缩制式压缩包,功能强大. */ !AddPluginDir "../" ; The name of the installer Name "untgz Example" ; The file to write OutFile "untgz_example.exe" ; Let user see messages in detail window ShowInstDetails show ; The default installation directory InstallDir $TEMPExample ; The text to prompt the user to enter a directory DirText "This will install the untgz example on your computer. Please select a directory" ; The text to prompt the user to enter a directory ComponentText "This will install untgz examples on your computer. Select which test to run." ; let user choose examples to run InstType "All Examples" InstType "extract all files" InstType "extract all files alternate" InstType "extract specific files" InstType "extract a single file" InstType "extract a corrupt or missing file" InstType "extract a zero byte file" InstType "extract all files from uncompressed tarball" InstType "Test readonly/inuse files extraction" InstType "Test update files extraction" InstType "extract all files from lzma compressed tarball" InstType "extract all files from bzip2 compressed tarball" InstType "extract all files from tarball (auto determine type)" ; Required, the sample tarball used for testing Section "" SectionIn 1 2 3 4 5 6 7 8 9 10 11 12 13 RO ; Set output path to the installation directory. SetOutPath $INSTDIR ; Put file there File example.tgz File examplecorrupt.tgz File exampleempty.tgz File examplenewer.tgz File dups.tar.gz ; the alternate compressed files File example.tar File example.tlz File example.tar.lzma File example.tbz SectionEnd Section "Test extract" SectionIn 1 2 ; untgz::extract [-j] [-d basedir] tarball.tgz untgz::extract -j -d "$INSTDIR/junkedpaths" "$INSTDIR/example.tgz" DetailPrint "untgz returned ($R0)" untgz::extract -d "$INSTDIR/withpaths" "$INSTDIR/example.tgz" DetailPrint "untgz returned ($R0)" SectionEnd Section "Test extractV, same as extract" SectionIn 1 3 ; untgz::extractV [-j] [-d basedir] tarball.tgz [-i {iList}] [-x {xList}] -- untgz::extractV -j -d "$INSTDIR/junkedpathsAlt" "$INSTDIR/example.tgz" -- DetailPrint "untgz returned ($R0)" untgz::extractV -d "$INSTDIR/withpathsAlt" "$INSTDIR/example.tgz" -- DetailPrint "untgz returned ($R0)" SectionEnd Section "Test extractV" SectionIn 1 4 ; untgz::extractV [-j] [-d basedir] tarball.tgz [-i {iList}] [-x {xList}] -- untgz::extractV -j -d "$INSTDIR/junkedpathsI" "$INSTDIR/example.tgz" -i "another doc.txt" -- DetailPrint "untgz returned ($R0)" untgz::extractV -j -d "$INSTDIR/junkedpathsX" "$INSTDIR/example.tgz" -x "another doc.txt" -- DetailPrint "untgz returned ($R0)" untgz::extractV -d "$INSTDIR/withpathsIa" "$INSTDIR/example.tgz" -i "another doc.txt" -- DetailPrint "untgz returned ($R0)" untgz::extractV -d "$INSTDIR/withpathsXa" "$INSTDIR/example.tgz" -x "sample doc.txt" -- DetailPrint "untgz returned ($R0)" untgz::extractV -d "$INSTDIR/withpathsXb" "$INSTDIR/example.tgz" -i "sample doc.txt" -- DetailPrint "untgz returned ($R0)" untgz::extractV -d "$INSTDIR/withpathsIb" "$INSTDIR/example.tgz" -x "another doc.txt" -- DetailPrint "untgz returned ($R0)" untgz::extractV -d "$INSTDIR/withpathsXs" "$INSTDIR/example.tgz" -x "subdir" -- DetailPrint "untgz returned ($R0)" untgz::extractV -d "$INSTDIR/withpathsX curious" "$INSTDIR/example.tgz" -x "subdir/*" -- DetailPrint "untgz returned ($R0)" SectionEnd Section "Test extractFile" SectionIn 1 5 ; untgz::extractFile [-d basedir] tarball.tgz file untgz::extractFile -d "$INSTDIRsinglefile" "$INSTDIRexample.tgz" "another doc.txt" DetailPrint "untgz returned ($R0)" untgz::extractFile -d "$INSTDIR/forwardSlash" "$INSTDIR/example.tgz" "another doc.txt" DetailPrint "untgz returned ($R0)" SectionEnd Section "Test extract corrupt File" SectionIn 1 6 ; attempt to extract from a corrupt [manually truncated] tarball untgz::extractFile -d "$INSTDIR/corrupt" "$INSTDIR/examplecorrupt.tgz" "fake doc.txt" DetailPrint "untgz returned ($R0)" ; attempt to extract from a nonexistant tarball untgz::extractFile -d "$INSTDIR/corrupt" "$INSTDIR/exampleNotExist.tgz" "my doc.txt" DetailPrint "untgz returned ($R0)" ; attempt a proper extraction, should succeed. untgz::extractFile -d "$INSTDIR/corruptSuccess" "$INSTDIR/example.tgz" "another doc.txt" DetailPrint "untgz returned ($R0)" ; attempt to extract a file from archive that does not exist untgz::extractFile -d "$INSTDIR/singlefile2" "$INSTDIR/example.tgz" "Notexist.txT" DetailPrint "untgz returned ($R0)" untgz::extractFile -d "$INSTDIR/singlefile2" "$INSTDIR/example.tgz" "my doc.txt" DetailPrint "untgz returned ($R0)" SectionEnd Section "Test extract 0 byte file" SectionIn 1 7 untgz::extract -d "$INSTDIR/zerofile" "$INSTDIR/exampleempty.tgz" DetailPrint "untgz returned ($R0)" SectionEnd Section "Test uncompressed tarball" SectionIn 1 8 untgz::extract -d "$INSTDIR/plainTAR" "$INSTDIR/example.tar" DetailPrint "untgz returned ($R0)" untgz::extract -d "$INSTDIR/plainTAR2" -znone "$INSTDIR/example.tar" DetailPrint "untgz returned ($R0)" SectionEnd Section "Test readonly/inuse files extraction" SectionIn 1 9 DetailPrint "" DetailPrint "Test readonly/inuse files extraction" ; Be sure paths to FileOpen and SetFileAttributes ONLY use character DetailPrint "this should succeed" untgz::extractFile -d "$INSTDIR/readonly" "$INSTDIR/example.tgz" "another doc.txt" DetailPrint "untgz returned ($R0)" DetailPrint "this should succeed as well overwriting the file" untgz::extractFile -d "$INSTDIR/readonly" "$INSTDIR/example.tgz" "another doc.txt" DetailPrint "untgz returned ($R0)" DetailPrint "force this file open so next call should fail" ClearErrors FileOpen $0 "$INSTDIRreadonlyanother doc.txt" a IfErrors 0 +2 MessageBox MB_OK "Failed to open file" DetailPrint "this should produce an error since file trying to extract is open" untgz::extractFile -d "$INSTDIR/readonly" "$INSTDIR/example.tgz" "another doc.txt" DetailPrint "untgz returned ($R0)" DetailPrint "now retry should succeed once file closed" FileClose $0 untgz::extractFile -d "$INSTDIR/readonly" "$INSTDIR/example.tgz" "another doc.txt" DetailPrint "untgz returned ($R0)" DetailPrint "set file to readonly" ClearErrors SetFileAttributes "$INSTDIRreadonlyanother doc.txt" FILE_ATTRIBUTE_READONLY IfErrors 0 +2 MessageBox MB_OK "Failed to set file to readonly" DetailPrint "this should fail" untgz::extractFile -d "$INSTDIR/readonly" "$INSTDIR/example.tgz" "another doc.txt" DetailPrint "untgz returned ($R0)" DetailPrint "restore attributes, retry should succeed" SetFileAttributes "$INSTDIRreadonlyanother doc.txt" FILE_ATTRIBUTE_NORMAL untgz::extractFile -d "$INSTDIR/readonly" "$INSTDIR/example.tgz" "another doc.txt" DetailPrint "untgz returned ($R0)" SectionEnd Section "Test update files extraction" SectionIn 1 10 DetailPrint "" DetailPrint "Test update files extraction" ; this should succeed untgz::extractFile -d "$INSTDIR/update" "$INSTDIR/example.tgz" "another doc.txt" DetailPrint "untgz returned ($R0)" ; this should skip the file just extracted untgz::extractFile -k -d "$INSTDIR/update" "$INSTDIR/example.tgz" "another doc.txt" DetailPrint "untgz returned ($R0)" ; so should this one, since update should not happen (same time) untgz::extractFile -u -d "$INSTDIR/update" "$INSTDIR/example.tgz" "another doc.txt" DetailPrint "untgz returned ($R0)" ; this should extract some files and skip ones skipped above untgz::extract -j -u -d "$INSTDIR/update" "$INSTDIR/example.tgz" DetailPrint "untgz returned ($R0)" DetailPrint "set file to readonly" untgz::extractFile -d "$INSTDIR/upd" "$INSTDIR/example.tgz" "another doc.txt" DetailPrint "untgz returned ($R0)" ClearErrors SetFileAttributes "$INSTDIRupdanother doc.txt" FILE_ATTRIBUTE_READONLY IfErrors 0 +2 MessageBox MB_OK "Failed to set file to readonly" DetailPrint "this should fail" untgz::extractFile -u -d "$INSTDIR/upd" "$INSTDIR/examplenewer.tgz" "another doc.txt" DetailPrint "untgz returned ($R0)" SetFileAttributes "$INSTDIRupdanother doc.txt" FILE_ATTRIBUTE_NORMAL DetailPrint "this should update the file" untgz::extractFile -u -d "$INSTDIR/upd" "$INSTDIR/examplenewer.tgz" "another doc.txt" DetailPrint "untgz returned ($R0)" SectionEnd Section "Test lzma compressed tarball" SectionIn 1 11 DetailPrint "" DetailPrint "Test lzma compressed tarball" untgz::extract -d "$INSTDIR/tlz_file" -zlzma "$INSTDIR/example.tlz" DetailPrint "untgz returned ($R0)" untgz::extract -d "$INSTDIR/tar_lzma_file" -zlzma "$INSTDIR/example.tar.lzma" DetailPrint "untgz returned ($R0)" SectionEnd Section "Test bzip2 compressed tarball" SectionIn 1 12 DetailPrint "" DetailPrint "Test bzip2 compressed tarball" ; same example files as others untgz::extract -d "$INSTDIR/tbz_file" -zbz2 "$INSTDIR/example.tbz" DetailPrint "untgz returned ($R0)" ; this one should fail DetailPrint "Test bzip2 extraction on invalid tarball" untgz::extract -d "$INSTDIR/tbz_fail" -zbz2 "$INSTDIR/example.tgz" DetailPrint "untgz returned ($R0)" SectionEnd Section "Test extraction tarball, no type indicated" SectionIn 1 13 DetailPrint "" DetailPrint "Test plain (uncompressed) tarball" untgz::extract -d "$INSTDIR/tar_file" "$INSTDIR/example.tar" DetailPrint "untgz returned ($R0)" DetailPrint "Test gzipped compressed tarball" untgz::extract -d "$INSTDIR/tgz_file" "$INSTDIR/example.tgz" DetailPrint "untgz returned ($R0)" DetailPrint "Test lzma compressed tarball" untgz::extract -d "$INSTDIR/tlz_file" "$INSTDIR/example.tlz" DetailPrint "untgz returned ($R0)" DetailPrint "Test bzip2 compressed tarball" ; same example files as others untgz::extract -d "$INSTDIR/tbz_file" "$INSTDIR/example.tbz" DetailPrint "untgz returned ($R0)" SectionEnd ; eof