📄 filecopy.tcl
字号:
lastErrorSet $logMsg uninstLog setup $logMsg setupFileNext } MEMORY_LOW { set msg [strTableGet FILESCOPY_MEMORY_LOW_WARN] if { [isGUImode] } { if { $ctrlVals(useInputScript) } { autoSetupLog "$msg" autoSetupLog "Application Exit\n" set setupVals(cancel) 1 applicationExit return 0 } } if { [isGUImode] } { set ret [dialog ok_cancel "Setup" $msg question 0] } else { puts "\n\n$msg\n\nChoose 0: Continue\nChoose 1: Exit SETUP\n" set ret [prompt] } switch -- $ret { 0 { return NULL } 1 { # if TEXT mode, exit if { ![isGUImode] } { return 0 } quitCallback } } } NO_ZIP_FILE { set msg [strTableGet FILESCOPY_CDROM_READ_ERROR] set logMsg "\terror: cannot copy $fileName : no zip file" if { [isGUImode] } { if { $ctrlVals(useInputScript) } { autoSetupLog "$logMsg" autoSetupLog "Application Exit\n" set setupVals(cancel) 1 applicationExit return 0 } } if { [isGUImode] } { set ret [dialog re_ig_cancel "Setup" $msg question 0] } else { puts "\n\n$msg\n\nChoose 0: Retry\nChoose 1: Ignore\nChoose 2: Abort\n" set ret [prompt] } switch -- $ret { 0 { return NULL } 1 { lastErrorSet $logMsg uninstLog setup $logMsg setupFileNext } 2 { # if TEXT mode, exit if { ![isGUImode] } { return 0 } quitCallback } } } BAD_PARAM { set logMsg "\terror: cannot copy $fileName: bad param" lastErrorSet $logMsg uninstLog setup $logMsg setupFileNext } DISK_FULL { set msg [strTableGet FILESCOPY_DISK_FULL_WARN] if { [isGUImode] } { if { $ctrlVals(useInputScript) } { autoSetupLog "$msg" autoSetupLog "Application Exit\n" set setupVals(cancel) 1 applicationExit return 0 } } if { [isGUImode] } { set ret [dialog ok_cancel "Setup" $msg question 0] } else { puts "\n\n$msg\n\nChoose 0: Continue\nChoose 1: Exit SETUP\n" set ret [prompt] } switch -- $ret { 0 {return NULL} 1 { set setupVals(diskfull) 1 # if TEXT mode, exit if { ![isGUImode] } { return 0 } quitCallback } } } UNEXPECT_EOF { set logMsg "\terror: can not copy $fileName: zip corrupt" lastErrorSet $logMsg uninstLog setup $logMsg setupFileNext } END_OF_LIST { return break } default { set msg "Setup was unable to copy $fileName from \ the CDROM due to $retVal.\n\n" if { [isGUImode] } { if { $ctrlVals(useInputScript) } { autoSetupLog "$msg" autoSetupLog "Application Exit\n" set setupVals(cancel) 1 applicationExit return 0 } } if { [isGUImode] } { set ret [dialog re_ig_cancel "Setup" $msg question 0] } else { puts "\n\n$msg\nChoose 0: Retry\nChoose 1: Ignore\nChoose 2: Abort\n" set ret [prompt] } switch -- $ret { 0 { return NULL } 1 { set logMsg "\terror: cannot copy $fileName : $retVal" lastErrorSet $logMsg uninstLog setup $logMsg setupFileNext } 2 { # if TEXT mode, exit if { ![isGUImode] } { return 0 } quitCallback } } } } return NULL}################################################################################ fileRemove - remove the specified file## This procedure removes the specified file, and if fails to do so, it's then# popping up a dialog to query for the next action.## SYNOPSIS# fileRemove <fileName>## PARAMETERS:# fileName : a path filename## RETURNS:# OK : successful removing <filename># RETRY : failed to remove the file, and user wants to retry.# IGNORE : failed to remove the file, and user wants to ignore it.## ERRORS: N/A#proc fileRemove {fileName} { if [catch {file delete $fileName} error] { set msg [strTableGet FILESCOPY_FILE_ACCESS_ERROR $fileName $error] if { [isGUImode] } { set ret [dialog re_ig_cancel "Setup" $msg question 0] } else { puts "\n$msg\n\nChoose 0: Retry\nChoose 1: Ignore\nChoose 2: Cancel\n" set ret [prompt] } switch -- $ret { 0 { return "RETRY" } 1 { set logMsg "\terror: $fileName: $error" lastErrorSet $logMsg uninstLog setup $logMsg return "IGNORE" } 2 { # cancel # if TEXT mode, exit if { ![isGUImode] } { return 0 } quitCallback } } } return "OK"}################################################################################ filesCopy - copies all the selected product files into the user destination# directory.## This routine walks thru each selected product, and do the following actions:## - runs the preInstall.tcl if any# - creates a record to the setup.log# - obtains a list of sub-products, and do the following actions:## + calls setupFileSetMake to build the sub-product filelist# + calls setupFileExtract to extract each file from the filelist.# An internal pointer is advanced until it hits the end of the list.# The setupFileExtract function returns one of the following messages:## Message Next actions# ------- ------------# OK - creates uninstall record, advances file pointer.# EXIST_AND_SAME - skips this file# EXIST_AND_NEWER - backup the original file, and extracts this file# again# EXIST_AND_OLDER - same as above# MULTIPLE_VERSION - keeps the newer version of the file, backup the# original if it's older.# NOT_FOUND - queries for retry until user gives up.# ZIP_ERROR - logs the error message into the setup.log# MEMORY_LOW - queries user for continue or not.# NO_ZIP_FILE - queries for retry until user gives up.# BAD_PARAM - logs the error message into the setup.log# DISK_FULL - queries user for continue or not.# UNEXPECT_EOF - logs the error message into the setup.log# END_OF_LIST - continues w/ the next sub-product.## - runs the postInstall.tcl if any### SYNOPSIS# filesCopy## PARAMETERS: N/A## RETURNS: N/A## ERRORS: N/A#proc filesCopy {} { global setupVals global ctrlVals global current_file global multipleVersion cd [destDirGet] set setupVals(cancel) 0 set totalFiles [cdInfoGet totalFile] set desc "Unknown component" set i 0 uninstLog setup "CD manufacturing time: [cdNameGet time]" uninstLog setup "[cdInfoGet number]\t$setupVals(version)\t[destDirGet]" uninstLog setup [cdNameGet description] # Append CD Info to the uninstall record uninstLog cdNumber "$setupVals(CDnumber)" # Add host OS to setup log if {[isUnix]} { catch {exec uname -a} hostOS } else { if [catch {setupWinVerGetEx} hostOS] { puts "error: $hostOS" } } uninstLog setup "$hostOS" # find products that specify to be installed last set firstList "" set lastList "" foreach prodIndex [cdInfoGet selectedProdIndexList] { if {[searchAndProcessSection InstallLast \ [chooseInfFile $prodIndex]]==1} { puts "INF Processing: installing \ [productInfoGet name $prodIndex] last" set lastList [linsert $lastList end $prodIndex] } else { set firstList [linsert $firstList end $prodIndex] } } set sortedSelectedProdIndexList [concat $firstList $lastList] set licensedProds "" foreach prodIndex $sortedSelectedProdIndexList { currentIndexSet $prodIndex # Do preinstall if any execute [productInfoGet name $prodIndex]/preInstall.tcl # Append install info to the setup.log set featureID [productInfoGet featureId $prodIndex] set productName [productInfoGet name $prodIndex] set prodNum [productInfoGet number $prodIndex] set desc [productInfoGet desc $prodIndex] set current_product $desc # compile the list of licensed products if {[licensedProductCheck $featureID]} { lappend licensedProds "licensed product: $productName $featureID" } uninstLog setup "$prodNum\t$desc" if ![info exists setupVals(confirmation)] { set setupVals(confirmation) "" } lappend setupVals(confirmation) "$desc" # Append info to the uninstall record uninstLog info "$desc" # Begin the copy loop set prevFileName "" foreach partIndex [productInfoGet selectedPartIndexList $prodIndex] { set partDesc [partInfoGet desc $partIndex] if [catch {setupFileSetMake $partIndex} error] { uninstLog setup "\tskip installing $partDesc: $error" dbgputs "unable to install $partDesc: $error" lastErrorSet "$error" continue } else { dbgputs "Installing [productInfoGet desc $prodIndex] -> $partDesc" } while { 1 } { if {$setupVals(cancel) == 1} {return} set fileName [setupFileNameGet 0] set current_file [checkPathLen $fileName] # update meter set percent [expr $i * 100 / $totalFiles] meterUpdate $percent $fileName # GUI mode only if { [isGUImode] } { if {![limitColors]} { bbrdUpdate $percent } } set f [destDirGet]/$fileName catch {setupFileExtract} retVal # change "group" and "other" execute permissions for Unix files. if {[isUnix]} { setExecutePermissions $f } dbgputs [format "%20s\t%s" $retVal $fileName] set instRet [processInstall $retVal $fileName $prodIndex] if { $instRet == "break" } { break } elseif { $instRet == 0 } { # for TEXT mode, return value = 0, exit SETUP if { ![isGUImode] } { return 0 } } if {"$prevFileName" != "$fileName"} { incr i set prevFileName $fileName } } } execute [productInfoGet name $prodIndex]/postInstall.tcl } # # fix up multiple versions of file # set count 0 set totalFiles [llength [array names multipleVersion]] foreach fileName [array names multipleVersion] { set percent [expr $count * 100 / $totalFiles] meterUpdate $percent "Resolving version conflicts..." incr count set f [destDirGet]/$fileName set numProdIndex [llength $multipleVersion($fileName)] set pIndx [lindex $multipleVersion($fileName) 0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -