Index: Setup/updateFileInfo.tcl ================================================================== --- Setup/updateFileInfo.tcl +++ Setup/updateFileInfo.tcl @@ -81,14 +81,14 @@ [string length $outputDirectory] == 0} then { set outputDirectory [file join $path Output] } # -# NOTE: Setup the regular expression pattern with the necessary captures. This -# pattern is mostly non-greedy; however, at the end we need to match -# exactly 40 hexadecimal characters. In theory, in Tcl, this could have -# an undefined result due to the mixing of greedy and non-greedy +# NOTE: Setup the regular expression patterns with the necessary captures. +# These patterns are mostly non-greedy; however, at the end we need to +# match exactly 40 hexadecimal characters. In theory, in Tcl, this could +# have an undefined result due to the mixing of greedy and non-greedy # quantifiers; however, in practice, this seems to work properly. Also, # this pattern assumes a particular structure for the [HTML] file to be # updated. # set pattern1 {(.*?).*?\((\d+?\.\d+?)\ MiB\).*?sha1: ([0-9A-F]{40})} +set pattern3 {href="/downloads/(.*?)"} +set pattern4 {\(sha1: ([0-9A-F]{40})\)} + # # NOTE: Grab all the data from the file to be updated. # set data [readFile $updateFileName] @@ -177,14 +180,39 @@ incr start [string length $fileHash] } } } + +# +# NOTE: Attempt to verify that each file name now has the correct SHA1 hash +# associated with it on the page. +# +foreach {dummy3 fileName} [regexp -all -inline -nocase -- $pattern3 $data] \ + {dummy4 fileHash} [regexp -all -inline -nocase -- $pattern4 $data] { + # + # NOTE: Get the fully qualified file name based on the configured + # directory. + # + set fullFileName [file join $outputDirectory [file tail $fileName]] + + # + # NOTE: Make sure the file hash from the [modified] data matches the + # calculated hash for the file. If not, fail. + # + set fullFileHash [getFileHash $fullFileName] + + if {$fileHash ne $fullFileHash} then { + puts stdout "ERROR: SHA1 hash mismatch for\ + file \"$fullFileName\", have \"$fileHash\" (from data),\ + need \"$fullFileHash\" (calculated)." + } +} # # NOTE: Write the [modified] data to the file to be updated. # if {$count > 0} then { writeFile $updateFileName $data } else { puts stdout "WARNING: No changes, update of \"$updateFileName\" skipped." } Index: www/downloads.wiki ================================================================== --- www/downloads.wiki +++ www/downloads.wiki @@ -481,12 +481,11 @@ This is the only setup package that is capable of installing the design-time components for Visual Studio 2005.

However, if you do not require the design-time components, please - consider downloading the associated - Precompiled Binaries + consider downloading the associated "Precompiled Binaries" instead.


(sha1: daa0f42621b93769755fb7a6546eddd3d56b8e72) @@ -581,12 +580,11 @@ This is the only setup package that is capable of installing the design-time components for Visual Studio 2008.

However, if you do not require the design-time components, please - consider downloading the associated - Precompiled Binaries + consider downloading the associated "Precompiled Binaries" instead.


(sha1: 03d86dba982e89dadfd19fc9bce775dcab040632) @@ -680,13 +678,12 @@ This is the only setup package that is capable of installing the design-time components for Visual Studio 2010.

However, if you do not require the design-time components, please - consider downloading the associated - Precompiled Binaries - instead.
+ consider downloading the associated "Precompiled Binaries" + instead.

(sha1: 182ae1db5c4747a4d24a8498a0c8ab14dfea3a55) @@ -779,17 +776,16 @@ This is the only setup package that is capable of installing the design-time components for Visual Studio 2012.

However, if you do not require the design-time components, please - consider downloading the associated - Precompiled Binaries - instead. + consider downloading the associated "Precompiled Binaries" + instead.


- Using Entity Framework 6 design-time support may require installing the - Visual Studio 2012 "flavor" of the + Using Entity Framework 6 design-time support may require + installing the Visual Studio 2012 "flavor" of the Entity Framework 6 Tools for Visual Studio 2012 & 2013.

(sha1: ff9df099dce5e3f0d478e33f587a2866cae9c8ab) @@ -885,17 +881,16 @@ This is the only setup package that is capable of installing the design-time components for Visual Studio 2013.

However, if you do not require the design-time components, please - consider downloading the associated - Precompiled Binaries - instead. + consider downloading the associated "Precompiled Binaries" + instead.


- Using Entity Framework 6 design-time support may require installing the - Visual Studio 2013 "flavor" of the + Using Entity Framework 6 design-time support may require + installing the Visual Studio 2013 "flavor" of the Entity Framework 6 Tools for Visual Studio 2012 & 2013.

(sha1: 15e31d48589c72d17e2269f72110c7e7a32cb6e3) @@ -1234,11 +1229,11 @@   sqlite-netFx45-binary-bundle-Win32-2012-1.0.97.0.zip
- (2.09 MiB) + (2.08 MiB) This binary package features the mixed-mode assembly and contains all the binaries for the x86 version of the System.Data.SQLite 1.0.97.0 @@ -1320,11 +1315,11 @@   sqlite-netFx451-binary-bundle-Win32-2013-1.0.97.0.zip
- (2.08 MiB) + (2.09 MiB) This binary package features the mixed-mode assembly and contains all the binaries for the x86 version of the System.Data.SQLite 1.0.97.0