Check-in [878f889075]
Not logged in
Overview
Comment:Add initial draft of the package downloader tool.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 878f88907519fbb3a997775eb73518bbf2a0c5d3
User & Date: mistachkin on 2016-08-16 03:10:41
Other Links: manifest | tags
Context
2016-08-16
21:35
Add preliminary support for package scripts that have a PGP signature instead of a Harpy certificate. check-in: 4335ea0899 user: mistachkin tags: trunk
03:10
Add initial draft of the package downloader tool. check-in: 878f889075 user: mistachkin tags: trunk
2016-08-15
22:18
Coding style corrections. check-in: 509edf2c46 user: mistachkin tags: trunk
Changes

Modified client/pkgIndex.eagle from [3790f29011] to [75bee73b20].

15
16
17
18
19
20
21



15
16
17
18
19
20
21
22
23
24







+
+
+
###############################################################################

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]]

Modified client/pkgIndex.eagle.harpy from [50c972f469] to [ff5ac87783].

17
18
19
20
21
22
23
24

25
26
27

28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48


















49
50
17
18
19
20
21
22
23

24
25
26

27
28
29
30


















31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50







-
+


-
+



-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


    THE ASSOCIATED SOFTWARE MAY NOT WORK PROPERLY IF THIS FILE IS ALTERED.
-->
<Certificate xmlns="https://eagle.to/2011/harpy"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Protocol>None</Protocol>
  <Vendor>Mistachkin Systems</Vendor>
  <Id>bd4c7683-b636-4e5a-814d-af281cf8a8e8</Id>
  <Id>b0129e44-3b2c-42b0-a71f-1c07aa16afd2</Id>
  <HashAlgorithm>SHA512</HashAlgorithm>
  <EntityType>Script</EntityType>
  <TimeStamp>2016-08-15T21:35:31.1481953Z</TimeStamp>
  <TimeStamp>2016-08-16T02:51:50.7605000Z</TimeStamp>
  <Duration>-1.00:00:00</Duration>
  <Key>0x2c322765603b5278</Key>
  <Signature>
    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
  </Signature>
</Certificate>

Modified client/pkgIndex.tcl from [75024466f9] to [f9bf6ed786].

15
16
17
18
19
20
21



15
16
17
18
19
20
21
22
23
24







+
+
+
###############################################################################

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]]

Modified client/pkgIndex.tcl.harpy from [e08d6f044c] to [50732b21e2].

17
18
19
20
21
22
23
24

25
26
27

28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48


















49
50
17
18
19
20
21
22
23

24
25
26

27
28
29
30


















31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50







-
+


-
+



-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


    THE ASSOCIATED SOFTWARE MAY NOT WORK PROPERLY IF THIS FILE IS ALTERED.
-->
<Certificate xmlns="https://eagle.to/2011/harpy"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Protocol>None</Protocol>
  <Vendor>Mistachkin Systems</Vendor>
  <Id>6dbcb424-0213-43a5-af65-59a3015b500c</Id>
  <Id>69ca970a-0c3d-447a-91cf-44fed99731ee</Id>
  <HashAlgorithm>SHA512</HashAlgorithm>
  <EntityType>Script</EntityType>
  <TimeStamp>2016-08-15T21:36:39.0690938Z</TimeStamp>
  <TimeStamp>2016-08-16T02:54:51.9323750Z</TimeStamp>
  <Duration>-1.00:00:00</Duration>
  <Key>0x2c322765603b5278</Key>
  <Signature>
    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
  </Signature>
</Certificate>

Added client/pkgd.eagle version [1ba0f38394].

































































































































































































1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
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 version [f0343c3c56].



















































1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<?xml version="1.0" encoding="utf-8"?>
<!--
    Eagle Enterprise Edition Script Certificate

    The format of this file is proprietary and may not be reverse
    engineered.

    This certificate file is subject to the terms of the license agreement
    located at:

    https://eagle.to/enterprise/license.html

    By using this file and/or the associated software, you agree to abide
    by the terms of the license agreement.

    PLEASE DO NOT EDIT THIS FILE.
    THE ASSOCIATED SOFTWARE MAY NOT WORK PROPERLY IF THIS FILE IS ALTERED.
-->
<Certificate xmlns="https://eagle.to/2011/harpy"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Protocol>None</Protocol>
  <Vendor>Mistachkin Systems</Vendor>
  <Id>06b76c33-0e3b-4120-8142-0053f4d17521</Id>
  <HashAlgorithm>SHA512</HashAlgorithm>
  <EntityType>Script</EntityType>
  <TimeStamp>2016-08-16T02:50:58.2761250Z</TimeStamp>
  <Duration>-1.00:00:00</Duration>
  <Key>0x2c322765603b5278</Key>
  <Signature>
    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==
  </Signature>
</Certificate>