Changes On Branch 2a6ac9473f58908b
Not logged in

Changes In Branch uploaderClient Through [2a6ac9473f] Excluding Merge-Ins

This is equivalent to a diff from 6240d4658d to 2a6ac9473f

2016-12-18
21:53
Initial work on the package uploader client. Not yet fully working nor tested. check-in: 43aac90409 user: mistachkin tags: trunk
21:50
More work on supporting the package uploader client. Use the new OpenPGP 'keys' file (i.e. 'keys.asc', the one with potentially more than one Package Signing Key). Closed-Leaf check-in: 0fc9d3e420 user: mistachkin tags: uploaderClient
20:56
Make the 'getCommonContainingDirectory' procedure work correctly for all corner cases. More cleanup. check-in: 2a6ac9473f user: mistachkin tags: uploaderClient
03:10
Comments, cleanup, more work in progress on the uploader client. Not yet tested. Also, 'getContainingDirectory' still needs work to forbid mismatched root directories. check-in: e05a3e1067 user: mistachkin tags: uploaderClient
2016-12-17
08:33
More work in progress on the uploader client. check-in: 2b5c357209 user: mistachkin tags: uploaderClient
05:31
Add stub file for the package uploader tool. check-in: 6240d4658d user: mistachkin tags: trunk
05:07
Initial work on the package uploader client. Add procedures to permit programmatically signing package files. check-in: 9f66ed055c user: mistachkin tags: trunk

Modified client/1.0/neutral/pkgr.eagle from [46ce6d2906] to [6dfa391a89].

350
351
352
353
354
355
356
357

358
359
360
361
362
363
364
350
351
352
353
354
355
356

357
358
359
360
361
362
363
364







