Index: client/1.0/neutral/pkgr_upload.eagle ================================================================== --- client/1.0/neutral/pkgr_upload.eagle +++ client/1.0/neutral/pkgr_upload.eagle @@ -42,28 +42,102 @@ # 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: The project code for the Fossil repository. This will be checked + # prior to staging or committing any files. + # + variable projectCode; # DEFAULT: 9ceada8dbb8678898e5b2c05386e73b3ff2c2dec + + if {![info exists projectCode]} then { + set projectCode 9ceada8dbb8678898e5b2c05386e73b3ff2c2dec + } + # # NOTE: What is the fully qualified path to the directory containing the # checkout for the package client? # - variable checkoutDirectory + variable checkoutDirectory; # DEFAULT: if {![info exists checkoutDirectory]} then { set checkoutDirectory [file dirname $script] } + # + # NOTE: The command to use when attempting to check for changes prior to + # staging files using Fossil. + # + variable fossilChangesCommand; # DEFAULT fossil changes ... + + if {![info exists fossilChangesCommand]} then { + set fossilChangesCommand {fossil changes --chdir {${checkoutDirectory}}} + } + + # + # NOTE: The regular expression pattern used when attempting to verify + # that the Fossil checkout has no changes staged. Generally, this + # pattern should only match an empty string. + # + variable fossilChangesPattern; # DEFAULT: {^$} + + if {![info exists fossilChangesPattern]} then { + set fossilChangesPattern {^$} + } + + # + # NOTE: The command to use when attempting to check the checkout status + # prior to staging files using Fossil. + # + variable fossilInfoCommand; # DEFAULT fossil info ... + + if {![info exists fossilInfoCommand]} then { + set fossilInfoCommand {fossil info --chdir {${checkoutDirectory}}} + } + + # + # NOTE: The regular expression pattern used when attempting to verify + # that the Fossil checkout belongs to the correct project. + # + variable fossilInfoProjectCodePattern; # DEFAULT: {^project-code:\\s+...\$} + + if {![info exists fossilInfoProjectCodePattern]} then { + set fossilInfoProjectCodePattern [appendArgs \ + {^project-code:\\s+${projectCode}\$}] + } + + # + # NOTE: The regular expression pattern used when attempting to verify + # that the Fossil checkout is sitting on the correct branch. + # + variable fossilInfoTagsPattern; # DEFAULT: {^tags:\s+trunk(?:,|$)} + + if {![info exists fossilInfoTagsPattern]} then { + set fossilInfoTagsPattern {^tags:\s+trunk(?:,|$)} + } + + # + # NOTE: The command to use when attempting to reset the checkout to the + # default branch prior to staging files using Fossil. + # + variable fossilUpdateCommand; # DEFAULT fossil update trunk ... + + if {![info exists fossilUpdateCommand]} then { + set fossilUpdateCommand \ + {fossil update trunk --chdir {${checkoutDirectory}}} + } + # # NOTE: The command to use when attempting to stage package files using # Fossil. # - variable fossilAddCommand; # DEFAULT fossil add {${fileName}} + variable fossilAddCommand; # DEFAULT fossil add ... if {![info exists fossilAddCommand]} then { - set fossilAddCommand {fossil add {${fileName}}} + set fossilAddCommand \ + {fossil add --chdir {${checkoutDirectory}} {${fileName}}} } # # NOTE: The command to use when attempting to commit package files using # Fossil. @@ -458,70 +532,218 @@ [list $uri] [list 20] [list stdout] [list \ [expr {!$verboseMetadataSubmit}]] $options] } } + # + # NOTE: This procedure attempts to verify that the checkout directory does + # not contain any (stray) changes. There are no arguments. Non-zero + # is returned if the verification is successful. + # + proc verifyThereAreNoChanges {} { + variable checkoutDirectory + variable fossilChangesCommand + variable fossilChangesPattern + + if {[isEagle]} then { + if {[catch { + eval exec -nocarriagereturns -stdout output -stderr error \ + [subst $fossilChangesCommand] + } result] == 0} then { + set result [appendArgs $output $error] + } else { + return false + } + } else { + if {[catch { + eval exec [subst $fossilChangesCommand] + } result]} then { + return false + } + } + + if {![info exists result] || \ + ![regexp -- $fossilChangesPattern $result]} then { + return false + } + + return true + } + + # + # NOTE: This procedure attempts to verify that the checkout directory does + # belong to the correct project. There are no arguments. Non-zero + # is returned if the verification is successful. + # + proc verifyThisIsTheCorrectProject {} { + variable checkoutDirectory + variable fossilInfoCommand + variable fossilInfoProjectCodePattern + variable projectCode + + if {[isEagle]} then { + if {[catch { + eval exec -nocarriagereturns -stdout output -stderr error \ + [subst $fossilInfoCommand] + } result] == 0} then { + set result [appendArgs $output $error] + } else { + return false + } + } else { + if {[catch { + eval exec [subst $fossilInfoCommand] + } result]} then { + return false + } + } + + if {![info exists result] || ![regexp -line -- \ + [subst $fossilInfoProjectCodePattern] $result]} then { + return false + } + + return true + } + + # + # NOTE: This procedure attempts to verify that the checkout directory does + # belong to the correct branch. There are no arguments. Non-zero + # is returned if the verification is successful. + # + proc verifyThisIsTheCorrectBranch {} { + variable checkoutDirectory + variable fossilInfoCommand + variable fossilInfoTagsPattern + + if {[isEagle]} then { + if {[catch { + eval exec -nocarriagereturns -stdout output -stderr error \ + [subst $fossilInfoCommand] + } result] == 0} then { + set result [appendArgs $output $error] + } else { + return false + } + } else { + if {[catch { + eval exec [subst $fossilInfoCommand] + } result]} then { + return false + } + } + + if {![info exists result] || \ + ![regexp -line -- $fossilInfoTagsPattern $result]} then { + return false + } + + return true + } + + # + # NOTE: This procedure attempts to change the branch for the checkout + # directory. There are no arguments. This procedure may raise + # script errors. + # + proc changeToTheCorrectBranch {} { + variable checkoutDirectory + variable fossilUpdateCommand + + if {[isEagle]} then { + if {[catch { + eval exec -success Success [subst $fossilUpdateCommand] + } error]} then { + error [appendArgs \ + "could not change branch: " $error] + } + } else { + if {[catch { + eval exec [subst $fossilUpdateCommand] + } error]} then { + error [appendArgs \ + "could not change branch: " $error] + } + } + } + # # 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 + variable fossilUpdateCommand + + if {![verifyThereAreNoChanges]} then { + error "cannot stage package files: there are pending changes" + } + + if {![verifyThisIsTheCorrectProject]} then { + error "cannot stage package files: wrong project" + } + + if {![verifyThisIsTheCorrectBranch]} then { + changeToTheCorrectBranch + + if {![verifyThisIsTheCorrectBranch]} then { + error "cannot stage file: still on wrong branch" + } + } set relativeFileNames [getRelativeFileNames $fileNames] - set savedPwd [pwd]; cd $checkoutDirectory foreach fileName $fileNames relativeFileName $relativeFileNames { file mkdir [file join \ - $language $version $platform [file dirname $relativeFileName]] + $checkoutDirectory $language $version $platform \ + [file dirname $relativeFileName]] + + file copy $fileName \ + [file join $checkoutDirectory $relativeFileName] - file copy $fileName $relativeFileName - set fileName $relativeFileName + set fileName $relativeFileName; # NOTE: For [subst]. 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] + "could not stage file \"" $fileName "\": " $error] } } else { if {[catch { eval exec [subst $fossilAddCommand] } error]} then { - cd $savedPwd - error [appendArgs \ - "failed to stage file \"" $fileName "\": " $error] + "could not 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 } { + proc commitPackageFiles { package patchLevel language version varName } { variable checkoutDirectory variable fossilCommitCommand variable fossilCommitPattern - set branch ""; # TODO: Figure out a good branch. - set comment ""; # TODO: Figure out a good comment. + set branch [appendArgs pkg_ $package _ $patchLevel] + + set comment [appendArgs \ + "Add package " $package " v" $patchLevel " for " $language \ + " v" $version .] if {[isEagle]} then { if {[catch { eval exec -nocarriagereturns -stdout output -stderr error \ [subst $fossilCommitCommand] 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 -iQIcBAABCAAGBQJYV1qoAAoJEFAslq9JXcLZaq0QAKGNBMbsWjws8CLTFXKWts8n -aoQ7+Fe2YkGnpLIRLzc6gha/5K3suibDgZnOiSYxL5dRJnB5kJrVojaqFv2kQA9B -ZQFdSBdYGhZq2qGPIpOu/eeA3gbq0116FehPeqAIvo5wVZ1p0MWAPCau4Gg2LUGK -AY3hU55EH96a3cktuq8f+xDmmHV63ycgLCu1VAHcV/hvzpX0LpXW6n47gRsoQOff -fS4gFAzc6vlEt5F/CiYiEhXUN7UY5/F0ce6LKM5FVWclqCNZicQXwvZIn+/KF5z0 -F7riKt6QH8NGtjjGuRndGikfHmvKpjLoqAiwZ0/Y3fn9u3gPwU686iPc42eS4SUc -acEXMBrn8pM9BpSGnMIOrp5WcQDt07BLjzeX22KPWBsM1skmEqwMo+sefDAg5odK -raTnCtnFTG2r1oBNblrkF8jr0CntJpKcTTh9IlruTCMqlQxEQqYSylcLQrHO6NR7 -hKNAKUNf97v8GEjKMRHUNCYzVCDgY++ifhHOvxvf9yusMwlYLqJyFbi45sGvELpz -bQEybALCTQ7NCFom6/EV+v6e6CmnD0Hq/ho+c8rfCEJppLpu1ZUC6IVJ5o9msBwA -liKomZaH/gT+TuJJJn0KiR2sMe/g4nweVSRQyNqa6uo1erKi6/1URLIiL0Rmk+To -tsqZMJfTyHsz6EUiviyN -=5N7l +iQIcBAABCAAGBQJYWDTSAAoJEFAslq9JXcLZZZsP/1nDc+BYiIBYkTkDmhWyJjuG +VqPuvtIxWYzkOw6mLY3ndLy9XpS43ByK2U/1Rmc9J3EibgflpAhAc5CL+528ML9g +OCYkvnT912sWzYROHPai0fOmKigvSJEb2tf4aAxcHVg2JojmXzY0sxkEtMt5kayX +Gl2ssWxwJ75fSVVk5Kv3DOtdj0MeGM4aH+83u7OvCUDWpjEh0YexzbaZ/4Jkys4P +WxeXUkli9OR4HMdHHnwxdx0qCVxodlHuTw33ETvXpAPiLOHVmKSrYL2Rz1erXuLa +BsGJoGbfoTPblnDwMciTYFnRxvUhWqL0gIxsTGMsMkfeHxT5ka5sDqGDJ7cbEIcw +OlZt/2vBmOYbAwvTxejbecsOL9lTpOgRn6F1ih8ADvPNwuWgw+i1RXJIsjcGnRp2 +nHB79cQikEypTl8k6ibbOOFwDx4Oml77a2xj3jFVxM7E8OyNVcckujnPto5NmOzv +6jvq5+P2yd5Zf/T8fIRrjg49Cs3r+dFIBHi6gtUODcxB6BbIJFEWCVbQ+n7jRKbs +6i3SXTqQE1p+sWzrzWOnB7k/U4vn5iAEyjhgzgPqLjXqNrVTBz/lVOFkm7sJmMR1 +eCJv2Th5s6/GKTC8xZUEI4+WchAntYYSadY0KORMA6RTqiUekTuh+Al7br2LgkLH +MuRP2BppI0sbQ0CghjJF +=jK3P -----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 - d6c3fbea-ed80-4cd6-acf7-df2997fc2f9e + 016ba0e0-7a00-4f14-bf99-3621f235dc43 SHA512 Script - 2016-12-19T03:57:02.7109375Z + 2016-12-19T19:27:50.3632812Z -1.00:00:00 0x9559f6017247e3e2 - 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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 -iQIcBAABCAAGBQJYV1qpAAoJEFAslq9JXcLZ1pMQAISOMNMTqtogHUMFqsnNevUV -HMCgTAqXiAhvhnGtVdUJHCqjGM2mpcmrfN6Yd8bA1lb18S3+J6hLpHArcSAS+SZh -g0pmepb+48k6T+2TB1owiZYOLYMOzvlCUDQPDTMmCuCEJlATtowgci4CBfJ9L26D -RvYhQTiPt1S8XLpH7/KvMXjaenNs6Mmcwm35A9aW8AVxC6khKe5yQ8eExtLYLIW6 -qJOv2Iis6mcxkb02psqDcHOhMMg+rhpWCxPOjL85xkacoiBPM7CsKfWCPSVO+fXF -UZyYoifqlBrYFD+rynGHuAl7TICIRraM/o542spj3wJ8Zinfk+AtizFSOaGs1au9 -XQ84qfCvnoMiP5cwv58wt/1/YF0Z2VwMIZjWfz6G7gXZRRevID4pQyyWVQGLDZQs -2UsSZ9KmaZPJfn9egyz579kEwpPwv5AU8Q7Qcx5DdHJoDaqAI2J+Idk97GHFNv/D -hTmNdsJyFpEucwVIJpdK6n00vG0OFsrtkQwEvCx4O+sDEeQ7wtdD6TwLSJimmnXk -NttnWjTJ9fxYXUjWFxQVNTICf55nri6I1XxIC5DLGfch6ObCF7z8KK8BQ4oEOg6T -OVpbz/eJbP4qkH4rCboX3CZbrL0FASaacjjMyduhx2whcwSLXFdQpQ9tH5TUsVLc -VRnkyutCYQ1ecBpk+9bu -=9XRy +iQIcBAABCAAGBQJYWDTTAAoJEFAslq9JXcLZbcwP/0FKdoE5f5LG2ucL4ZnW8vH9 +qi1UwJgUnkvHy82ILxuJ9Tr4Oj3WWELvvcv6P8ujMSE9zzK69NhXiy8LJfL8FVc0 +q+X79V1Dw51g3LGXQ+V/hYpegWKoVZ2qpXK2K1BfCo3ymjDuEoxE/YinGfdJGbTr +ShfZtAL9UtuoD89Z9aGxD2Pt9Rtao31BxwTh3/m+UFEkS8KosmZ9eG7QmVM9ZtlL +Y2uXiVYQOd9lz0mG59SMItDJsgK1QY1+km2o5NBnQDN9wA0UF0kQE6coyyGlORwq +lWTTvCRnsl9jjmQ52+2QuctOuVrQ7MZ4bQ44elCYyB31yFUyeX+O7fM+aAXWq3L8 +uvNHAsd/5UOflSqQEUFroZt7OGpXpl9go22vG4OxEWZxA6Q/GoHwGFBL68DLvCWG +wEyKIOOTtFOAv4vK+su44f3AFBabBcufgd1qCTrHVq0pGze+P/c+1EGY60J/0gUP +5TSDXYYeDX2kQIpf7aAhSQ64YYxtOBQoVY9u0YeqhqbUuacddYdG2m4Q+EygmRBY +t0FYFOnODTU7M80/8PGMoZhYB33EtkxG0WaIPagPTpCpm1zstljIE1DGW6A/zmF6 +ChU3LVAE1HexG8JHz++d2HWLhH+8x0ZbvqLf/g39YU/W8FYR6CZ02N4+zXSnhWTe ++/X4aHGlI93NwC0qSJAZ +=K/EX -----END PGP SIGNATURE-----