Index: client/1.0/neutral/pkgr.eagle
==================================================================
--- client/1.0/neutral/pkgr.eagle
+++ client/1.0/neutral/pkgr.eagle
@@ -352,11 +352,11 @@
} 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"
}
}
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
-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-----
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
- b26eb0c0-d25c-485f-9228-064fdd1f781a
+ 0dc9006c-d011-45fe-a801-6b1fb194725f
SHA512
Script
- 2016-12-17T05:04:57.1298828Z
+ 2016-12-18T03:08:09.6591796Z
-1.00:00:00
0x9559f6017247e3e2
- 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
+ QMoy86nYqhRcGPASq327kHwGgOlgNIgSgaGQcqXegVwS+EiMkF2tQT9Iyk3T9qAfvyTC/FaE0ltv
+ JIqn6BL+MBpRFgMSwTioiCKrAtO/fxLFm+n1B/MKdtA0mDJzQouLGopGpcIPdpPjqy7coxELuoV5
+ nWgu0vXytBNfo22I/ivhHq0uVBMI8vgZE6ZpQkjTnhbq9JtAR/rYs2NHTfUAVHeBJVQ2NRYV8o1/
+ oeAWMvwj71ZFcLjQjPHVvrUaN/q10PMlzmVRiJTqdoksRjacmnPam0Uh07yW5yL+pPZD1qQP1g0j
+ yF+BbHsZuPRQVqtjtEJz3+l0mi+Rm4stJbL3oKDhfLnZTagyKk+uCvkXi3G1M5V3xIxnqkjYvfQY
+ BiR7kDDDL71hIMAutNUTtBIlCnj8v0/p/yKd3Sb0F4Em+WAGOMH2ZP2YoHq0f17GnyUlFzU4Dnm4
+ HDQfABL4PI3e0wBsLjSeLgAB2u1ohqJqdSNqxS4fgnj2q3r/H5n9mcKIJlWRUAvIpGk8UQf69fCR
+ CscZJYnvpGlZXqbv0TGVoodwi5ncSs1ZCeksZszJEmvXpT9KJBFXziKuOR0T91mlRP0zUe3cTIys
+ GhPrJEcqtU87mVEkFquV+C65nMFdnCQQquk7z99diqmUqNTMNIO+0/FOG8Pwk2u2hcuOqFPO1u97
+ 4GhUc9MfjC+3dozQxwCe/ShncNprH/H2Ddj+McyfFTLSWriYMSw4xoOKE3lNsax8q7KMJd/GoLzE
+ eapdRVtAZYYqJRmO+uUFeKRTTZyo0vdyb1QeuRJRKrureLKpElk3woog6mjczBzjrnTXZlOdtgg+
+ YWg4pVoecnFkEfCUIXPwbTMERUqSFqEyYZ042T38Qf+2fWeQduMTdWfoY3ZJydRcZJRGnZp/z7sw
+ imd6Pf9B2p4Zx/ERJjbarCmlPDm6FTy5pY6r/ByPJAc7Yl0v9ubyOvlG8ftUzA8i3wZgQShMgmZe
+ 4pVhz4l+swhee+itMZUmA6m7ShmeGPkq5XCsvzpPtSxjD5Mb4WnJ+i9gYHKDVLKxA1dkkoDmK9Nm
+ e4QGUjgISDMhzGDW9erNFoHrTq+GgUzmsRZ17/wxBsdvgtzpAlpT7KOY1ED2n5X7Y6uR59jCG3xn
+ gjqWsitmeGjEG0yLeL+hCIkxo+RpN+L8e4IpT/w2U1pPsOKbc9nzVOO6SvcJzgYZvdORTeOzHBqg
+ F/NCaiA5Cbmoeqg8c/sXby1Qs+79yWKliDmpc7jcmYwKzkg6LUdM+74nQLR5foA1Y/EmjSVewbcW
+ MVfbNNHiQEhWfELUwFNs32E/4pGYQbfZYgXmadViYrLujOoM1m1LF5ClsAO6fmpfa1E6vvgXXgJL
+ 4KCTo7O1mOyS/Ot696AH/FQ4KEvpCXPRddPyjTpi5/6YDysvohXc+yXAtNymlvKhTPQThEnu/Jb/
+ FQPmSnjbx1ybOt2SJXL+TxnyjH6/b+U6k/t8+jZpeGqT25D1qg8pyjQjdsptUTz3WwSG0X73bo7P
+ 8j/0PV8qZt5owWkZkbiKpBKA4mlSEnU+Y6wuVUBWQvvKOeJH0iB9EatkhwWWfRxF9qMrZSJJ/I1E
+ SV1E7q8zXqiMdVr++CipI5Q3c4FA+89XdlkfBZMh8OLVUByFJNy/dxlb1lDeT6D4jzRKijsTCXLe
+ pIm3KN9/mFJ8BYeCIG5nTtAyBWxrn9cU/chg/LQrSfR9ohcbqrMkveB/58xRunHCl5UWzb6iFTDF
+ EXK2ye1p4h2TIxd9IbRmv7w3Ms6E+UCJzA/TFSSAVRfLFj6lcDki8tpw7wc4xbaYacCD11W6l3iY
+ YLxS0/3eYHF1xclhf3Cez2p0AdJ8DYNZwaTJaDdXFht/uD+KP+Vp/jM8cQu3+nUqFdKRPPLTgWVa
+ pPSasVbhtuGhWy8R2FJBLpYyQ9IPyS8XY1uE6VUSC1wy/0FbYT+do4lfvWu/V9t4NAa8TQzMtra/
+ XoWNbTjUzQx7vVTjg9dccf3fEGH7h8J1gh7rrGHNAlqLj3pq7Qp2U0J2qzpq2joxpKDgngucz6fI
+ OcAkcb4lq1aBqfU6Ib/dic9GK5jwVUycnx+Zfh/skOZAan/5VkDVu3XUEfy1DYFap95cJrTAXuMS
+ PKhxkK2j+OZxMFUPJsZBe2WQ/Aj4jhAfwd0ZMp+jFUVKNDI4J+MxI6D8GriXTCf+63I0ps3F9UWK
+ MiLHEdK8UJttxz0NTD6HySF39XIj9vnT4Uub1qU4Ywi898knQcFI1kRSA3C4wFvBzInsK0fVudk2
+ GhF3rm93b85oUCr8DgcGMeP4yFak0ECY9dUKc8BTZpO4TjGN+0MQIhfn9bOCdsD8Gk4kiZ2M/P6r
+ KX3wLyV87G3V0kI/7wK8BPhlFIltzEn/mjaEHZrRISYCh3fdvSP9XgSUn4fyjLRrM0z4HqPqZq/e
+ JrruMNx1uVRD6pMj8Zz89p6Qg5or4I8fE+cEXZaS3vKzk3+WbRaqjcmigWZRjW4SOFuALCjSjkih
+ ysiNpQcVdUpsXn8lq+u2UM57iQUvjMqBq1h4ds23+KuyaAeYClg5G8B5fRmFAbELNX2quLErlBqe
+ E7rKqjiuNyZ/WMpb20IzyJDpsSFHrbt+5fYbCHiM1NDtVpXLZW40BTAYzkBSyvKGceeAywjC1hYO
+ /SgbNIEjnt/XYJYSbSJvXdVyAezN21gqdCEDBs82eZ1O0KQSoGAyEPkyDXnMBK1Ez8W/h8s=
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
-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-----
Index: client/1.0/neutral/pkgr_upload.eagle
==================================================================
--- client/1.0/neutral/pkgr_upload.eagle
+++ client/1.0/neutral/pkgr_upload.eagle
@@ -35,10 +35,310 @@
\[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 processes a list of 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.
+ #
+ proc getContainingDirectory { fileNames } {
+ set result ""
+ set resultParts [list]
+
+ foreach fileName $fileNames {
+ set directory [file dirname $fileName]
+ set directoryParts [file split $directory]
+
+ if {[llength $resultParts] == 0 || \
+ [llength $directoryParts] < [llength $resultParts]} then {
+ set result $directory
+ set resultParts $directoryParts
+ } elseif {[llength $directoryParts] == [llength $resultParts] && \
+ $directory ne $result} then {
+ set result [file dirname $directory]
+ set resultParts [file split $result]
+ }
+ }
+
+ return $result
+ }
+
+ #
+ # 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. This procedure may raise script errors.
+ #
+ proc getRelativeFileNames { fileNames } {
+ set directory [getContainingDirectory $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 allowed for all file names. This procedure may raise script
+ # errors.
+ #
+ proc getScriptChunkForFileNames { fileNames maximumLevels } {
+ set result ""
+ set relativeFileNames [getRelativeFileNames $fileNames]
+
+ 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.
+ #
+ proc createRepositoryScript { language version platform fileNames options } {
+ ::PackageDownloader::verifyLanguageAndVersion $language $version isClient
+ ::PackageDownloader::verifyPlatform $platform platform
+
+ 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.
+ #
+ 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.
+ #
+ 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
@@ -65,13 +365,39 @@
namespace eval ::PackageRepository {
variable verboseUriDownload true
}
#
- # NOTE: Load the Package Repository Client package now.
+ # NOTE: This package requires both the package repository and downloader
+ # client packages.
+ #
+ 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 require Eagle.Package.Repository
+ 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.
#
Index: client/1.0/neutral/pkgr_upload.eagle.asc
==================================================================
--- client/1.0/neutral/pkgr_upload.eagle.asc
+++ client/1.0/neutral/pkgr_upload.eagle.asc
@@ -1,18 +1,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
+iQIcBAABCAAGBQJYVf3PAAoJEFAslq9JXcLZG3oP/3S/KjjVQUDoCWCQV3DlFtGH
+0hz0IkBJy87MCbxE3VPW7Kojqx2qRbma3a5yUvaBGm4J9r3t5+z6J9Nx0CJJrYqi
+Db3dMiRKv6RiPVjA1vcL7uozJOT5mOuLTTZfc4r/YafEN2izbNidUqQGI4qzx4Tt
+dD2hy84jbShUNkpM3AmvIJXIYoR99VWqPgyzpaF8LiYGA1hLH2Y5rvbfrLr6SnLd
+RZOvdBVrrrSNYKRRVwsXrxvOVM1a5OxSnz31nV50zL/Rm7ujxk4r3I+oPhRTOKnH
+ad9cjry9OBexu9aLtUm4r4pujbuRIP7Dy/MDc8ySoFEpVrPQ2SD1t4rTdHOFFr2Q
+TQYdGq9tMNfsNwbTbPOpvz0tuQ/eUA6PO/ccjQj7rsdOCIaHSyh9z6MdxCIXSfTi
+99QIICXaz+cdLZCe/ojB7VU0/qAQRYBIthrmd2cdfxdsqPdk0Q+vtaO5BMLddGzQ
+ujYBeN89hovslDH4hriYY6O5ChWr0QNBLBR00AlBr5iL7UI/MZTjEoK9qsNfdv1d
+XqhjewMBL51WlJRtW7YBPYfPWDqA4gjApxzB/Xk2vSYx0CeRkLSE7F7I6F9LO+I8
+E2lPOw56MsPMENmpeIkrUf0hZ/NXyMzha6Y2vi2dOBolEBIcGYQ4Qbp0oXuD1B/x
+8cpf4Xvs0Dj34ZfnbL9r
+=ARcM
-----END PGP SIGNATURE-----
Index: client/1.0/neutral/pkgr_upload.eagle.harpy
==================================================================
--- client/1.0/neutral/pkgr_upload.eagle.harpy
+++ client/1.0/neutral/pkgr_upload.eagle.harpy
@@ -19,50 +19,50 @@
None
Mistachkin Systems
- 410ca3b4-8e95-44e4-a931-03b0cc7e1281
+ 3783ac1d-7987-47b1-8d9a-de7990ae10d3
SHA512
Script
- 2016-12-17T05:30:22.5644531Z
+ 2016-12-18T03:08:32.8886718Z
-1.00:00:00
0x9559f6017247e3e2
- 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
+ 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
Index: client/1.0/neutral/pkgr_upload.eagle.harpy.asc
==================================================================
--- client/1.0/neutral/pkgr_upload.eagle.harpy.asc
+++ client/1.0/neutral/pkgr_upload.eagle.harpy.asc
@@ -1,18 +1,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
+iQIcBAABCAAGBQJYVf3RAAoJEFAslq9JXcLZNRwP/19dwigW9orEHvIOxyWKnIJF
+Ey3tpStxC7ZmV2A0vQ2wS8ID55mljlnswaybEJcFJl6zeyTgvJFY48WK7Xk+OXyN
+U/5wiHmVbB76RRL6bl1O0GzRlr+0UjSNnNk2v68Bio+GzD1E2Q/IeAPFdQHfRSJ8
+KtB1/LI4SxFbmyvvrVOMuqFuQqR34xAaBrX1kWSlN5DE6QmN8IoU1VXH58ZiThAR
+uApHhvnAN/kZK5wOBn9dZaJEB9zxW2+0kg5lkezcpWb1RUVXs2XDw/2MA31XNhl0
+krfNyGXJ392byfIBQmTUgDvmRbShqg6igDiapKzdROnR6N6Ru/fkQ2KmZVx1ybET
+Awl6SYBsnp9N808GFQGqtijcv+tn4hZA3bqMGMx+au0ri6lkQqXWnZOp/vREYkqJ
+0oB4iP35cVOVrdsY7DEwJmCzD2As9trUcwCETX8HYQw7XT5jKsGGkk8UrqPoiv4G
+6t/dpoTqwqYnKOPUObmD0o/hU27CxnDCxMYs4T+IRVUu+xAMkZ2ibrW4pPw7cGiv
+FARTEU+WDVz34CFGiFm67toamUiFnSiJmWrgHTMNfyhqm0Z98qkpObDRtj55i+w5
+5yu+l4FAGPHPJHQGqTGufAG76mWMLlJFMjHSsuYBdkV6SDPoDLQdiDzYV5t89j8n
+ufVKNYd18OAITM1YVIjF
+=A96A
-----END PGP SIGNATURE-----