-
+







      if {[catch {
        eval exec -success Success $openPgpInstalledCommand
      } result]} then {
        error "cannot use OpenPGP: may not be installed and/or configured"
      }
    } else {
      if {[catch {
        eval exec [subst $openPgpInstalledCommand]
        eval exec $openPgpInstalledCommand
      } result]} then {
        error "cannot use OpenPGP: may not be installed and/or configured"
      }
    }

    if {![info exists result] || \
        ![regexp -- $openPgpInstalledPattern $result]} then {

Modified client/1.0/neutral/pkgr.eagle.asc from [4f9aea824a] to [1151a9c981].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17













18
1
2
3
4













5
6
7
8
9
10
11
12
13
14
15
16
17
18




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

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository

iQIcBAABCAAGBQJYVMeqAAoJEFAslq9JXcLZ7TMP/i1uqLXgToUaI4sFV8hoxPWQ
buaSI3nfNLJvv8jVJAfe7VolYJw9v0FHpeDTcVToVUDlcGy8W561stkgYn96f4tZ
C7jLGhqtv5IpESjXDm/1bf8QoJrLShx74W68/o1ae4uhlpPYxZg5vcSYFNS09h+r
BGNNza0rZS/4elml92cbsfc/h3Qn2A9chu34eiF0TC4zhCknrmU4LKD3yhlqpJWT
cDIGyKUecW+mSXJGltmmJL+IgO+tNwA72q91sJ3ZIsaEFdYMENZkwva9l7LxoK3j
tqJqknv6a8H1V9PKN9c+qUROq0c5+biwhgldfg1JTLD5ah1YcrZNB9idUen/ftf+
QTQnx3nYPLl7fnMiM6S6svWZjSdZ98Fnpu4Jr1F3Im4DSp6wQcILYruGah9ac49Z
XB/yFpiit7ZhoTH1IVNYYQMdqbf/Wb6WBO5q4CxA000C6ANrk2Cm7Xh5wFlTafg3
VsEzRNhOLfu8dO2CaOzTIfRo4QhwDJl9yDauei4sPo0J2FmbPTyMBnBwz/X14Gcv
st5sFAIsryfSx2c3rDpnj8aFHcQLi0DuB8QCR0p4aSKVb2lenmZfcA85PZYD662v
2x/41sP//rajbEz3YjJlnoK19acDwJSU6uFuvLEqklnd7TDFHl1YtnVVD6wvfSxV
F67DBCIaQLgfEMK45lzv
=waFs
iQIcBAABCAAGBQJYVf3KAAoJEFAslq9JXcLZdl8P/3gJbugJFTv34QLfX4lGkE/O
90DdUo9cE5Q3B4TzhdI7q0Pndr3npbHfYN4xE1x31ru49TAvFfvqlfb8ruWbLaut
yVT4qWixveJ+9Dmyqz/caP4EEOLiWy5Esyiodsnm0vfmsZNF2l2ZheLemcLk6Vzm
Z5mBH3wDwdPP0KP7qKEpz5havgnyt1OMqAeilq8Kr0azBhlKKfCv74XpYvKJk+Rp
6DHO9aRrszMs6MOBHwPBs7WncMiOANNHnj/Q24sxIdqGjIA7FmU4mkZBC0j2ambD
8tk8DUvKLeHMsttpB8K6pur9OdLkXTNy96tH2wMsSH77ewvcuNJs+znB8p2OEcGr
s61qNhioRym9L/mtoMeaDQhmTr6xHLP5brLW2VKrm61UoWpakTjcKIX7mKEe2KN0
9PVWgVoKO1u3xxRpqERsdgb72AiHk0usODIqy7WazLLOh+he/yOSiJtYj2Q4VsiC
O5E7GTkdD9XRWaltkJ2TYxDC8C4VSUoWsXTKHnMRczg3iIk6sqgxRkAHqa1ggjM9
sBMuwJtJwKeWvLtTwJef5qZp4pdY9rxZo5wn92nMx9veLUit963ORAe1ww2gqFdk
o7kAVia6QL6csbhyO8hgx+ozi0vrD9THIfO6KNYXhn6zEthX8ZYcf9gS/gUcpef9
HP4UN52z9xe1HmJ1zztl
=m5li
-----END PGP SIGNATURE-----

Modified client/1.0/neutral/pkgr.eagle.harpy from [c814762109] to [ad1f66b9ba].

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







-
+


-
+



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


    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>b26eb0c0-d25c-485f-9228-064fdd1f781a</Id>
  <Id>0dc9006c-d011-45fe-a801-6b1fb194725f</Id>
  <HashAlgorithm>SHA512</HashAlgorithm>
  <EntityType>Script</EntityType>
  <TimeStamp>2016-12-17T05:04:57.1298828Z</TimeStamp>
  <TimeStamp>2016-12-18T03:08:09.6591796Z</TimeStamp>
  <Duration>-1.00:00:00</Duration>
  <Key>0x9559f6017247e3e2</Key>
  <Signature>
    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
  </Signature>
</Certificate>

Modified client/1.0/neutral/pkgr.eagle.harpy.asc from [e6c0f2e243] to [5194a87a9b].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17













18
1
2
3
4













5
6
7
8
9
10
11
12
13
14
15
16
17
18




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

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository

iQIcBAABCAAGBQJYVMetAAoJEFAslq9JXcLZE/8QAJY8LtO8YUPPhTY+RPAPw7vZ
R5W/eCOJ1Qy185xjLVYeb6V0ULxEAgY7iNw4mAkF7dZl1oQ56Xhao4L2sH4+nsMx
q/BU0Y/Bk0StpHpRvw10bWl/iVo4W2qK07gXepgL9zpI5pl/lJerSJA3LHd6RD8T
Au/2dw6d/N4ozkc3BTZf4PVZCKfLzVdQ1hEbpDTVlWd0fDS9sEywdML/OKgMzvbG
YfJrTwjF8sf3urJDbBolFxV430mdbIbLPyvkUCCiOjC3oJi0766B2Xsz+95fY16y
fMa8T96R2atRPCOolDN5jdIvCkP3VRKlts6OoNZ7nojiS0SsDsREgt5cEFWieXYg
JFf0Ln5wqjAWxRLl/MlZw2qoN4VQKD9OyS/m/lncNQ4udP4/AIeuQIIeJ0e/pjuQ
7jiYm9ZCyBcFT7ncU1gZjp9zQar4hWY1oF79RfiwAhno8Rz1CwAFNGKaJ7nenx+7
/orx8qcDMFZnPh0fsLQJ2f+Z7TTFmLDuYvA8tDHZRWF4RO//+HYec2KZYIay1ZHI
6RiaNzwjNKI2RF9yJUS+6tGhhu1ck2MR5IXuQ9QFLXqke15qwkpMdKUTxu8N2K/L
FToN9rn9WfC6O1TeUGZkYr7q9hgZ7hBCn0iiLikrgafxuSVQ5eQCRyLD+04vn3nX
cXMvYolWIL6QiREGHpsW
=zSis
iQIcBAABCAAGBQJYVf3LAAoJEFAslq9JXcLZVWgQAJRR53COXyGIGTjnYLyzyZ81
dYJgaM0TIOGK6kPZ+QnJqVKZzrTK5v68JSBxOaIhP15GcBhBfk03Mfi12QjdnZ4N
NkZ7odh1X3glBbRoSHCqfyfma8Uz25fW2KVdggFCFyX5SK5A1JgWbFJO2CCcFqy5
po6BDC9kKXAPy6a9PEpPtITXnzo0eixYEQ2Y1p2fcWofKJaGtkNOtxEk5q4S9JLX
vV9oFTRnKYOdwil2Ik1LAgANrCYI/gDDckDOsQ92D86xfz6Hz/NHRFbI4zrxR5pm
PqtmRFq58IxJ/6e7AydJ0hEQHuRBA+AES/jkvsb4dIo/NLkiTth0mV/nQodBGIWK
oT62Ytz/V4mzXrmlwdquHb3mdu3SAkCi/kSEFBpUzg+oOTWPPJ2hNZ7cukhAsT0u
WIJZFFi5QgWE8FP+yNPX3RqqjLX2ub1kTacLi4cWl71eOYHC15eIMQFuSDdfYNT6
Oqz9h9sOhLXtZacQmUqYZdT9lXX6QWutfcbjzacIS6c6z0hzJGI7q4MGFsBIJw/c
jHlgizkCGIX71KtYCeODwpnHBEqy8DPUlRc6Js0xWruXna2f5W7jwVAkVQZTWSE0
8cIwQ6a2BQMc4/p3xBPOwvcCX/IPm8ugxgTsOrkfBtYw4hIFcEaHflFy5KAoGf6o
FpnkDrmayO97yAwGLY38
=Z5JN
-----END PGP SIGNATURE-----

Modified client/1.0/neutral/pkgr_upload.eagle from [de331db2a1] to [da6cc3acc8].

33
34
35
36
37
38
39



























































































































































































































































































































































40
41
42
43
44
45
46
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
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







  [file tail [info nameofexecutable]]\
  [file tail [info script]] \[apiKey\] \[name\] \[version\] \[language\]\
  \[fileName1\] ... \[fileNameN\]"

    exit 1
  }

  #
  # NOTE: This procedure sets up the default values for all configuration
  #       parameters used by the package uploader client.  The script
  #       argument is the fully qualified path and file name for the script
  #       being evaluated.
  #
  proc setupUploadVars { script } {
    #
    # NOTE: What is the fully qualified path to the directory containing the
    #       checkout for the package client?
    #
    variable checkoutDirectory

    if {![info exists checkoutDirectory]} then {
      set checkoutDirectory [file dirname $script]
    }

    #
    # NOTE: The command to use when attempting to stage package files using
    #       Fossil.
    #
    variable fossilAddCommand; # DEFAULT fossil add {${fileName}}

    if {![info exists fossilAddCommand]} then {
      set fossilAddCommand {fossil add {${fileName}}}
    }

    #
    # NOTE: The command to use when attempting to commit package files using
    #       Fossil.
    #
    variable fossilCommitCommand; # DEFAULT fossil commit ...

    if {![info exists fossilCommitCommand]} then {
      set fossilCommitCommand {fossil commit -m {${comment}}\
          --branch {${branch}} --user anonymous --chdir \
          {${checkoutDirectory}} --no-prompt}
    }

    #
    # NOTE: The regular expression pattern used when attempting to verify
    #       that Fossil committed a set of files.
    #
    variable fossilCommitPattern; # DEFAULT: {^New_Version: ([0-9a-f]{40})$}

    if {![info exists fossilCommitPattern]} then {
      set fossilCommitPattern {^New_Version: ([0-9a-f]{40})$}
    }
  }

  #
  # NOTE: This procedure returns a string value, formatted for use within a
  #       script block being processed by the [string map] command.  The
  #       value argument is the string value to format.  No return value is
  #       reserved to indicate an error.  This procedure may not raise any
  #       script errors.
  #
  proc formatStringMapValue { value } {
    if {[string length $value] == 0} then {
      return \"\"
    }

    set list [list $value]

    if {$value eq $list} then {
      return $value
    } else {
      return $list
    }
  }

  #
  # NOTE: This procedure counts the common path components for two paths.  The
  #       count is returned, zero if there are no common path components.  The
  #       path1 and path2 arguments are the paths to compare.  This procedure
  #       may not raise script errors.
  #
  proc countCommonPathParts { path1 path2 } {
    set parts1 [file split $path1]
    set length1 [llength $parts1]

    set parts2 [file split $path2]
    set length2 [llength $parts2]

    set length [expr {min($length1, $length2)}]

    for {set index 0} {$index < $length} {incr index} {
      set part1 [lindex $parts1 $index]
      set part2 [lindex $parts2 $index]

      if {$part1 ne $part2} then {
        return $index
      }
    }

    return $length
  }

  #
  # NOTE: This procedure processes a list of (fully?) qualified file names and
  #       tries to determine their common containing directory, if any.  The
  #       fileNames argument is the list of (fully?) qualified file names to
  #       process.  This procedure may not raise script errors.  If there is
  #       no common containing directory, an empty string is returned.
  #
  proc getCommonContainingDirectory { fileNames } {
    set length [llength $fileNames]

    if {$length == 0} then {
      return ""
    }

    set oldFileName [lindex $fileNames 0]

    if {$length == 1} then {
      return [file dirname $oldFileName]
    }

    set minimumCount 0

    for {set index 1} {$index < $length} {incr index} {
      set newFileName [lindex $fileNames $index]
      set newCount [countCommonPathParts $oldFileName $newFileName]

      if {$newCount == 0} then {
        return ""
      }

      if {$minimumCount == 0 || $newCount < $minimumCount} then {
        set oldFileName $newFileName
        set minimumCount $newCount
      }
    }

    if {$minimumCount == 0} then {
      return ""
    }

    incr minimumCount -1

    return [eval file join [lrange [file split $oldFileName] 0 $minimumCount]]
  }

  #
  # NOTE: This procedure attempts to process a list of (fully?) qualified file
  #       names and return the corresponding list of relative file names.  The
  #       fileNames argument is the list of (fully?) qualified file names to
  #       process.  The maximumLevels argument is the maximum path depth that
  #       is allowed for all file names.  This procedure may raise script
  #       errors.
  #
  proc getRelativeFileNames { fileNames maximumLevels } {
    set directory [getCommonContainingDirectory $fileNames]
    set directoryParts [file split $directory]
    set fileNameIndex [expr {[llength $directoryParts] - 1}]

    if {$fileNameIndex < 0} then {
      error [appendArgs \
          "invalid containing directory \"" $directory \
          "\": cannot go up one level"]
    }

    set relativeFileNames [list]

    foreach fileName $fileNames {
      set fileNameParts [lrange \
          [file split $fileName] $fileNameIndex end]

      if {$maximumLevels > 0 && \
          [llength $fileNameParts] > $maximumLevels} then {
        error [appendArgs \
            "depth for file name \"" $fileName \
            "\" exceeds maximum (" $maximumLevels )]
      }

      set relativeFileName [eval file join $fileNameParts]

      if {[string length $relativeFileName] == 0 || \
          [file pathtype $relativeFileName] ne "relative"} then {
        error [appendArgs \
            "bad file name \"" $relativeFileName "\", not relative"]
      }

      lappend relativeFileNames $relativeFileName
    }

    return $relativeFileNames
  }

  #
  # NOTE: This procedure attempts to create a script chunk that appends the
  #       specified list of file names to a list variable.  The fileNames
  #       argument is the list of (fully?) qualified file names to append to
  #       the list variable.  The maximumLevels argument is the maximum path
  #       depth that is allowed for all file names.  This procedure may raise
  #       script errors.
  #
  proc getScriptChunkForFileNames { fileNames maximumLevels } {
    set result ""
    set relativeFileNames [getRelativeFileNames $fileNames $maximumLevels]

    foreach relativeFileName $relativeFileNames {
      if {[string length $result] > 0} then {
        append result \n
      }

      append result {  lappend fileNames [file join }
      append result [file split $relativeFileName]
      append result \]
    }

    return $result
  }

  #
  # NOTE: This procedure creates and returns a script block designed for use
  #       with the package repository server in order to download and provide
  #       a package consisting of a set of files.  The language argument must
  #       be the literal string "eagle" or the literal string "tcl".  The
  #       version argument must be one of the literal strings "8.4", "8.5",
  #       or "8.6" when the language is "tcl" -OR- the literal string "1.0"
  #       when the language is "eagle".  The platform argument must be an
  #       empty string -OR- one of the literal strings "neutral", "win32-arm",
  #       "win32-x86", "win64-arm64", "win64-ia64", or "win64-x64".  The
  #       fileNames argument is the list of (fully?) qualified file names to
  #       be downloaded when the associated package is being provided.  The
  #       options argument is reserved for future use, it should be an empty
  #       list.
  #
  # <public>
  proc createRepositoryScript { language version platform fileNames options } {
    ::PackageDownloader::verifyLanguageAndVersion $language $version isClient

    return [string trim [string map [list \r\n \n \
        %language% [formatStringMapValue $language] \
        %version% [formatStringMapValue $version] \
        %platform% [formatStringMapValue $platform] \
        %backslash% \\ %ns% ::PackageDownloader %fileNames% \
        [getScriptChunkForFileNames $fileNames 2]] {
apply [list [list] {
  package require Eagle.Package.Downloader

  %ns%::resetCookieAndLoginSimple

  set fileNames [list]

%fileNames%

  set options [list %backslash%
      -persistent false -usePgp true -useAutoPath true]

  %ns%::downloadFiles %language% %version% %platform% $fileNames $options
  %ns%::logoutAndResetCookie
}]
    }]]
  }

  #
  # NOTE: This procedure attempts to stage the specified package files using
  #       Fossil.  The fileNames argument is a list of (fully?) qualified
  #       local file names to stage.
  #
  # <public>
  proc stagePackageFiles { language version platform fileNames } {
    variable checkoutDirectory
    variable fossilAddCommand

    set relativeFileNames [getRelativeFileNames $fileNames]
    set savedPwd [pwd]; cd $checkoutDirectory

    foreach fileName $fileNames relativeFileName $relativeFileNames {
      file mkdir [file join \
          $language $version $platform [file dirname $relativeFileName]]

      file copy $fileName $relativeFileName
      set fileName $relativeFileName

      if {[isEagle]} then {
        set fileName [::PackageRepository::formatExecArgument $fileName]

        if {[catch {
          eval exec -success Success [subst $fossilAddCommand]
        } error]} then {
          cd $savedPwd

          error [appendArgs \
              "failed to stage file \"" $fileName "\": " $error]
        }
      } else {
        if {[catch {
          eval exec [subst $fossilAddCommand]
        } error]} then {
          cd $savedPwd

          error [appendArgs \
              "failed to stage file \"" $fileName "\": " $error]
        }
      }
    }

    cd $savedPwd
  }

  #
  # NOTE: This procedure attempts to commit the staged package files to the
  #       remote package file repository using Fossil.  The varName argument
  #       is the name of a scalar variable in the context of the immediate
  #       caller that will receive the resulting Fossil check-in identifier.
  #
  # <public>
  proc commitPackageFiles { varName } {
    variable checkoutDirectory
    variable fossilCommitCommand
    variable fossilCommitPattern

    set branch ""; # TODO: Figure out a good branch.
    set comment ""; # TODO: Figure out a good comment.

    if {[isEagle]} then {
      if {[catch {
        eval exec -nocarriagereturns -stdout output -stderr error \
            [subst $fossilCommitCommand]
      } result] == 0} then {
        set result [appendArgs $output $error]
      } else {
        return false
      }
    } else {
      if {[catch {
        eval exec [subst $fossilCommitCommand]
      } result]} then {
        return false
      }
    }

    if {[string length $varName] > 0} then {
      upvar 1 $varName checkin
    }

    if {![info exists result] || \
        ![regexp -line -- $fossilCommitPattern $result dummy checkin]} then {
      return false
    }

    return true
  }

  #
  # NOTE: Figure out the fully qualified path to the current script file.
  #       If necessary, add it to the auto-path for the interpreter.  The
  #       necessary supporting packages (i.e. the Package Repository and
  #       other support packages) that are assumed to exist in the same
  #       directory as the current script file.
  #
