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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
+ 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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
- 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
+ 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
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==
+
+