Index: client/1.0/neutral/pkgd.eagle
==================================================================
--- client/1.0/neutral/pkgd.eagle
+++ client/1.0/neutral/pkgd.eagle
@@ -1263,13 +1263,14 @@
# NOTE: This procedure issues a request to an HTTP(S) server. It returns
# the raw response data verbatim. It may raise a script error. It
# will always use the currently configured HTTP(S) login cookie, if
# any; therefore, it should really only be used for requests to the
# package file server. The uri argument is the fully qualified URI
- # to request.
+ # to request. The allowHtml argument should be non-zero if raw HTML
+ # should be allowed in the response data.
#
- proc getPackageFile { uri } {
+ proc getPackageFile { uri {allowHtml false} } {
variable loginCookie
variable quiet
if {[isEagle]} then {
if {![info exists ::eagle_platform(compileOptions)]} then {
@@ -1303,24 +1304,35 @@
if {[methodName ToString] eq "GetWebRequest"} then {
webRequest Headers.Add Cookie [join $loginCookie =]
}
}]
- return [uri download -inline -webclientdata $script -- $uri]
+ set data [uri download -inline -webclientdata $script -- $uri]
} else {
- return [uri download -inline -- $uri]
+ set data [uri download -inline -- $uri]
}
} else {
set options [list -binary true]
if {[info exists loginCookie] && [llength $loginCookie] == 2} then {
lappend options -headers [list Cookie [join $loginCookie =]]
}
- return [eval ::PackageRepository::getFileViaHttp \
+ set data [eval ::PackageRepository::getFileViaHttp \
[list $uri] [list 20] [list stdout] [list $quiet] $options]
}
+
+ #
+ # HACK: Check for the typical Fossil error response(s), which is an
+ # HTML page that may contain something like "Artifact 'X' does
+ # not exist in this repository").
+ #
+ if {!$allowHtml && [string range $data 0 14] eq ""} then {
+ error "bad package file response data, appears to be HTML page"
+ }
+
+ return $data
}
#
# NOTE: This procedure returns the prefix for fully qualified variable
# names that MAY be present in the global namespace. There are
@@ -1517,10 +1529,149 @@
}
return $result
}
+ #
+ # NOTE: This procedure creates a new interpreter, which may be "safe", and
+ # places a reference to it in a variable in the context of the caller
+ # identified by the varName argument. The created interpreter has a
+ # fully functioning [package] command ensemble; all other commands do
+ # nothing and return nothing. This procedure may raise script errors.
+ #
+ proc createInterp { varName } {
+ #
+ # NOTE: Prepare to provide the caller with the newly created interpreter
+ # reference.
+ #
+ upvar 1 $varName interp
+
+ #
+ # NOTE: Create a "safe" interpreter and set the global "dir" variable to
+ # a single period. Generally, this is the only variable used by a
+ # package index file. It should be noted that since [set] will be
+ # a NOP, attempts to use other variables in the specified package
+ # index file (e.g. ones [set] within it) will fail.
+ #
+ set interp [interp create -safe]
+ interp eval $interp [list set dir .]
+
+ #
+ # NOTE: First, obtain the list of child namespaces to delete, if any, and
+ # then delete them all. This should leave the global namespace and
+ # its commands / variables untouched.
+ #
+ set namespaces [interp eval $interp [list namespace children ::]]
+
+ foreach namespace $namespaces {
+ catch {
+ interp eval $interp [list namespace delete $namespace]
+ }
+ }
+
+ #
+ # NOTE: Next, obtain the list of global commands and delete all of them
+ # except the [proc] and [package] commands. The [proc] command is
+ # handled specially (last) and the [package] command is retained.
+ #
+ set commands [interp eval $interp [list info commands]]
+
+ foreach command $commands {
+ if {$command ne "proc" && $command ne "package"} then {
+ interp eval $interp [list proc $command args ""]; # NOP
+ }
+ }
+
+ if {![isEagle]} then {
+ #
+ # HACK: The "safe" interpreters in native Tcl do not contain
+ # the [file] command at all, not even for [file join]
+ # and [file split], which may be used in package index
+ # files; therefore, add it as a NOP command.
+ #
+ interp eval $interp [list proc file args ""]; # NOP
+ }
+
+ #
+ # NOTE: Next, disable the [proc] command. This must be done last
+ # because it is used to disable (i.e. via NOP) all the other
+ # global commands.
+ #
+ interp eval $interp [list proc proc args ""]; # NOP
+
+ #
+ # NOTE: Finally, return nothing as the created interpreter reference
+ # is placed directly into the variable specified by the caller.
+ #
+ return ""
+ }
+
+ #
+ # NOTE: This procedure evaluates a script file and attempts to determine the
+ # list of new [package ifneeded] scripts added by it. When successful
+ # it returns a list-of-lists. Each element of the outer list contains
+ # a package name and the list of its versions in descending order; in
+ # the event of failure, empty lists may be returned for the outer list
+ # or for a list of versions. The interp argument is the interp to use
+ # when evaluating the file specified by the fileName argument. This
+ # procedure may raise script errors.
+ #
+ proc getIfNeededVersions { interp fileName } {
+ set result [list]
+
+ set oldPackageNames [interp eval $interp [list package names]]
+ interp invokehidden $interp source $fileName; # [package ifneeded], etc.
+ set newPackageNames [interp eval $interp [list package names]]
+
+ foreach packageName $newPackageNames {
+ if {[lsearch -exact $oldPackageNames $packageName] == -1} then {
+ lappend result [list $packageName [lsort -decreasing \
+ -command [list package vcompare] [interp eval \
+ $interp [list package versions $packageName]]]]
+ }
+ }
+
+ return $result
+ }
+
+ #
+ # NOTE: This procedure attempts to extract a package version information
+ # from the specified file. The fileName argument is the local file
+ # name to read. This procedure may raise script errors.
+ #
+ proc extractVersionsFromFile { fileName } {
+ switch -exact -- [file tail $fileName] {
+ VERSION {
+ return [list [string trim [readFile $fileName]]]
+ }
+ pkgIndex.eagle -
+ pkgIndex.tcl {
+ #
+ # TODO: Evaluate the package index file in a new "safe"
+ # interpreter and obtain the newly added [package
+ # ifneeded] version(s)?
+ #
+ if {[catch {createInterp interp} error] == 0} then {
+ set result [getIfNeededVersions $interp $fileName]
+ } else {
+ pkgLog [appendArgs \
+ "could not create interp to extract versions: " \
+ $error]
+
+ set result [list]
+ }
+
+ if {[info exists interp]} then {
+ catch {interp delete $interp}
+ unset interp; # REDUNDANT
+ }
+
+ return $result
+ }
+ }
+ }
+
#
# NOTE: This procedure checks if there is a higher version available of the
# specified package on the package file server. The language argument
# must be one of the literal strings "eagle", "tcl", or "client". The
# version argument must be one of the literal strings "8.4", "8.5", or
@@ -1551,37 +1702,45 @@
} else {
verifyPersistentRootDirectory
set persistentDirectory $persistentRootDirectory
}
- set fileName [file join $packageName VERSION]
- set downloadFileName [file join $temporaryDirectory $fileName]
-
- file mkdir [file dirname $downloadFileName]
-
- downloadOneFile $language $version $platform \
- $fileName $downloadFileName $usePgp
-
- if {$usePgp} then {
- downloadOneFile $language $version $platform \
- [appendArgs $fileName .asc] \
- [appendArgs $downloadFileName .asc] $usePgp
- }
-
- set localFileName [file join $persistentDirectory $fileName]
-
- set compare [package vcompare \
- [string trim [readFile $downloadFileName]] \
- [string trim [readFile $localFileName]]]
-
- if {[isEagle]} then {
- file delete -recursive -- $temporaryDirectory
- } else {
- file delete -force -- $temporaryDirectory
- }
-
- return [expr {$compare > 0}]
+ set fileNamesOnly [list VERSION pkgIndex.eagle pkgIndex.tcl]
+
+ foreach fileNameOnly $fileNamesOnly {
+ set fileName [file join $packageName $fileNameOnly]
+ set downloadFileName [file join $temporaryDirectory $fileName]
+
+ file mkdir [file dirname $downloadFileName]
+
+ if {[catch {
+ downloadOneFile $language $version $platform \
+ $fileName $downloadFileName $usePgp
+ }] == 0} then {
+ if {$usePgp} then {
+ downloadOneFile $language $version $platform \
+ [appendArgs $fileName .asc] \
+ [appendArgs $downloadFileName .asc] $usePgp
+ }
+
+ set localFileName [file join $persistentDirectory $fileName]
+
+ set compare [package vcompare \
+ [lindex [extractVersionsFromFile $downloadFileName] 0] \
+ [lindex [extractVersionsFromFile $localFileName] 0]]
+
+ if {[isEagle]} then {
+ file delete -recursive -- $temporaryDirectory
+ } else {
+ file delete -force -- $temporaryDirectory
+ }
+
+ return [expr {$compare > 0}]
+ }
+ }
+
+ error "could not check higher version: no supported file names"
}
#
# NOTE: This procedure attempts to guess a package name based on a list of
# its files. It relies upon the fact that all packages must include
Index: client/1.0/neutral/pkgd.eagle.asc
==================================================================
--- client/1.0/neutral/pkgd.eagle.asc
+++ client/1.0/neutral/pkgd.eagle.asc
@@ -1,18 +1,18 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository
-iQIcBAABCAAGBQJdwuz3AAoJEFAslq9JXcLZHRAQAJq45rRYk9r9CjPmahPUfOeF
-baZC3iDFz8VWDuv4hcU6W2q+RgwqWnsS06wUoVXYnrk2bCY8MH/0XDvkQwtGxIEc
-k2p63L9zxw/ri5FxvNYuGIvDl+lhrqKleMHZODCKibQwM51to2CPXx1bMgbKsvDO
-sXW2Mz4gcV8GwItdY/sZjEwq8qU/wfXjW4ZWcwaBp3smadUZBv7r94i4nFRdT+yD
-5YwxT7Qy0J6qyVxseH4GI1onA/ds1p/to2Wmy4fELUesAuOwwsGNcDTUZl+zDUEy
-Fxj16CHWu62lv+YSBDmFFd1xrUBNKvVZ3ckATRXVznbmQYYEwRgv9Dg8GeDg7qtv
-zRnUYj5BCCVG8aBYJccCXC2h+cby8otoUF/bCPr9BJwWw/KqzZFeLGLSf5/5rIUB
-XK7sOe/2GNkw4nu7NxbgCyHUpZfbr/5eafmhOK2AAwR518NbqDhjhTzJGOUCkkbd
-G9qZpkcDQZULVYu20fRYqUW341k5frZ03dcqKVx0ZWg9EQhspbNkV07MQnH3lTG2
-A4AkgUQladsqfgR6wnskF0tlcTozy50Jj2wUNZU8N0ciQEUS/2vZDO0hwRrSuJdj
-dq6L8+4/EBrEGO3bbwcipi0CACMTYviI5gSECc6wBaqSwllilXVrPLmm/GLgb2yU
-xp1P34dex7A0cxbnlncp
-=8/XM
+iQIcBAABCAAGBQJefmh2AAoJEFAslq9JXcLZU+UP/2og4/PHeqflZF+G46gSq7mc
+Fl+jpy8Dm/H22L2hA+j8h3BlTd8a+KZt5puYtcZjtNbTny0FBwJlLLwDsrtUKzO8
+proJZlROO4uXkpQz9HDO8P8nAqb+V3xmfn948kolByR3FGr7kjoH6F6YHmiegmo5
+8jBsGKVKpyRTp2inxAnhH0iYDzlLt3mNBqPLjL9oDMPbRuEvf7c1r2nahv0ZetbI
+r506ozMxd/h17NYtrVajT6MvvMDtymqWvpRWkpqhH/XUksmNNuWr594B3c9uLr0f
+ubZYd0oo0thqdNtxxFLw1xZy15t4lwt8RQ4jVPR3B5Yc2ENSmRVJq7InjL8rTy9O
+X9c/dOwtlT3vISXmi9R8S+64876M6DVRG79NNfV6sMbyhestUNxgr3KmbkliHzu1
+2obGwnWGtncrS/JWnsu+5P2qIWcXTGOka0RZchGMu3hk/6EqYuTHGr7OVUhhvJzy
+qOXpiY+kOu4IMA5tpa9bahExE3dyWMAA1z5vx9Hu1TEHCfzICE+iWQ+rskN6orwr
+N4aiJchl2xLZDOZp9LXJRsBEvzCApwYx1xSfpu9IFqrClSrQ+vZLvttkppv967ZZ
+BxHe/1/gROYxECELBtydWM/w5kLuJHRY0Q1sV8E7rcNa28uDHpFbwhm9ZkbADDrr
+yLCorIpOhiR+CTM/QQGI
+=0ByE
-----END PGP SIGNATURE-----
Index: client/1.0/neutral/pkgd.eagle.harpy
==================================================================
--- client/1.0/neutral/pkgd.eagle.harpy
+++ client/1.0/neutral/pkgd.eagle.harpy
@@ -19,50 +19,50 @@
None
Mistachkin Systems
- 99b4ca9b-d98b-4ff8-9f54-4ceda46b22e5
+ ed107b00-7d62-4824-b6b9-f094571af22f
SHA512
Script
- 2019-11-06T15:53:46.6032795Z
+ 2020-03-27T20:56:02.6471192Z
-1.00:00:00
0x9559f6017247e3e2
- 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
+ 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
Index: client/1.0/neutral/pkgd.eagle.harpy.asc
==================================================================
--- client/1.0/neutral/pkgd.eagle.harpy.asc
+++ client/1.0/neutral/pkgd.eagle.harpy.asc
@@ -1,18 +1,18 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository
-iQIcBAABCAAGBQJdwuz5AAoJEFAslq9JXcLZUDUQAIlvZ+UZowmVWidxVUfoblPo
-oLRZfqAHGoMqZfywKPuwrUY7CTJooQcn94bQ7Hu818AwRD+H3QWEqL98XaXADnEe
-b0Xk0zD2Carq2XIAKrWwFPQE/sJFdXfFPAWh3NMfzxjd2qgDDZCdV22pr8fiQ4So
-EnsVQqPeYJqUExU3Ye7WvamuDwcWJ9uiiXb+imTWzpl/1it879Kk2zwgYW/a1NuA
-nSUoyL9uoNtCFjbrvgpoVmIrgJ1EINEarOCkLhg/sBcna4Ub/hk2ACdx+Nqh/nBg
-pLov823BCyf3kluI0fOaw6xJ9XfOijebz2iV8SN8ey6TEDNM8n9WKxLn7i4vxkBx
-9tcMWP1qQ6IGHAOjABdYUFVn/YrvJhbYYJXBDTAMNduBAHezzJYYRN+DL2UfpE1I
-gffU15sSORtbApU9gmWjIhGg4kxfqiVr1R5dwHgoTOdZZ6K2/GRAr033x9qyshdz
-7m+MD4sYCog+OqhimgX3QQaNvNZEFjQe9sdkzia13pkQ4JECj6qOPuLhiof8zCU2
-NOfMFJDIz1TYbAG29BxjyLqMbt9wj2YZA4y1pdLPH9LdrDBowyGee5t519c8wM6f
-6dJRAVoMKYc5OPbe9RJ11C0cPB9dIenGrTuHuj5xKctAvRmhR9fJa8/tJ7bRcH5I
-r/mx5wYNZ4oPTbhzJT38
-=N7fZ
+iQIcBAABCAAGBQJefmh3AAoJEFAslq9JXcLZQvEP/2DmyHIFHTJQ24GRXISNApvc
+SwE5Ph/E9rHXsn8FcUZ9nlUt/FBcKDNePCY6g4p1R278sSUEzHv7vG14SfjeGnHr
+CDUJN/ALCcappRyvoT39bb2pJ1PwPF3iCebnGNk98wU1vneVSwMAqS5RMCrYgm1u
+qOc/s5auwrSJPmKGzd3+pSeVLaoollhIsEfh+JbEmGZX0/p/0IeC/PY3EdU2W7Vd
+HE3Tk2t+tS7GiQbkAMF0V3xyc2/11nFiNYz8L20ioEKmYaFO/ScfJZP6ZV2uhwjR
+s+lkmWQjO3izSr7bfM8Ffg/UutCgspnyc7DGVAQApZ9AV03m1NR6vYE4/4zdhOVm
+2IhKJ/yAJYmiuE7vaA1EM2m1eWccQCY2bMTTE7OdYgPRbT8AWIjS3pWCM0BUIYAv
+TAACji5249/Dz8BNT75Y7G6P7CN7H0l2lDUAQKd9YngEZJX21zfAKIxEhmuHcrCG
+sVhpfLfGlfXfsaPGBgtPkKsXPdHPLVUGbdEcB/MFsmE5yLzIaaJyhOx4SOQAn91n
+BApw6NKPsQDi8CeUeL/ydqG6sJP2gO1WtpQot4sB5BCuz43BFGLIxtWATpl7QRsv
+tc+YPeJLx9Ksb66pjoR1yJ/INodUCK8TEXf3x+KORg01r9Z1foLd6fwc01Jsr/tE
+70r34qCHAuJjL7WaRrOy
+=l79d
-----END PGP SIGNATURE-----
Index: client/1.0/neutral/pkgr.eagle
==================================================================
--- client/1.0/neutral/pkgr.eagle
+++ client/1.0/neutral/pkgr.eagle
@@ -417,22 +417,22 @@
# it already appeared to be available for use.
#
#
proc probeForOpenPgpInstallation {} {
global env
- variable openPgpFileNameOnly
- variable openPgpInstalledDirectory
+ variable openPgpFileNamesOnly
+ variable openPgpInstalledDirectories
if {[catch {openPgpMustBeInstalled}] == 0} then {
return true
}
- if {![info exists openPgpFileNameOnly]} then {
+ if {![info exists openPgpFileNamesOnly]} then {
return false
}
- if {![info exists openPgpInstalledDirectory]} then {
+ if {![info exists openPgpInstalledDirectories]} then {
return false
}
if {[isWindows]} then {
if {[info exists env(ProgramFiles(x86))]} then {
@@ -440,24 +440,33 @@
} elseif {[info exists env(ProgramFiles)]} then {
set programFiles $env(ProgramFiles)
} else {
return false
}
-
- set directory [file join $programFiles $openPgpInstalledDirectory]
- } else {
- set directory $openPgpInstalledDirectory
}
- if {![file isdirectory $directory]} then {
- return false
- }
-
- set fileName [file join $directory $openPgpFileNameOnly]
-
- if {[file exists $fileName] && [file isfile $fileName]} then {
- return [addToPath $directory]
+ foreach directory $openPgpInstalledDirectories {
+ if {[isWindows]} then {
+ set subDirectory [file join $programFiles $directory]
+ } else {
+ set subDirectory $directory
+ }
+
+ if {[file isdirectory $subDirectory]} then {
+ foreach fileNameOnly $openPgpFileNamesOnly {
+ set fileName [file join $subDirectory $fileNameOnly]
+
+ if {[file exists $fileName] && [file isfile $fileName]} then {
+ pkgLog [appendArgs \
+ "the OpenPGP directory is being initialized to \"" \
+ $subDirectory "\" based on OpenPGP file name \"" \
+ $fileNameOnly \"]
+
+ return [addToPath $subDirectory]
+ }
+ }
+ }
}
return false
}
@@ -485,11 +494,11 @@
the package management subsystem included with your operating system.
}
set found false
- foreach fileName $openPgpFileNamesOnly {
+ foreach fileNameOnly $openPgpFileNamesOnly {
if {[isEagle]} then {
if {[catch {
eval exec -success Success [subst $openPgpInstalledCommand]
} result] == 0} then {
set found true; break
@@ -511,23 +520,27 @@
if {[info exists openPgpFileNameOnly]} then {
#
# NOTE: If the OpenPGP file name that we found before (?) does not
# match what we already have, issue a log message.
#
- if {$fileName ne $openPgpFileNameOnly} then {
+ if {$fileNameOnly ne $openPgpFileNameOnly} then {
pkgLog [appendArgs \
"the OpenPGP file name is being changed from \"" \
- $openPgpFileNameOnly "\" to \"" $fileName \"]
+ $openPgpFileNameOnly "\" to \"" $fileNameOnly \"]
- set openPgpFileNameOnly $fileName
+ set openPgpFileNameOnly $fileNameOnly
}
} else {
#
# NOTE: Configure the OpenPGP file name to the one that was just
# found.
#
- set openPgpFileNameOnly $fileName
+ pkgLog [appendArgs \
+ "the OpenPGP file name is being initialized to \"" \
+ $fileNameOnly \"]
+
+ set openPgpFileNameOnly $fileNameOnly
}
} else {
#
# NOTE: If no viable OpenPGP file name was found, raise the error
# message.
@@ -2298,17 +2311,19 @@
#
# NOTE: This is the name of the sub-directory containing the OpenPGP
# implementation. It is platform-specific. On Windows, this
# sub-directory is relative to the "Program Files" directory.
#
- variable openPgpInstalledDirectory; # DEFAULT: [file join GNU GnuPG]
+ variable openPgpInstalledDirectories; # DEFAULT: [list ...]
- if {![info exists openPgpInstalledDirectory]} then {
+ if {$force || ![info exists openPgpInstalledDirectories]} then {
if {[isWindows]} then {
- set openPgpInstalledDirectory [file join GNU GnuPG]
+ set openPgpInstalledDirectories [list \
+ [file join gnupg bin] [file join GNU GnuPG]]
} else {
- set openPgpInstalledDirectory [file join / usr bin]
+ set openPgpInstalledDirectories [list \
+ [file join / usr bin]]
}
}
#
# NOTE: These are the candidate names of the executable file used to
@@ -2315,11 +2330,11 @@
# invoke the OpenPGP implementation, possibly without a file
# extension.
#
variable openPgpFileNamesOnly; # DEFAULT: [list gpg2 gpg]
- if {![info exists openPgpFileNamesOnly]} then {
+ if {$force || ![info exists openPgpFileNamesOnly]} then {
if {[isWindows]} then {
set openPgpFileNamesOnly [list gpg2.exe gpg.exe]
} else {
set openPgpFileNamesOnly [list gpg2 gpg]
}
@@ -2336,11 +2351,11 @@
# file. This must be configured according to the implementation
# of OpenPGP in use.
#
variable openPgpImportCommand; # DEFAULT: gpg2 --import
- if {![info exists openPgpImportCommand]} then {
+ if {$force || ![info exists openPgpImportCommand]} then {
set openPgpImportCommand \
{{${openPgpFileNameOnly}} --import {${fileName}}}
}
#
@@ -2348,11 +2363,11 @@
# that OpenPGP successfully imported one or more keys. This must
# be configured according to the implementation of OpenPGP in use.
#
variable openPgpImportPattern; # DEFAULT: ^gpg: Total number processed...
- if {![info exists openPgpImportPattern]} then {
+ if {$force || ![info exists openPgpImportPattern]} then {
set openPgpImportPattern {^gpg: Total number processed: [1-9]\d*$}
}
#
# NOTE: The command to use when attempting to verify that OpenPGP is
@@ -2359,22 +2374,22 @@
# installed locally. This must be configured according to the
# implementation of OpenPGP in use.
#
variable openPgpInstalledCommand; # DEFAULT: gpg2 --version --homedir {}
- if {![info exists openPgpInstalledCommand]} then {
- set openPgpInstalledCommand {{${fileName}} --version --homedir {}}
+ if {$force || ![info exists openPgpInstalledCommand]} then {
+ set openPgpInstalledCommand {{${fileNameOnly}} --version --homedir {}}
}
#
# NOTE: The regular expression pattern used when attempting to verify
# that OpenPGP is installed locally. This must be configured
# according to the implementation of OpenPGP in use.
#
variable openPgpInstalledPattern; # DEFAULT: ^gpg \(GnuPG\) 2\.[0123]\.
- if {![info exists openPgpInstalledPattern]} then {
+ if {$force || ![info exists openPgpInstalledPattern]} then {
set openPgpInstalledPattern {^gpg \(GnuPG\) 2\.[0123]\.}
}
#
# NOTE: The command to use when verifying OpenPGP signatures for the
@@ -2381,11 +2396,11 @@
# downloaded package scripts. This must be configured according
# to the implementation of OpenPGP in use.
#
variable openPgpVerifyCommand; # DEFAULT: gpg2 --verify {${fileName}}
- if {![info exists openPgpVerifyCommand]} then {
+ if {$force || ![info exists openPgpVerifyCommand]} then {
set openPgpVerifyCommand \
{{${openPgpFileNameOnly}} --verify {${fileName}}}
}
#
@@ -2393,11 +2408,11 @@
# downloaded package scripts. This must be configured according
# to the implementation of OpenPGP in use.
#
variable openPgpSignCommand; # DEFAULT: gpg2 --detach-sign ...
- if {![info exists openPgpSignCommand]} then {
+ if {$force || ![info exists openPgpSignCommand]} then {
set openPgpSignCommand ""
append openPgpSignCommand \
{{${openPgpFileNameOnly}} --detach-sign --armor}
Index: client/1.0/neutral/pkgr.eagle.asc
==================================================================
--- client/1.0/neutral/pkgr.eagle.asc
+++ client/1.0/neutral/pkgr.eagle.asc
@@ -1,18 +1,18 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository
-iQIcBAABCAAGBQJdwuz8AAoJEFAslq9JXcLZcVkP/jS4+eAdHt6D+Tmv5elrElPX
-GiNMqBGiehn5l8uWB5SnjeU/zvvJqW2MybhKvCTwIjEXYu7mv2vFPZBRXADUpvtF
-tOfzeIP8K8crlJwz8c/O1NQCvzfA3U2sEa03y7ULu8vZSpXgrtijBMDfu8ABrFlc
-StVvLyQhQ0KJtsn5IR9LKLvWb8Izk3/+YTQp+i5jWv3LU40FbBJZinc4K3W6h/Cj
-Zg3QFGxRyO2tGw3j2JO6NPtQN6OIIvNLc2nmkEjUnlHROLwxsChMapQmGxVmA1CI
-QWtKjsaLbIZXKPGTeryQ7i50icW5AV1uGox/yDp/RFt8a9Sc5Spjr9qoRn5T4wVT
-AEYFSIyIi/sy8uZTr6BqeR03QXZ78kfTTLHmOzkjKUiqHwMseEBX1k6jjZUMlymR
-Kkofb/uNhW8v0sSezqFQ92bI9XgslTQF/fqyH2yv9ZCaoiyjBoFMzAGGv6y3XzMi
-+4i0/drM3BmoF39F2vAiFyObT3cCqGDt0/MgO8y44HHAIROxMO0N1A/xgxtpTWl9
-IG/CXTFmLLdUgnDPYya55m9ri0bz7GstcInWdMN7+X0whucYQqcbGIqA/w4CWr6T
-87hxtlDGcw1wWxizBa5yDzwaRS6jjGhMw79Sp1QGnF9Hb7lRoZsZxXghDKmMU6cN
-Cm9qH9IrK/n3JoDP681A
-=FxL1
+iQIcBAABCAAGBQJefmhwAAoJEFAslq9JXcLZnzkQAMSqU2nlTobNSziYN+EnEazL
+X7cGWSqXgLNqAaWr5RNTRcY+22mu+mr50B2JpJBfuGPxSvSp4eq4GUdQgOLO5fhW
+Tw3pnhS0Y9/wjFkn0IFmA5QI1FpLsgZjzDiQNHB+BZZ4ybFFTq94gw5tN6ZS9utn
+0Wt7aT1KiHM7bMMymIkeGGmU4VOLtlyCUs/GUHo+iwMdPZPA6DMHV8vXdQNIPr2D
+nzUIGsMpQs2k7wIHzCI3iJvVJQA5VyfnFpztzhsR3MxiJxeYjhMdHL1wvfZ2NpOy
+csSw3Mb9pRj/otuIJa6bNookHhruVSXr/XUfTVN4wdUup5FVjA5kRzL/yfx99WjQ
+baUNyYLjGHPZLXtXsPBrjPF5JI/ipVv4UYAqTL/sjLRxLG+JNRFWg9qDusJB+Trm
+9BtMHzhkvJBuPMUsPXvPMuqbVGYJN6os5BRU+ltX0vLUxslf1EI/pAe7F8rFIiir
+2oFRbzzq+ypd4PwrpGmF3LhAa2RNz/VnR1j4ip90nYSpFFcl6JjnxubB56moPxPs
+q907ex0+xBLpULC/vZ6TPH6O1gVJ4dTLFH9tJpqH5qyWbbIeCyfN5Ynhq69Y+qdB
+636kXlUOEgg4I3ZkfDubpKf/DZ8yYMUgyaluRIOiGkkIQ2VuRLKd4zelLtKxT3Mv
+KazKvCNfOcxc/9YtD2Z2
+=FjC5
-----END PGP SIGNATURE-----
Index: client/1.0/neutral/pkgr.eagle.harpy
==================================================================
--- client/1.0/neutral/pkgr.eagle.harpy
+++ client/1.0/neutral/pkgr.eagle.harpy
@@ -19,50 +19,50 @@
None
Mistachkin Systems
- 36f37a40-de70-4264-8fdb-512973db856d
+ 9bfbeedf-0f5e-44b8-b371-7c5b484e7747
SHA512
Script
- 2019-11-06T15:54:28.2976643Z
+ 2020-03-27T20:55:40.9358622Z
-1.00:00:00
0x9559f6017247e3e2
- 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
+ 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
Index: client/1.0/neutral/pkgr.eagle.harpy.asc
==================================================================
--- client/1.0/neutral/pkgr.eagle.harpy.asc
+++ client/1.0/neutral/pkgr.eagle.harpy.asc
@@ -1,18 +1,18 @@
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
Comment: Eagle Package Repository
-iQIcBAABCAAGBQJdwuz9AAoJEFAslq9JXcLZLrQP/1quy2q2tao4bGkR29oDg56P
-VBc68F7VCt3slnRpkjseLeOBoK2JNGxTZp2dkgODHxkeseLypCfkS2xiiwZS0c6Q
-zInz66QCLgnKT370Vst+Qa1yeJKYLfOUsT1D4zT7mvMJ0Fnm/SxmZplIBrjBY+XX
-IjdAtgWaXgDke14ugi+K+2itB4I/SnJigrO0QVRDzIOZfWoZl48PBjxfiPeO7pPE
-BZno5e+vGcM0BEsJlX3vlQcv4W47XABUC05Tz6X4Md2Xhnnb64SSSG1XpLklCuEb
-X9g0GkKIB/6aXh5Uct0Jg09N8wpR1UjZkWI+t7ZFXOowucbBsFgaHJfTch0ojON/
-6JpdWl2sXoZKsdKxa3fHvAzhobhwGUkjEhi5Kxc1T2484deKYV+SPQ9HU+Vdmih5
-4D7bamBwy3rCru3sU69nKHFRxrqa38Hl4IgODA7SnqGgpM9J78cZfqlm3DDN2WXl
-EDeKyGye30gciJA+iUHcOu2a1soxcwYcyvVsQ+tEEOfd5Nk2vwlsdcHZKrp3FvPE
-xNB8zpNHoFjbkeRTxp8zZHrB7DS+WxODhIPAOQxZ78DuCEhvNSKhqPEVoSt/l7Hr
-2o0QUjOniI2XHEhCbpbkj/x3ogmZ5rNcWn9y8kYtqGrXn2PgjxPz1Erof01N5fFK
-TCMiWvCssnb7qhdhxty9
-=8T2C
+iQIcBAABCAAGBQJefmhyAAoJEFAslq9JXcLZveUP/Rlt1T0DafCi0c1cBSaRSg+a
+aOB61P5V7ZJieuL7RE1utJUE13IRR3vCfmfjVJjD1WETRmPafBCU/XD/eIvI/Tqv
+KleBiCMIFrA5g21TxF1YxrFmcS3BKixzduSCyJWZI0dtG5QmMN0PcWzNMtu9nnFd
+TpNazqt6UcIiw4vIq8gx0NXo0c/2bPZa9Hxs3LDJO/lgHJEOHvaJY7JfE0vhFcfT
+6UlqJ0p1QfdSda95cc55Takg0dAQaAKNtWvXXIInMMf/O/miexh4uS1KNGx+f61U
+ApF6fCQfn0gHTfGHv7zrccvwy8WCinHuwqj6IIms0vXk13SXBc4ZcKUVGNDLWxhZ
+qz9rAnTqtZujphUO0z0oDleRj8k+IbJXj4fCdmkDNEaGVSyZu7nps8p9SWtwrFs9
+d50THrSeAk5nM+VWaw4fsZ7q8kbFb3r0ANx9SfnGmFmhZMZWUdln+BFn5y8CrzEg
+AJm4ShGtznj2ntJLHkBaesDswsTmDASb9QrkDIlZKm9pnjFleTMXW/TcQHnLBlYH
+o+aO+XRBAGqSDaAoTrSsXKlm4XW04IMPLgJOaHO+EbhTBRbb2Rh/AEmd4oZb21WL
+Ag+qqcFwbNmSfUooO6mtZUxX2BRKEg6BSWpB/nT35yG8c/KwrURW8KHBqLUTpNUK
++ZzhBCUKDu05xmE1heJU
+=VxHM
-----END PGP SIGNATURE-----