Index: client/pkgIndex.eagle ================================================================== --- client/pkgIndex.eagle +++ client/pkgIndex.eagle @@ -17,5 +17,8 @@ if {![package vsatisfies [package provide Tcl] 8.4]} {return} if {![package vsatisfies [package provide Eagle] 1.0]} {return} package ifneeded Eagle.Package.Repository 1.0 \ [list source [file join $dir pkgr.eagle]] + +package ifneeded Eagle.Package.Downloader 1.0 \ + [list source [file join $dir pkgd.eagle]] Index: client/pkgIndex.eagle.harpy ================================================================== --- client/pkgIndex.eagle.harpy +++ client/pkgIndex.eagle.harpy @@ -19,32 +19,32 @@ None Mistachkin Systems - bd4c7683-b636-4e5a-814d-af281cf8a8e8 + b0129e44-3b2c-42b0-a71f-1c07aa16afd2 SHA512 Script - 2016-08-15T21:35:31.1481953Z + 2016-08-16T02:51:50.7605000Z -1.00:00:00 0x2c322765603b5278 - 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 Index: client/pkgIndex.tcl ================================================================== --- client/pkgIndex.tcl +++ client/pkgIndex.tcl @@ -17,5 +17,8 @@ if {![package vsatisfies [package provide Tcl] 8.4]} {return} if {[string length [package provide Eagle]] > 0} then {return} package ifneeded Eagle.Package.Repository 1.0 \ [list source [file join $dir pkgr.eagle]] + +package ifneeded Eagle.Package.Downloader 1.0 \ + [list source [file join $dir pkgd.eagle]] Index: client/pkgIndex.tcl.harpy ================================================================== --- client/pkgIndex.tcl.harpy +++ client/pkgIndex.tcl.harpy @@ -19,32 +19,32 @@ None Mistachkin Systems - 6dbcb424-0213-43a5-af65-59a3015b500c + 69ca970a-0c3d-447a-91cf-44fed99731ee SHA512 Script - 2016-08-15T21:36:39.0690938Z + 2016-08-16T02:54:51.9323750Z -1.00:00:00 0x2c322765603b5278 - Bxt8syFTFTeddS7O+ilRnuIs7TPkar73FZWTgeLrrIe4MQ7EbVdnWUzpaL7NTajo8/QWSoyl4cUL - fmoeMXs52eqn7Kc4KOmoUVAhdJ5+5seO57/fXCTpyGzdm6B3GZVRmcKfTVYsKmHPITMNYVctQtd9 - nkQuIvRQHecMv+yI4msCvqQSIShd/9gN8AILk0WuUNdTV4QZpFLivC5sRpRbLuhl6XzF8ODi7s0O - bJ/Wt4dlTeCdge+KqBJfjM2+kRefAX+6nYlS4hztsLZtoHVK7ayRtwqUxhZ82eMIeB8MN3EEjOiQ - tR5U4DBRu/YpCMTb76ridnPKayjwVScz6icEHV0GPIOTrT0fUnK2Q4LGDW0JfCNs6YHrVNOGVRks - cNVAm2OQxLNvr4LCuMTylhh2VgaifzbMJK2rMmTzlApVoGS12y6wllo6UW4WWy18vKA72q7VZYL2 - OqyD5P60pojLztvw5gnlzTi1xkPoqVakR/WwDR3ppsc/CQNNfx4Qsjm9rr0MonZVbmJsp5U80/92 - mS0S9lvIULAmpSiJipaeoo2AZ6ByWihqya15TUBXX9/zvPW7sJKUZ/juOa0Sa4g1rH0+LlSRaLkT - UdyKiKZg7j9QcvfkJW/JBsKSGn/7+qKcMN4HiqNzphblFtO3BbYc4RvMnnQkjgK3o3yO2y8dFGHi - IObLQuq9535h2psnRjtPb/erVwNDs5zeQA344QrKXLblaj256NTKDopZtGd6ke0IX/SZWbeO8TY1 - teImYZ/aDiAej69pYETpqjjq3fiZCEltBLt+tIM6lDhXx8HA3zN3PQ4pXb7arOxKXt0Oz8h6Viz/ - 64gy0d2kP8gC0KBhF0o5unNSHiamGYV4g+BsTBHROZ1e/cRzcPzWSvzzrRUORi5lf1LpsmAVxzIV - 3KyvJZv13XXmrORh/KGAU1paWihZT0u4mGi0lBIpfkL3EF40tAoBVr0AoQKam0ovphsS4ZSpWZ55 - TUY2+M59lJ1mOEt/FAJYvUVppXQC5bnhCH+dWf6+oUfdqPIGML526h3sLNvczaoKVvLKFvDIFBBh - F1TGNn2ZywIHOTPoih9RdATo4r6+CUny+ms8n+PZEE8VoP6IN/gl3sSHRhQyzrnkZLARYV2OkYU+ - 21Ia4X4n9koY9fOg0UMGNtBGWwIut6xA9xkoeyXlIYPxmTU/HCAWdx+Y3x+PvYdjmbeR/W8kKRxy - s62QFkSUscwpimAoBQxCc57h++OxcVDQhkcvanlkG41Dg13nAjkSFpt/5gCA3UUOhxGyC8lTIV1Y - d9YmPTByWFgSBHJrPGhF2/tZFcpzKbAvnJlNW2w50SX9MQUdNjL78uMn1mk2NFFjIMpJWvGFRw== + HjolMDm2KhyxiFYnQ7OlS81iIPJnyriCCNo4ATggqUhZP1ag2J7e7j4EHbit8RSgAYuPUnT3SFQH + yOxLq410LfAGS0p+jTfua7JwfeXIBOGf5zbOADM79TS9iTI0qSyqHBrvSmHBhsyoPxrGs07wcrpe + hKYneaf+j9rjJpVL0bUasIEsBtoVhXUXEubuLuiLclcCT5w/VoHHa5IP6ogNdch2zPYv1wT0Vmo4 + RO3wHzvcMwCmyj0cV9z6QxoSVgmlHDRnODXRJP4kY+nzWsEkGlNy+Gy21qjL8h8fk+CWWU/AnqhC + M4VR4fJJYlfKBXFipq6SKCWe3dQV3skkE/ETVqPoTNW3I1/UcrH7CGZiWgCPoPGKFT1uVZt0aw5y + 9J9B1nuzNTxrPlyr3IM1UY91MBxyVO4sPUhvBYkhv36/CuWj7Nixlh9Mu7MyTGquj99l7K5/gThH + VkThdOn/Vn3+7X+8OfB6aDJmQotZzu1bqvywCqrtu/DbwE0QNRI/4VbVunZilAE0ULwwAEsCVqOQ + itILH2X2XVvNLFfRjK9BCVovyrzzmAj7bzj+furph1YY4XZmEDn/Sk+xbnHQencqAFjracL4kpOs + gZ7FaGgXcAuk8LmCfVD0HWGLiVVGMVMON35lu6FUfjiFkEZTuE104/ijZUce2KxWYQfbSwrv/Ywu + hUPSDRXnmaZwwYNSYVkR6zGinmWibVRWLWP6hLy0rf2xxU5bbRDhLddHoOVLdIV0s6SRMS87z1y4 + I7mNnql6OVVl55O/Ro/GQgIkp2+gaMkef9/FDGS6jMufZA6EuCEJD0yraARofd100tjnln3EVa/r + tn0ggpaqEXyXlqv9plG9PONcjPbBp+/zPnfihOuzUEsxgi+mkoxmSQh9UWQ9ELdgrL0m9zoVr5IV + jdyHqWkAIoVM4ILN7ORsRTIKGqxqHxSiier0ySvgjaPFxd7M1uzaAuvFeCjMx74XCmsDFGEHbI49 + jc++8u+rA+ZvCVL6nhv64QgP3ce4PYznUDhSDHkLGstaw5JOibPTgiUGvyPTFVJE1cwSmYUe6KuQ + 2oeD1DKFs4/U0n902tq2aly5H7plz4NLuV5kUy1EWCANQFi2A1LX0xMoztHdSagmdmvykIronkbP + kAawsH99A9ukY1Er09bw6WDMUX6aACZQw++/e0eQs/0hkWX7o+rFFQMgEbRz5g5q7+pXVkDd1T9x + WTHAMsXWaaDeB0hcA53HkB92APDnrUi04+YOu5F1Eh0+lIi7GA+Y5fFcItVaXzuog9bUIzUAvuPh + FJGnCHXQ+gKP2/Y6c2Kd/3+O8vHPUNwbQfH4vONk4j4WANYU7oqYczSkxejI7/FJ0qGO2pueoA== ADDED client/pkgd.eagle Index: client/pkgd.eagle ================================================================== --- client/pkgd.eagle +++ client/pkgd.eagle @@ -0,0 +1,192 @@ +############################################################################### +# +# pkgd.eagle -- +# +# Extensible Adaptable Generalized Logic Engine (Eagle) +# Package Downloader Client +# +# Copyright (c) 2007-2012 by Joe Mistachkin. All rights reserved. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. +# +# RCS: @(#) $Id: $ +# +############################################################################### + +# +# NOTE: Use our own namespace here because even though we do not directly +# support namespaces ourselves, we do not want to pollute the global +# namespace if this script actually ends up being evaluated in Tcl. +# +namespace eval ::PackageDownloader { + proc setupDownloadVars {} { + # + # NOTE: Prevent progress messages from being displayed while downloading + # from the repository, etc? By default, this is enabled. + # + variable quiet; # DEFAULT: true + + if {![info exists quiet]} then { + set quiet true + } + + # + # NOTE: The base URI for the package distribution web site. + # + variable baseUri; # DEFAULT: https://urn.to/r/pkgr + + if {![info exists baseUri]} then { + set baseUri https://urn.to/r/pkgr + } + + # + # NOTE: The URI where a single package file may be found. This file will + # belong to a specific version of one package. + # + variable downloadUri; # DEFAULT: ${baseUri}?...&filename=${fileName} + + if {![info exists downloadUri]} then { + set downloadUri {${baseUri}?download&ci=trunk&filename=${fileName}} + } + + # + # NOTE: The root directory where any persistent packages will be saved. + # + variable persistentDirectory; # DEFAULT: [getPersistentRootDirectory] + + if {![info exists persistentDirectory]} then { + set persistentDirectory [getPersistentRootDirectory] + } + } + + proc getPersistentRootDirectory {} { + # + # NOTE: Return a directory parallel to the one containing the library + # directory. + # + return [file join [file dirname [info library]] pkgr] + } + + proc addToAutoPath { language directory } { + # + # NOTE: Add the specified directory to the auto-path if not already + # present. + # + if {[string length $language] == 0 || $language eq "eagle"} then { + if {[isEagle]} then { + if {![info exists ::auto_path] || \ + [lsearch -exact $::auto_path $directory] == -1} then { + lappend ::auto_path $directory + } + } else { + ::PackageRepository::eagleMustBeReady + + eagle [string map [list %directory% $directory] { + if {![info exists ::auto_path] || \ + [lsearch -exact $::auto_path {%directory%}] == -1} then { + lappend ::auto_path {%directory%} + } + }] + } + } elseif {$language eq "tcl"} then { + if {[isEagle]} then { + tcl eval [tcl master] [string map [list %directory% $directory] { + if {![info exists ::auto_path] || \ + [lsearch -exact $::auto_path {%directory%}] == -1} then { + lappend ::auto_path {%directory%} + } + }] + } else { + if {![info exists ::auto_path] || \ + [lsearch -exact $::auto_path $directory] == -1} then { + lappend ::auto_path $directory + } + } + } else { + error "unsupported language, no idea how to modify auto-path" + } + } + + proc downloadFiles { language version fileNames persistent } { + variable baseUri + variable downloadUri + variable persistentDirectory + variable quiet + + if {$persistent} then { + set downloadRootDirectory [file join $persistentDirectory] + } elseif {[info exists ::env(PKGD_TEMP)]} then { + set downloadRootDirectory [file join $::env(PKGD_TEMP) pkgr] + } elseif {[info exists ::env(TEMP)]} then { + set downloadRootDirectory [file join $::env(TEMP) pkgr] + } elseif {[info exists ::env(TMP)]} then { + set downloadRootDirectory [file join $::env(TMP) pkgr] + } else { + error "please set PKGD_TEMP (via environment) to temporary directory" + } + + set downloadDirectories [list] + + foreach fileName $fileNames { + if {[string length $fileName] == 0 || \ + [file pathtype $fileName] ne "relative"} then { + error [appendArgs \ + "bad file name \"" $fileName "\", not relative"] + } + + set directoryParts [file split [file dirname $fileName]] + + if {[llength $directoryParts] == 0} then { + error [appendArgs \ + "bad file name \"" $fileName "\", no directory parts"] + } + + set downloadDirectory [eval file join \ + [list $downloadRootDirectory] $directoryParts] + + set downloadFileName [file join $downloadDirectory \ + [file tail $fileName]] + + if {!$persistent} then { + catch {file delete $downloadFileName} + } + + file mkdir [file dirname $downloadFileName] + + set fileName [file join $language $version $fileName] + set uri [subst $downloadUri] + + if {[isEagle]} then { + writeFile $downloadFileName [interp readorgetscriptfile -- "" $uri] + } else { + writeFile $downloadFileName [::PackageRepository::getFileViaHttp \ + $uri 10 stdout $quiet] + } + + lappend downloadDirectories [file dirname $downloadDirectory] + } + + set downloadDirectories [lsort -unique $downloadDirectories] + + foreach downloadDirectory $downloadDirectories { + addToAutoPath $language $downloadDirectory + } + } + + # + # NOTE: Setup the variables, within this namespace, used by this script. + # + setupDownloadVars + + # + # NOTE: This package requires the package repository client package. + # + package require Eagle.Package.Repository + + # + # NOTE: Provide the package to the interpreter. + # + package provide Eagle.Package.Downloader \ + [expr {[isEagle] ? [info engine PatchLevel] : "1.0"}] +} ADDED client/pkgd.eagle.harpy Index: client/pkgd.eagle.harpy ================================================================== --- client/pkgd.eagle.harpy +++ client/pkgd.eagle.harpy @@ -0,0 +1,50 @@ + + + + None + Mistachkin Systems + 06b76c33-0e3b-4120-8142-0053f4d17521 + SHA512 + Script + 2016-08-16T02:50:58.2761250Z + -1.00:00:00 + 0x2c322765603b5278 + + VsQxIv0pQbKwapByuSpDz4HcbTBrr+UtPdW8V2nlF/7x5yjzxXGcBqH/Ub+zYYLGUvDgPLKW2nST + UlGW+GRnKOJ4rvVytLL4IY415E4p86qUL5l3mgeY++OyYHSDgbBEEW1SlbU+l+0NaZvH2zFWBkMe + mDbEsuGRJpGvXm1sJfZP15UTnoNNJ/446isFNRvPCV9gTp7/1GFs+w9943iXRYAQi9hN2fSSgotc + FapDXfkspC0arL4jFCpo0WrY2Pdtc//avflPm8OR0dZeZFNG1fLQHMEvWpq+CwY/KHZ3xMEUDIb5 + +i+ziLYO+3nNtXuaxzEnTgajelG0qPMZceOEF0Esz3ePOMKNhl7N503y4rm8U/IRGVTkPeCDwjHW + mmX5ORiHt/QM8asUVfl+Mh1bmy6ty6Lk3xX8hqV3ZsE85bVSihrFirXXEcHMW6CZY3sC0I5Mpn0D + V5u9MzrI6iE6oBsme86/WMsBq93wHweIqV5RNxiYG+Cdyb3E4yCMh2Kx5cHegiFA0oTbUy+IGp5Q + 3n5pA0lGwhuWUrME9cVj6b/+ZMMdlwhMWQSpZE6GdDf5wJeUY4iK9IIqUADHnrqOs3chgUJgYrjo + b88nXT/2AFVZqWe9R+ecln6e3FjFCNfyLqNpfo0miOXYxj52m2dWNOlOYVZsjyfxFm2DjYTwf0Zr + VJJWF1ojfah1D9Ys1HxpuvbQkKAZD03lJfp5rLStD2vo3o8dyujZtoQ09nRzStSOuflBFd+hEmzh + 4/nrkRs8+szY0MMSrwZSTlOn9WwvEvtDEzHs+9sLftfjg3FO/QLTV/ZTiROKZn1kTeLhczNRTpDy + 6HXUR4rxqrvQ9hT8fgRe9O3uEvazjktkoPkpNcTSsC0Hdwf+thuaGZiqx9dHebIzrLsBFz9gQdJC + LCMwDeNyOykj10vV6GIfUjLCysJqdBPfdyBDvRbd6gXhkKnzTn5M1xiCAdnRNnXKNbXIzNIz8P+w + z3Ygzy0JBaZ5bM8lADfY4A9kPSAqab07w/Rln/qOcfxteap/qwLnXmjJ1fyBorozisJ82Ldi+4un + jFbddGkFyOamC/gLVI2JyyiBdb8HOUkmSQOu7/2BpdnOPtLA8udhyDVI8g83EUeDwGcRXJCzWH8B + 1fhfdycdMGrFkg5OHQHGo0ESod1lMwrr95LzEMB1StUx/HBVBZuBS0eJc3FzAVcDClgwCvLY6Ahw + 0sp5yaO+zd0Rcuq3DQ+RLwiQmHBO+jFjCScOw9RAEU+MTL5hbEv6IloIOLpsVcI6fmBncfRBp1Nw + 7NpQxGD2cQYVUHHbMO1opK69LFlyfCzaleKSHRo2uugSCaJI883TE0T5ErCBwYtnqYVPuOL2Wg== + +