Index: client/pkgr.eagle ================================================================== --- client/pkgr.eagle +++ client/pkgr.eagle @@ -433,10 +433,64 @@ [namespace current] :: tclMustBeReady]]] return [eagle $script(outer)] } } + + proc hookPackageUnknownHandler {} { + set varName [appendArgs [getLookupVarNamePrefix] saved_package_unknown] + + if {[info exists $varName]} then { + error "package unknown handler already hooked" + } + + set $varName [package unknown] + package unknown [appendArgs [namespace current] ::packageUnknownHandler] + } + + proc unhookPackageUnknownHandler {} { + set varName [appendArgs [getLookupVarNamePrefix] saved_package_unknown] + + if {![info exists $varName]} then { + error "package unknown handler is not hooked" + } + + package unknown [set $varName] + unset $varName + } + + proc packageUnknownHandler { package {version ""} } { + if {[catch {main $package $version} error(1)] == 0} then { + return + } else { + tclLog [appendArgs \ + "pkgr: new handler failed for \"" $package " " $version \ + "\", error: " $error(1)] + } + + set varName [appendArgs [getLookupVarNamePrefix] saved_package_unknown] + + if {[info exists $varName]} then { + set oldHandler [set $varName] + } else { + set oldHandler "" + } + + if {[string length $oldHandler] > 0} then { + lappend oldHandler $package $version + + if {[catch {uplevel #0 $oldHandler} error(2)] == 0} then { + return + } else { + tclLog [appendArgs \ + "pkgr: old handler failed for \"" $package " " $version \ + "\", error: " $error(2)] + } + } + + error [array get error] + } proc main { package version } { # # 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 - 9f926fa1-99a4-41ab-bb33-50e8576a6d21 + 69cd6be1-1651-4b2b-b188-21b47f431860 SHA512 Script - 2016-08-15T05:05:47.5290547Z + 2016-08-15T18:30:19.8005391Z -1.00:00:00 0x2c322765603b5278 - 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