Index: client/1.0/neutral/pkgd.eagle ================================================================== --- client/1.0/neutral/pkgd.eagle +++ client/1.0/neutral/pkgd.eagle @@ -1560,19 +1560,19 @@ # NOTE: TBD # proc getIfNeededVersions { interp fileName } { set result [list] - set oldPackages [interp eval $interp [list package names]] - interp invokehidden $interp source $fileName - set newPackages [interp eval $interp [list package names]] + set oldPackageNames [interp eval $interp [list package names]] + interp invokehidden $interp source $fileName; # [package ifneeded], etc. + set newPackageNames [interp eval $interp [list package names]] - foreach package $newPackages { - if {[lsearch -exact $oldPackages $package] == -1} then { - lappend result [list $package [lsort -decreasing \ + foreach packageName $newPackageNames { + if {[lsearch -exact $oldPackageNames $packageName] == -1} then { + lappend result [list $packageName [lsort -decreasing \ -command [list package vcompare] [interp eval \ - $interp [list package versions $package]]]] + $interp [list package versions $packageName]]]] } } return $result } @@ -1580,23 +1580,38 @@ # # NOTE: This procedure attempts to extract a package version information # from the specified file. The fileName argument is the local file # name to read. This procedure may raise script errors. # - proc extractVersionFromFile { fileName } { + proc extractVersionsFromFile { fileName } { switch -exact -- [file tail $fileName] { VERSION { - return [string trim [readFile $fileName]] + return [list [string trim [readFile $fileName]]] } pkgIndex.eagle - pkgIndex.tcl { # # TODO: Evaluate the package index file in a new "safe" # interpreter and obtain the newly added [package # ifneeded] version(s)? # - return "" + if {[catch {createInterp interp} error] == 0} then { + set result [getIfNeededVersions $interp $fileName] + } else { + pkgLog [appendArgs \ + "could not create interp to extract versions: " \ + $error] + + set result [list] + } + + if {[info exists interp]} then { + catch {interp delete $interp} + unset interp; # REDUNDANT + } + + return $result } } } # @@ -1652,12 +1667,12 @@ } set localFileName [file join $persistentDirectory $fileName] set compare [package vcompare \ - [extractVersionFromFile $downloadFileName] \ - [extractVersionFromFile $localFileName]] + [lindex [extractVersionsFromFile $downloadFileName] 0] \ + [lindex [extractVersionsFromFile $localFileName] 0]] if {[isEagle]} then { file delete -recursive -- $temporaryDirectory } else { file delete -force -- $temporaryDirectory