Index: client/1.0/neutral/pkgd.eagle ================================================================== --- client/1.0/neutral/pkgd.eagle +++ client/1.0/neutral/pkgd.eagle @@ -700,39 +700,10 @@ } return "" } - # - # 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 - # a package index file. The language argument must be one of the - # literal strings "eagle", "tcl", or "client". The fileNames argument - # must be the list of file names to be downloaded. The package name, - # if one can be detected, is returned; otherwise, an empty string will - # be returned. - # - proc guessPackageNameFromFileNames { language fileNames } { - set packageIndexFileName [getPackageIndexFileName $language] - - if {[string length $packageIndexFileName] > 0} then { - foreach fileName $fileNames { - set fileNameOnly [file tail $fileName] - - if {$fileNameOnly eq $packageIndexFileName} then { - set directory [file dirname $fileName] - - if {[string length $directory] > 0} then { - return [file tail $directory] - } - } - } - } - - return "" - } - # # NOTE: This procedure verifies the platform specified by the caller. 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". An empty string means that the @@ -1093,10 +1064,39 @@ } return [expr {$compare > 0}] } + # + # 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 + # a package index file. The language argument must be one of the + # literal strings "eagle", "tcl", or "client". The fileNames argument + # must be the list of file names to be downloaded. The package name, + # if one can be detected, is returned; otherwise, an empty string will + # be returned. + # + proc guessPackageNameFromFileNames { language fileNames } { + set packageIndexFileName [getPackageIndexFileName $language] + + if {[string length $packageIndexFileName] > 0} then { + foreach fileName $fileNames { + set fileNameOnly [file tail $fileName] + + if {$fileNameOnly eq $packageIndexFileName} then { + set directory [file dirname $fileName] + + if {[string length $directory] > 0} then { + return [file tail $directory] + } + } + } + } + + return "" + } + # # NOTE: This procedure downloads a manitest from the package file server, # writing its contents to the specified local file name. It can also # verify the OpenPGP signature. The language argument must be one of # the literal strings "eagle", "tcl", or "client". The version @@ -1130,28 +1130,11 @@ # # NOTE: Then, in one step, download the file from the package file # server and write it to the specified local file. # - writeFile $localFileName [getPackageFile $uri] - - # - # NOTE: Is use of OpenPGP for signature verification enabled? Also, - # did we just download an OpenPGP signature file? - # - if {$usePgp && [isOpenPgpSignatureFileName $localFileName true]} then { - # - # NOTE: Attempt to verify the OpenPGP signature. If this fails, - # an error is raised. - # - ::PackageRepository::openPgpMustBeInstalled - - if {![::PackageRepository::verifyOpenPgpSignature $localFileName]} then { - error [appendArgs \ - "bad OpenPGP signature \"" $localFileName \"] - } - } + downloadOneUriToFile $localFileName $uri $usePgp # # NOTE: Initialize list of platforms to return. This will be populated # based on the platform directories available in the downloaded # manfiest data. @@ -1201,10 +1184,43 @@ } return [lsort -unique $platforms] } + # + # NOTE: This procedure downloads a single URI from the package file server + # and writes the result to a local file. The localFileName argument + # is the file name where the downloaded file should be written. The + # The uri argument is the URI to download. The usePgp argument should + # be non-zero when the OpenPGP signature file needs to be verified for + # the downloaded file. The return value is undefined. + # + proc downloadOneUriToFile { localFileName uri usePgp } { + # + # NOTE: Then, in one step, download the URI from the package file + # server and write it to the specified local file. + # + writeFile $localFileName [getPackageFile $uri] + + # + # NOTE: Is use of OpenPGP for signature verification enabled? Also, + # did we just download an OpenPGP signature file? + # + if {$usePgp && [isOpenPgpSignatureFileName $localFileName true]} then { + # + # NOTE: Attempt to verify the OpenPGP signature. If this fails, + # an error is raised. + # + ::PackageRepository::openPgpMustBeInstalled + + if {![::PackageRepository::verifyOpenPgpSignature $localFileName]} then { + error [appendArgs \ + "bad OpenPGP signature \"" $localFileName \"] + } + } + } + # # NOTE: This procedure downloads a single file from the package file server, # writing its contents to the specified local file name. It can also # verify the OpenPGP signatures. When an OpenPGP signature file is # downloaded, this procedure assumes the corresponding data file was @@ -1236,31 +1252,14 @@ # set fileName [file join $language $version $platform $fileName] set uri [subst $downloadUri] # - # NOTE: Then, in one step, download the file from the package file - # server and write it to the specified local file. - # - writeFile $localFileName [getPackageFile $uri] - - # - # NOTE: Is use of OpenPGP for signature verification enabled? Also, - # did we just download an OpenPGP signature file? - # - if {$usePgp && [isOpenPgpSignatureFileName $localFileName true]} then { - # - # NOTE: Attempt to verify the OpenPGP signature. If this fails, - # an error is raised. - # - ::PackageRepository::openPgpMustBeInstalled - - if {![::PackageRepository::verifyOpenPgpSignature $localFileName]} then { - error [appendArgs \ - "bad OpenPGP signature \"" $localFileName \"] - } - } + # NOTE: Download the file from the package file server, based on the + # final URI. + # + downloadOneUriToFile $localFileName $uri $usePgp } # # NOTE: This procedure attempts to download a list of files, optionally # persistening them for subsequent uses by the target language. 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 -iQIcBAABCAAGBQJYFpKcAAoJEFAslq9JXcLZnn0P/iFQYWnBCA+H7GF5of1EOOAH -176D9KBLc0V881vihj0WnJ1YfWCGhkXnqARqy5yv72nBZlTWB6i33ewzJH7gyevZ -F1BqIh1EyV+v2AlAyhTydOlb3JQb07IMM+5eVRVd75TMp4LRr+InOkKfDMCeLuSp -jvcp2iPQPlEpOpEW1echzJgIdEpgfML9cG7pUbyTAY+874yRcffbWlQXfFaPn7OW -6EdENAivX8+V0AAGVlHiWG3tdc0bJBM0Lh58w1mjODLYPGldHRc78vdtcEZXkDzY -CTj8KIItKq7PCuPbTeZMH3X9ChKa5uBVC1a1ivcp8f0Lq8z8vH2MvddnobmWLzYu -YN//pvsOBe+N6EEy61ToKL44pSN0GV5uemRfYu6q4pEIPZtN1oEzrfJfj+DOXM4H -ONenr2hyrPM+8/oeRCars+m1hKWjXYzeRoQ48e0ueiJDKkqxLQBuwxmhDxhJmYbP -/cdpV3EdwNwBhQYJ4GhNK41iecfxpya5SKGR2zqYkkko5JHNacCy+kez768QEBdq -xnRBSfemkb4d5/ZRpsZJl4L07V8cipDgtYOxRL1l/1zD6ay6jsXwosX8kUjbrQyA -5/MfBBvTtfKLg3/w2XTtKFHUNYxzHG19KhxkJ9sUt2PKHHUwD95PKjE3+Ht8mvE/ -anQwCmgtFDw6onWlDshg -=x/i7 +iQIcBAABCAAGBQJYFpwWAAoJEFAslq9JXcLZggkP/14MTnbeV049vwP4MuX4pwdM +NVH9O46E27J1GSrv7gUyCgR01BIcssz9mtVmeKSvN5rOkiM0mtmhmJ5FJV0ks/oa +Nw761c8cE3UmjyIHrAVKPE6godXhIMTtERQR8f6kNURTAkZGR/M79v5AID9H1TuM +2frCj0PZrFNI7xx90QQYCb4My9GGFu5WOZQ4G7woSuxREWCg1sXchLz9UgL3mQUk +iIIohiecz6rwOd1MQVcjDhQrk2cjdSgE9U1ariRsMgLzS89wzWPMeA7BXAJfUV62 +AQDNht8BCwfHJPMaAGrql5YwulZWHyE/ubRR7C8LWYHC+ACH08V1WlJDp20kYZr7 ++Qf5VaLEvRP8sYaRTbB0tgHuuEPovaBB4eYNH0uZm2uXicXGZ04Z7mFOygwLA4XG +C11mEHp8vgQdpiab19qvewigtvqP2E0YcYYNOVxC09PpLl9nqS6iCOi50JQm2bAa +ekp6G44yDcM2XR63dTqe6ba/jzFPdl+SzmGuuaP1qLbNu8FXtQ4R75gXKx0paL2j +5f75XP/mQSZlLyMpM+uHpY8m0l+DqF4tdD56QMCikYEXpG32WLuVZ20bgA9YOLW1 +n8VszwKdG3MJJ7uDgzY/xMkP8Dw0BrwK0PxOYgYs3wG4MxyVCWgB2Ffwz6PQt2uu +b6lU3uKXSq8IP+m+EfMf +=MyaC -----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 - dfe02158-0787-40dc-ab76-b5b3b27db03e + 82f5f4f9-254f-4a9a-8abd-e1248267f8b4 SHA512 Script - 2016-10-31T00:36:41.6996407Z + 2016-10-31T01:18:56.2787422Z -1.00:00:00 0x9559f6017247e3e2 - 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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 -iQIcBAABCAAGBQJYFpKeAAoJEFAslq9JXcLZ14sP/3wW75sAFZEidnnJ5fCALUZJ -43zLj+wDzcPAuY0xaZU5JAVMAcIsr9E8Uxsk+qRMDIeRYpPz27RfxyijN458mfw+ -yZJ13QLYYCDEGEqETDYo+x5HljmQYBIP87Bwah3DCpehWFfPuWm1s1qcprXDL6fW -btnRttNQVyPyWHPaIfD5HEvxuCAGXVCZBxtOOlRSTpkfxPKrCcG+hHJWw9XGsqUO -ePoweC1sInehc0jV8O48GHU98T7Lqr9WgZbCk3Bk44Mjs2sCu3U0k4g9D0uOlCp7 -WZ/48Y9GIMnIJ/83hQ+ol/qGrokbmPbz893HpHNyK/t5YJ3EQEphoOO7PV5j0Ok9 -jXS+fRv8AfkGRvqurqcjf7bMs3iy1dPauiI2af7yORswhwHKScpOlsaXFgkLpvab -mp17nK0mPuPtDJQR+eZcxPwylwxiRmZinqaE79UEN+OmyMv5WJ9VMthkRpgoYP8s -PAp0RpN7tVciTGDpgutpNPIJua2y6+A+O3D6G9WfHPXgvn0hpavd5myaGTw1B7RK -6CgBnOWuRk3JfY7lbgIoQl3Q5GIoVNp09cBKAaEQFKm5iSlb9V4qYd8m7RwfFNCd -feyCH00/Rj8UUzkhwEHOPTBSPw87GQbl5PGWhbKkVAq5tCSk9hfSjNhXrdEJpe2z -l/DlaGTOrgd3cabXuNR5 -=gcjH +iQIcBAABCAAGBQJYFpwYAAoJEFAslq9JXcLZlIYQAIuOziCkNCHhnmTM/AFAOTVs +upT7EfiWUzrp8ACr/1M2auJ9C6PJppKUr6zUCIR3N6qwvUkr2rrIaZKyEd5fPtc/ +YgadpA2NjZlLW2gDFQm5D3nT18vjlKvwgWMcGlOidPs5baxDBTkDQsyOnAyyb/WV +3cLB4qHXhHgEJlMdH81pYMD91g/9+1xbtjiUZtFysGr5YfuwDKCHchErDKL0I9E3 +F50365Z3pcpjpM6m2LUMVrR/ebfMrrAAoyKjpGTQsmZIZvJFC5Z8de54z6UxRaHP +mgSMBQVa6K+8m9JM470bRkli6wU9ZqPM4mCNxSFLtOyuimX/k8ZMZNX4SgYhHNmx +r/aZuS92+GxffMchJzzEMBeDZ8b/2Mb6jPdczj6HUqCGqBIQ+f+SscyjUd4RME40 +cEsIybns73+kfnhwyH1SZADbUv9qy6/BJgzX1oROu5wgY2CbPnu99keiHfZpLD7i +KtGSmeNkHe5hjx4KQNBXa5bcNbKUBr8ZRFZ5m6N4gmG5TZ/UgVE7e3uOB9yZ5PCz +ARHP+JOo7rgkPGubEo+z+uGJrNEc1Hybt6Kn3UvQ9072R7AegEEamb6Jmr9QJJ/f +AZnkQ60SIcpNxLYpgZ1+MeR25C7F0lFD+OTZ2Rc4FAw0IB/gw0f+u6Ot7UHjZ1dK +vux8XN81W+UtTVZ+gb9m +=Ff3b -----END PGP SIGNATURE-----