[vcpkg.exe] Verify hash for already present files. Dont check for path twice

This commit is contained in:
Alexander Karatarakis 2018-04-06 15:17:16 -07:00
parent 5d96ff1229
commit b87aeb77de

View File

@ -229,25 +229,12 @@ namespace vcpkg::Commands::Fetch
fs.rename(to_path_partial, to_path);
}
static void download_file(const VcpkgPaths& paths,
const std::string& url,
const fs::path& download_path,
const std::string& sha512)
static void verify_hash(const VcpkgPaths& paths,
const std::string& url,
const fs::path& path,
const std::string& sha512)
{
Files::Filesystem& fs = paths.get_filesystem();
if (fs.exists(download_path))
{
return;
}
const std::string download_path_part = download_path.u8string() + ".part";
std::error_code ec;
fs.remove(download_path_part, ec);
const auto code = System::cmd_execute(Strings::format(
R"(curl -L '%s' --create-dirs --output '%s')", url, download_path_part));
Checks::check_exit(VCPKG_LINE_INFO, code == 0, "Could not download %s", url);
const std::string actual_hash = Hash::get_file_hash(paths, download_path_part, "SHA512");
const std::string actual_hash = Hash::get_file_hash(paths, path, "SHA512");
Checks::check_exit(VCPKG_LINE_INFO,
sha512 == actual_hash,
"File does not have the expected hash:\n"
@ -256,10 +243,25 @@ namespace vcpkg::Commands::Fetch
" Expected hash : [ %s ]\n"
" Actual hash : [ %s ]\n",
url,
download_path.u8string(),
path.u8string(),
sha512,
actual_hash);
}
static void download_file(const VcpkgPaths& paths,
const std::string& url,
const fs::path& download_path,
const std::string& sha512)
{
Files::Filesystem& fs = paths.get_filesystem();
const std::string download_path_part = download_path.u8string() + ".part";
std::error_code ec;
fs.remove(download_path_part, ec);
const auto code = System::cmd_execute(Strings::format(
R"(curl -L '%s' --create-dirs --output '%s')", url, download_path_part));
Checks::check_exit(VCPKG_LINE_INFO, code == 0, "Could not download %s", url);
verify_hash(paths, url, download_path_part, sha512);
fs.rename(download_path_part, download_path);
}
@ -302,6 +304,10 @@ namespace vcpkg::Commands::Fetch
download_file(paths, tool_data.url, tool_data.download_path, tool_data.sha512);
System::println("Downloading %s... done.", tool_name);
}
else
{
verify_hash(paths, tool_data.url, tool_data.download_path, tool_data.sha512);
}
System::println("Extracting %s...", tool_name);
extract_archive(paths, tool_data.download_path, tool_data.tool_dir_path);