Index: client/pkgr.eagle ================================================================== --- client/pkgr.eagle +++ client/pkgr.eagle @@ -26,10 +26,38 @@ # prior to loading this package, the native Tcl auto-path should # be modified to include the "Eagle1.0" directory (i.e. the one # containing the Eagle core script library file "init.eagle"). # package require Eagle.Library + + proc formatPackageName { package version } { + return [string trim [appendArgs \ + $package " " [getLookupVersion $version]]] + } + + proc formatResult { code result } { + switch -exact -- $code { + 0 {set codeString ok} + 1 {set codeString error} + 2 {set codeString return} + 3 {set codeString break} + 4 {set codeString continue} + default {set codeString [appendArgs unknown( $code )]} + } + + if {[string length $result] > 0} then { + return [appendArgs $codeString ": " [list $result]] + } else { + return $codeString + } + } + + proc pkgLog { string } { + catch { + tclLog [appendArgs [pid] " : " [clock seconds] " : pkgr : " $string] + } + } proc stringIsList { value } { if {[isEagle]} then { return [string is list $value] } else { @@ -761,77 +789,61 @@ # NOTE: This version argument to this procedure must be optional, because # Eagle does not add a version argument when one is not supplied to # the [package require] sub-command itself. # proc packageUnknownHandler { package {version ""} } { + variable verboseUnknownResult + # # NOTE: First, run our [package unknown] handler. # - if {[catch {main $package $version handler} error(1)] == 0} then { - # - # NOTE: The repository [package unknown] handler succeeded, run the - # saved [package unknown] handler. - # - if {[catch { - runSavedPackageUnknownHandler $package $version - } error(2)] == 0} then { - # - # NOTE: Success? Just return and let Tcl (or Eagle) handle the - # rest. This is the "happy" path. - # - return - } else { - # - # NOTE: Failure? Attempt to log the error message. - # - catch { - tclLog [appendArgs \ - "pkgr: saved handler failed for \"" [appendArgs [string \ - trim $package " " $version]] "\", error: " $error(2)] - } - } - } else { - # - # NOTE: Failure? Attempt to log the error message and then maybe - # try the original [package unknown] handler. - # - catch { - tclLog [appendArgs \ - "pkgr: new handler failed for \"" [appendArgs [string \ - trim $package " " $version]] "\", error: " $error(1)] - } - - # - # NOTE: The repository [package unknown] handler failed, run the - # saved [package unknown] handler anyway. There is almost - # no chance of this actually providing the package. - # - if {[catch { - runSavedPackageUnknownHandler $package $version - } error(2)] == 0} then { - # - # NOTE: Success? Just return and let Tcl (or Eagle) handle the - # rest. - # - return - } else { - # - # NOTE: Failure? Attempt to log the error message. - # - catch { - tclLog [appendArgs \ - "pkgr: old handler failed for \"" [appendArgs [string \ - trim $package " " $version]] "\", error: " $error(2)] - } - } - } - - # - # NOTE: Both [package unknown] handlers failed in some way, return the - # error messages (i.e. both of them). - # - error [array get error] + set code(1) [catch {main $package $version handler} result(1)] + + if {$verboseUnknownResult} then { + pkgLog [appendArgs \ + "repository handler results for package \"" [formatPackageName \ + $package $version] "\", are " [formatResult $code(1) $result(1)]] + } + + # + # NOTE: Next, run the saved [package unknown] handler. + # + set code(2) [catch { + runSavedPackageUnknownHandler $package $version + } result(2)] + + if {$verboseUnknownResult} then { + pkgLog [appendArgs \ + "saved handler results for package \"" [formatPackageName \ + $package $version] "\" are " [formatResult $code(2) $result(2)]] + } + + # + # NOTE: Finally, check if the package was actually loaded and then + # optionally record/log the results. + # + set command [list package present $package] + if {[string length $version] > 0} then {lappend command $version} + + if {[catch $command] == 0} then { + if {$verboseUnknownResult} then { + pkgLog [appendArgs \ + "package \"" [formatPackageName $package $version] \ + "\" was loaded."] + } + } else { + if {$verboseUnknownResult} then { + pkgLog [appendArgs \ + "package \"" [formatPackageName $package $version] \ + "\" was not loaded."] + } + + set result(3) [appendArgs \ + "can't find package " [formatPackageName $package $version]] + + error [array get result] + } } proc setupPackageUnknownVars {} { # # NOTE: Prevent progress messages from being displayed while downloading @@ -890,10 +902,20 @@ variable strictUnknownLanguage; # DEFAULT: true if {![info exists strictUnknownLanguage]} then { set strictUnknownLanguage true } + + # + # NOTE: Emit diagnostic messages when a [package unknown] handler + # is called? + # + variable verboseUnknownResult; # DEFAULT: false + + if {![info exists verboseUnknownResult]} then { + set verboseUnknownResult false + } } proc main { package version caller } { # # NOTE: Issue the lookup request to the remote package repository. Index: client/pkgr.eagle.harpy ================================================================== --- client/pkgr.eagle.harpy +++ client/pkgr.eagle.harpy @@ -19,32 +19,32 @@ None Mistachkin Systems - cabfad50-50cd-4e56-91b7-2a30e4703f92 + 2a821830-6f0d-48e2-a69a-c6a1e4566199 SHA512 Script - 2016-08-17T02:26:59.0495625Z + 2016-08-17T05:26:13.0964375Z -1.00:00:00 0x2c322765603b5278 - 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