[vcpkg.exe] Verify hash for already present files. Dont check for path twice
MODIFY
src/vcpkg/commands.fetch.cpp
src/vcpkg/commands.fetch.cpp
@@ -229,25 +229,12 @@ namespace vcpkg::Commands::Fetch
fs.rename(to_path_partial, to_path);
}
- static void download_file(const VcpkgPaths& paths,
+ static void verify_hash(const VcpkgPaths& paths,
const std::string& url,
- const fs::path& download_path,
+ 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);

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