63
64
65
66
67
68
69

70

71
72


























73
74
75
76
77
78
79
410
411
412
413
414
415
416
417

418
419

420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452







+
-
+

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







  #       package.
  #
  namespace eval ::PackageRepository {
    variable verboseUriDownload true
  }

  #
  # NOTE: This package requires both the package repository and downloader
  # NOTE: Load the Package Repository Client package now.
  #       client packages.
  #
  package require Eagle.Package.Repository
  package require Eagle.Package.Downloader

  #
  # NOTE: This package requires that support for namespaces, which is an
  #       optional feature of Eagle, must be enabled.
  #
  if {[isEagle] && ![namespace enable]} then {
    error "namespaces must be enabled for this package"
  }

  #
  # NOTE: Attempt to read optional settings file now.  This may override
  #       one or more of the variable setup in the next step.
  #
  ::PackageRepository::maybeReadSettingsFile [info script]

  #
  # NOTE: Setup the variables, within this namespace, used by this script.
  #
  setupUploadVars [info script]

  #
  # NOTE: Provide the package to the interpreter.
  #
  package provide Eagle.Package.Uploader \
    [expr {[isEagle] ? [info engine PatchLevel] : "1.0"}]

  #
  # NOTE: Verify that the number of command line arguments meets the basic
  #       requirements of this tool.
  #
  if {[info exists ::argv] && [llength $::argv] >= 5} then {
    #

Modified client/1.0/neutral/pkgr_upload.eagle.asc from [60f01e4cc7] to [62a30ceb9e].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17













18
1
2
3
4













5
6
7
8
9
10
11
12
13
14
15
16
17
18




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

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository

iQIcBAABCAAGBQJYVM2HAAoJEFAslq9JXcLZqDQP/0EuHa77yyYqMTY5LnOfFZ0t
vDquGO1Qk4vOw3m3lQKejssZqQLS46qe0+xfdDg81/vIU5w81Z1FI8V51m5EgHd4
g9O9GOGgLR/ZRaEkEY12nzvyk4kBYQ6OmQshVVD0cSb+72SNh5Olry8DnoG8bRn0
LGB43ir2+6Mhu02o7WGdI7HlST51/WHMkIkvpbRqxFa8W2E0YahngZJA0icTnpHN
ZY+iosWtPk9gigW0GWAjJLQBbwVYjnfd0hX5W5AcQ6ZU/6m1vBNGJTMk8+cuFnPr
TvzohUMJdO38ITtFr/s/pIq7ELyP25ayTMDdWKARKHKRoLQAXuWvwmXNXrF71VSE
fBPQrY47AGE4PBpG+yVqlv1hqDu+sPhRzNl2XcXTRVOZ1mRhQnfc2ebQkSKETU+O
vzspwLmFrOJ8gsYTidSgw8WCXaywjssISNtSm0AcklwjgOeO2e6Vc1erY1h9HctS
kTB63CuH5V4OuxBUkjFXqmhBuqYUZG+W6Soha99hIw9Jj8j12yfOF97N7ldm7XVO
NoQweZJXYrV4At9ZiXXhMsZ8RgolQtms29kFXeZ879rq4P8QlCmIN+NDJZHbI2k8
TyVayOg1Q8LcLIi51o/kQ7ldzSd/xZf6kJzPZdUDpKqJBZHUH0aF8C1f/VhebacI
c+gJibewxrSrqMjIE6B+
=MPwB
iQIcBAABCAAGBQJYVvfzAAoJEFAslq9JXcLZ3KYP/1ziIWg74l8Xat7PICttqWra
2eFS6x2/fJUK0sqol3pBDxNgn6PfQEFNeJOtP/FlLe7NCG2oOCcIZGuYzGQmZv9u
UAQQiV6J6Tzn4ZQXETVcKFFkIZ8VhemK3BBuw4omSPogHCHTX7LiVAmsYjs6krhM
q5UOuswqOidWBWvbaUrkq3SWrtYPj+M4oiNlpA3AjEcn/UePiag60jQi2ZJF+GaN
cMa5iTHYBWPlnqjlXPOIEOJ4AUHULo9LwJtjkXPIqYNjuVyTJXuO5sRy8yTWIv8C
FScTt6PS/ds5Yj6LMNsRDII9/broj04kb7eZt3LIruIxT+Cni0HXqfwydlHBBgng
FgniTiWR6hM8TSOPH18jxjuZ8Cb3ML6Tb/OUul1QWZOrLz/RYszVRgbaC6Y3Z8Ga
lVYdVXo247UvRwYMkgbSeVKEqhwv/prIh44Ii33cYqMGGRReV7/vAfxB8WXWTQBZ
QQ96Z93LsP3lujXwecQQPfb+uBzcPvlFrwmWHmMjsQ/q09BIPbc+gCV0UmfMcax6
Lb9S/QNFWQ4CbjptpdiD/1JfSAwqLOuThQdCUGaQq+LPs297vMpmt2frL9gC7d3h
/DmEGMMylse2852qFdHYCaWw4Yr8Sgn+lZ9eXuaqY0FCGjRTgTz5CR5f2JylY+mH
Mhm7F3uErgDn97Jp/qht
=QWS0
-----END PGP SIGNATURE-----

Modified client/1.0/neutral/pkgr_upload.eagle.harpy from [1d2925f0b5] to [cec3f80607].

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







-
+


-
+



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


    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>410ca3b4-8e95-44e4-a931-03b0cc7e1281</Id>
  <Id>57abf613-80dc-4e9a-b1bd-c0a6dac4e16f</Id>
  <HashAlgorithm>SHA512</HashAlgorithm>
  <EntityType>Script</EntityType>
  <TimeStamp>2016-12-17T05:30:22.5644531Z</TimeStamp>
  <TimeStamp>2016-12-18T20:55:40.0390625Z</TimeStamp>
  <Duration>-1.00:00:00</Duration>
  <Key>0x9559f6017247e3e2</Key>
  <Signature>
    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
  </Signature>
</Certificate>

Modified client/1.0/neutral/pkgr_upload.eagle.harpy.asc from [f19af08e58] to [1e3502e434].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17













18
1
2
3
4













5
6
7
8
9
10
11
12
13
14
15
16
17
18




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

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository

iQIcBAABCAAGBQJYVM2KAAoJEFAslq9JXcLZiNsQAJqKASG3YGn6w7BJRAonKw0y
jmxVC9wCeFwarD46I0E93XQmNNA6mkonRwT5CvDuUd4G+sH7i5fyM2BIVy0XFO26
OutiouvupFBiQU2ObsZbGYKrsfN/EpA2/axWAldg4WYDH7dC+3pNd95yp61dDfBg
bJ6sidNHnUokLzJQ5PaFSYrgaf9/toEZZfOeCmF+4r0frIf4anERuwA4R+RmeeX4
3ZZbnbb2GwNortF/DEy5DyRO/sz7eyBIBACdp/IacSvHy0UIFD8vIIA71DFrYiMg
pmf0JyFjwXFF98VLwmatpb3OvtuwEoN+0vaCZ/BRAY4FpTykDUuvKGAYn26k0lVU
xaKtt9jDBii1VnO3ZgoBjnAYu4dfd35F+EOi7P5uT6SsPS+GjfbZrQrimyDO++Cd
8rGGw3FEKFVaV40mrT1dlIdpo64fsQmLTwYc+SM/fiQbtbKZb9y+Rqo0UO9cuWCP
l+dZyw8vRRelRxpsZNYuImLk27HRrBr38JelANfFuO7Lm4WiC6DdzEiL3Sf9BtEN
xkapDjBz7VhUJ97m0KoC+ODemckv3tlZD+9deowRdYmdjGKtn8GqbNhNfoF0vUGN
g4zj+UvQ1NblfPLVBEF4WcZFiHqAuRTw/WDBraZXhwbMi51JjVWfOo2WK13tODl8
KGic5Aea3InSHNGZU4rj
=MPMG
iQIcBAABCAAGBQJYVvf0AAoJEFAslq9JXcLZ2B4QAIOriM66ke/AwFa96RpEYs8g
YdiGg1k5ZpCRc8uVtPYcJnjtc1g325tf73jw7s5I/SThsmBSEFmIWKJwh0HVR6b2
m2xL0hS+D1ba5+sa6aBUrmn7jbw4i1z9+Rb4hqXacBhIyMaT5qRSN9WQl+mblBML
cVU9NKYc8ifAmayqiOOvV3vcf3n2V+jiyjEyCw8NVT441JuPIm9jPkTP0oDdy/y6
l5a2TEvAIq1o9ovEXBkc5NJP8hC+haKdSAZId6q01/aY3L3ObRYCrHs/2iTygWM0
QmtvP9VPdjfQ6A7u4b1P5EBzQfFvvkOnbi9R2gb/xA06ZqC/heDtxCfl9xL1T8GH
4vl0+cENxY61G9avc5v0AoEQY+XFvhJpU5vL2PSpw0ZMFmQE4G50SuooD/pA+t8X
ak+YFoLw2tVnGyDgO+CilF6cP/h1mY+dWvw6hx8aLQeDlNAWRHNco0wzaxDRhJJn
KNvtwQqO2xGEnDbHkkA3ka0nyUYfyOnJnD+LGQKgKqUm+yMywChlK9NOtbdNrLce
i8evvNEudOrQY1TLHNkGpJ4fP6LRQSU33MplPMYnYTyeqiJFpNsHjWWhk4cWxDcx
oprP4sumZuZEHGXLXKXP2/V8/XDPQPuYCDARbkvO2YS84ZG1FadkZ6MkyDiIunSn
+hD0AK7acs6BQTWdNQFf
=Q5nF
-----END PGP SIGNATURE-----