From 2b8bdeb0441c9fb83fc79bf10a761d1bf11cd287 Mon Sep 17 00:00:00 2001 From: sdcb Date: Thu, 20 Oct 2016 13:03:58 +0800 Subject: Add hash file support. --- toolsrc/src/commands_hash.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 toolsrc/src/commands_hash.cpp (limited to 'toolsrc/src/commands_hash.cpp') diff --git a/toolsrc/src/commands_hash.cpp b/toolsrc/src/commands_hash.cpp new file mode 100644 index 000000000..672e24a24 --- /dev/null +++ b/toolsrc/src/commands_hash.cpp @@ -0,0 +1,40 @@ +#include "vcpkg_Commands.h" +#include "vcpkg_System.h" +#include "vcpkg.h" +#include +#include +#include + +namespace fs = std::tr2::sys; + +namespace vcpkg +{ + void file_hash_sha512(fs::path const & path, char const * hash) + { + auto cmd_line = Strings::format("Powershell -Command (Get-FileHash %s -Algorithm %s).Hash.ToLower()", + Strings::utf16_to_utf8(path.c_str()), + hash); + auto ec_data = System::cmd_execute_and_capture_output(Strings::utf8_to_utf16(cmd_line)); + Checks::check_exit(ec_data.exit_code == 0, "Running command:\n %s\n failed", cmd_line); + System::print(ec_data.output.c_str()); + } + + void hash_command(const vcpkg_cmd_arguments& args) + { + static const std::string example = Strings::format( + "The argument should be a file path\n%s", create_example_string("hash boost_1_62_0.tar.bz2")); + args.check_min_arg_count(1, example.c_str()); + args.check_max_arg_count(2, example.c_str()); + + if (args.command_arguments.size() == 1) + { + file_hash_sha512(args.command_arguments[0], "SHA512"); + } + if (args.command_arguments.size() == 2) + { + file_hash_sha512(args.command_arguments[0], args.command_arguments[1].c_str()); + } + + exit(EXIT_SUCCESS); + } +} -- cgit v1.2.3 From 337c96fc067ae5908d4cf5c8a188aa37588044ac Mon Sep 17 00:00:00 2001 From: flysha Date: Fri, 21 Oct 2016 07:44:00 +0800 Subject: Switch to using CertUtil to generate hash. --- toolsrc/src/commands_hash.cpp | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'toolsrc/src/commands_hash.cpp') diff --git a/toolsrc/src/commands_hash.cpp b/toolsrc/src/commands_hash.cpp index 672e24a24..20e960d02 100644 --- a/toolsrc/src/commands_hash.cpp +++ b/toolsrc/src/commands_hash.cpp @@ -9,14 +9,24 @@ namespace fs = std::tr2::sys; namespace vcpkg { - void file_hash_sha512(fs::path const & path, char const * hash) + void file_hash_sha512(fs::path const & path, std::wstring const & hashType) { - auto cmd_line = Strings::format("Powershell -Command (Get-FileHash %s -Algorithm %s).Hash.ToLower()", - Strings::utf16_to_utf8(path.c_str()), - hash); - auto ec_data = System::cmd_execute_and_capture_output(Strings::utf8_to_utf16(cmd_line)); - Checks::check_exit(ec_data.exit_code == 0, "Running command:\n %s\n failed", cmd_line); - System::print(ec_data.output.c_str()); + auto cmd_line = Strings::wformat(LR"(CertUtil.exe -hashfile "%s" %s)", + path.c_str(), hashType.c_str()); + auto ec_data = System::cmd_execute_and_capture_output(cmd_line); + Checks::check_exit(ec_data.exit_code == 0, "Running command:\n %s\n failed", Strings::utf16_to_utf8(cmd_line)); + + std::string const & output = ec_data.output; + + auto start = output.find_first_of("\r\n"); + Checks::check_exit(start != std::string::npos, "Unexpected output format from command: %s", Strings::utf16_to_utf8(cmd_line)); + + auto end = output.find_first_of("\r\n", start + 1); + Checks::check_exit(end != std::string::npos, "Unexpected output format from command: %s", Strings::utf16_to_utf8(cmd_line)); + + auto hash = output.substr(start, end - start); + hash.erase(std::remove_if(hash.begin(), hash.end(), isspace), hash.end()); + System::println(hash.c_str()); } void hash_command(const vcpkg_cmd_arguments& args) @@ -28,11 +38,11 @@ namespace vcpkg if (args.command_arguments.size() == 1) { - file_hash_sha512(args.command_arguments[0], "SHA512"); + file_hash_sha512(args.command_arguments[0], L"SHA512"); } if (args.command_arguments.size() == 2) { - file_hash_sha512(args.command_arguments[0], args.command_arguments[1].c_str()); + file_hash_sha512(args.command_arguments[0], Strings::utf8_to_utf16(args.command_arguments[1])); } exit(EXIT_SUCCESS); -- cgit v1.2.3 From c12c3d90bee810abaec479c49d889957b52151db Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Thu, 20 Oct 2016 18:05:52 -0700 Subject: src Formatting --- toolsrc/src/commands_hash.cpp | 76 +++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 38 deletions(-) (limited to 'toolsrc/src/commands_hash.cpp') diff --git a/toolsrc/src/commands_hash.cpp b/toolsrc/src/commands_hash.cpp index 20e960d02..07ce9d6e7 100644 --- a/toolsrc/src/commands_hash.cpp +++ b/toolsrc/src/commands_hash.cpp @@ -9,42 +9,42 @@ namespace fs = std::tr2::sys; namespace vcpkg { - void file_hash_sha512(fs::path const & path, std::wstring const & hashType) - { - auto cmd_line = Strings::wformat(LR"(CertUtil.exe -hashfile "%s" %s)", - path.c_str(), hashType.c_str()); - auto ec_data = System::cmd_execute_and_capture_output(cmd_line); - Checks::check_exit(ec_data.exit_code == 0, "Running command:\n %s\n failed", Strings::utf16_to_utf8(cmd_line)); - - std::string const & output = ec_data.output; - - auto start = output.find_first_of("\r\n"); - Checks::check_exit(start != std::string::npos, "Unexpected output format from command: %s", Strings::utf16_to_utf8(cmd_line)); - - auto end = output.find_first_of("\r\n", start + 1); - Checks::check_exit(end != std::string::npos, "Unexpected output format from command: %s", Strings::utf16_to_utf8(cmd_line)); - - auto hash = output.substr(start, end - start); - hash.erase(std::remove_if(hash.begin(), hash.end(), isspace), hash.end()); - System::println(hash.c_str()); - } - - void hash_command(const vcpkg_cmd_arguments& args) - { - static const std::string example = Strings::format( - "The argument should be a file path\n%s", create_example_string("hash boost_1_62_0.tar.bz2")); - args.check_min_arg_count(1, example.c_str()); - args.check_max_arg_count(2, example.c_str()); - - if (args.command_arguments.size() == 1) - { - file_hash_sha512(args.command_arguments[0], L"SHA512"); - } - if (args.command_arguments.size() == 2) - { - file_hash_sha512(args.command_arguments[0], Strings::utf8_to_utf16(args.command_arguments[1])); - } - - exit(EXIT_SUCCESS); - } + void file_hash_sha512(fs::path const& path, std::wstring const& hashType) + { + auto cmd_line = Strings::wformat(LR"(CertUtil.exe -hashfile "%s" %s)", + path.c_str(), hashType.c_str()); + auto ec_data = System::cmd_execute_and_capture_output(cmd_line); + Checks::check_exit(ec_data.exit_code == 0, "Running command:\n %s\n failed", Strings::utf16_to_utf8(cmd_line)); + + std::string const& output = ec_data.output; + + auto start = output.find_first_of("\r\n"); + Checks::check_exit(start != std::string::npos, "Unexpected output format from command: %s", Strings::utf16_to_utf8(cmd_line)); + + auto end = output.find_first_of("\r\n", start + 1); + Checks::check_exit(end != std::string::npos, "Unexpected output format from command: %s", Strings::utf16_to_utf8(cmd_line)); + + auto hash = output.substr(start, end - start); + hash.erase(std::remove_if(hash.begin(), hash.end(), isspace), hash.end()); + System::println(hash.c_str()); + } + + void hash_command(const vcpkg_cmd_arguments& args) + { + static const std::string example = Strings::format( + "The argument should be a file path\n%s", create_example_string("hash boost_1_62_0.tar.bz2")); + args.check_min_arg_count(1, example.c_str()); + args.check_max_arg_count(2, example.c_str()); + + if (args.command_arguments.size() == 1) + { + file_hash_sha512(args.command_arguments[0], L"SHA512"); + } + if (args.command_arguments.size() == 2) + { + file_hash_sha512(args.command_arguments[0], Strings::utf8_to_utf16(args.command_arguments[1])); + } + + exit(EXIT_SUCCESS); + } } -- cgit v1.2.3 From 251b3f03693a2001c0c4e8a5fdca2432e4a037a8 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Thu, 20 Oct 2016 18:11:50 -0700 Subject: Rename function and make it static --- toolsrc/src/commands_hash.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'toolsrc/src/commands_hash.cpp') diff --git a/toolsrc/src/commands_hash.cpp b/toolsrc/src/commands_hash.cpp index 07ce9d6e7..43e9456a7 100644 --- a/toolsrc/src/commands_hash.cpp +++ b/toolsrc/src/commands_hash.cpp @@ -9,7 +9,7 @@ namespace fs = std::tr2::sys; namespace vcpkg { - void file_hash_sha512(fs::path const& path, std::wstring const& hashType) + static void do_file_hash(fs::path const& path, std::wstring const& hashType) { auto cmd_line = Strings::wformat(LR"(CertUtil.exe -hashfile "%s" %s)", path.c_str(), hashType.c_str()); @@ -38,11 +38,11 @@ namespace vcpkg if (args.command_arguments.size() == 1) { - file_hash_sha512(args.command_arguments[0], L"SHA512"); + do_file_hash(args.command_arguments[0], L"SHA512"); } if (args.command_arguments.size() == 2) { - file_hash_sha512(args.command_arguments[0], Strings::utf8_to_utf16(args.command_arguments[1])); + do_file_hash(args.command_arguments[0], Strings::utf8_to_utf16(args.command_arguments[1])); } exit(EXIT_SUCCESS); -- cgit v1.2.3 From 1c37f9981d7f751d67d377bafc209d007a9be4b4 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Thu, 20 Oct 2016 18:12:19 -0700 Subject: Remove unused include directives --- toolsrc/src/commands_hash.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'toolsrc/src/commands_hash.cpp') diff --git a/toolsrc/src/commands_hash.cpp b/toolsrc/src/commands_hash.cpp index 43e9456a7..4b89f2894 100644 --- a/toolsrc/src/commands_hash.cpp +++ b/toolsrc/src/commands_hash.cpp @@ -1,9 +1,5 @@ #include "vcpkg_Commands.h" #include "vcpkg_System.h" -#include "vcpkg.h" -#include -#include -#include namespace fs = std::tr2::sys; -- cgit v1.2.3 From 0042316c4b57cf91ded8e474a8dda354340e7381 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Tue, 29 Nov 2016 18:08:53 -0800 Subject: Introduce filesystem_fs.h --- toolsrc/src/commands_hash.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'toolsrc/src/commands_hash.cpp') diff --git a/toolsrc/src/commands_hash.cpp b/toolsrc/src/commands_hash.cpp index 4b89f2894..17c191b78 100644 --- a/toolsrc/src/commands_hash.cpp +++ b/toolsrc/src/commands_hash.cpp @@ -1,8 +1,6 @@ #include "vcpkg_Commands.h" #include "vcpkg_System.h" -namespace fs = std::tr2::sys; - namespace vcpkg { static void do_file_hash(fs::path const& path, std::wstring const& hashType) -- cgit v1.2.3 From b629cd904440c640b7e5b4c3fdf17df5aac90bad Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Mon, 12 Dec 2016 15:03:36 -0800 Subject: [vcpkg_cmd_arguments] Use std::string instead of char* --- toolsrc/src/commands_hash.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'toolsrc/src/commands_hash.cpp') diff --git a/toolsrc/src/commands_hash.cpp b/toolsrc/src/commands_hash.cpp index 17c191b78..42d1823fa 100644 --- a/toolsrc/src/commands_hash.cpp +++ b/toolsrc/src/commands_hash.cpp @@ -27,8 +27,8 @@ namespace vcpkg { static const std::string example = Strings::format( "The argument should be a file path\n%s", create_example_string("hash boost_1_62_0.tar.bz2")); - args.check_min_arg_count(1, example.c_str()); - args.check_max_arg_count(2, example.c_str()); + args.check_min_arg_count(1, example); + args.check_max_arg_count(2, example); if (args.command_arguments.size() == 1) { -- cgit v1.2.3 From 9796e2532cc34896e38a6c0702e538454ffb5586 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Mon, 12 Dec 2016 15:10:29 -0800 Subject: Use System::println(std::string&) overload --- toolsrc/src/commands_hash.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'toolsrc/src/commands_hash.cpp') diff --git a/toolsrc/src/commands_hash.cpp b/toolsrc/src/commands_hash.cpp index 42d1823fa..0e3e8a77c 100644 --- a/toolsrc/src/commands_hash.cpp +++ b/toolsrc/src/commands_hash.cpp @@ -20,7 +20,7 @@ namespace vcpkg auto hash = output.substr(start, end - start); hash.erase(std::remove_if(hash.begin(), hash.end(), isspace), hash.end()); - System::println(hash.c_str()); + System::println(hash); } void hash_command(const vcpkg_cmd_arguments& args) -- cgit v1.2.3 From df2a05e8546281135c6ea12430734d74371bcf46 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Thu, 12 Jan 2017 17:35:33 -0800 Subject: Introduce Command namespace. Refactoring --- toolsrc/src/commands_hash.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'toolsrc/src/commands_hash.cpp') diff --git a/toolsrc/src/commands_hash.cpp b/toolsrc/src/commands_hash.cpp index 0e3e8a77c..c6827e07a 100644 --- a/toolsrc/src/commands_hash.cpp +++ b/toolsrc/src/commands_hash.cpp @@ -1,7 +1,7 @@ #include "vcpkg_Commands.h" #include "vcpkg_System.h" -namespace vcpkg +namespace vcpkg::Commands { static void do_file_hash(fs::path const& path, std::wstring const& hashType) { @@ -26,7 +26,7 @@ namespace vcpkg void hash_command(const vcpkg_cmd_arguments& args) { static const std::string example = Strings::format( - "The argument should be a file path\n%s", create_example_string("hash boost_1_62_0.tar.bz2")); + "The argument should be a file path\n%s", Commands::Helpers::create_example_string("hash boost_1_62_0.tar.bz2")); args.check_min_arg_count(1, example); args.check_max_arg_count(2, example); -- cgit v1.2.3 From cc8851144a871931b93d84bd962364159ad1c424 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Thu, 12 Jan 2017 22:03:57 -0800 Subject: Reorganize commands, each in its own namespace Additionally, functions related to a command can now live in the same namespace --- toolsrc/src/commands_hash.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'toolsrc/src/commands_hash.cpp') diff --git a/toolsrc/src/commands_hash.cpp b/toolsrc/src/commands_hash.cpp index c6827e07a..7048fb0d9 100644 --- a/toolsrc/src/commands_hash.cpp +++ b/toolsrc/src/commands_hash.cpp @@ -1,7 +1,7 @@ #include "vcpkg_Commands.h" #include "vcpkg_System.h" -namespace vcpkg::Commands +namespace vcpkg::Commands::Hash { static void do_file_hash(fs::path const& path, std::wstring const& hashType) { @@ -23,10 +23,10 @@ namespace vcpkg::Commands System::println(hash); } - void hash_command(const vcpkg_cmd_arguments& args) + void perform_and_exit(const vcpkg_cmd_arguments& args) { static const std::string example = Strings::format( - "The argument should be a file path\n%s", Commands::Helpers::create_example_string("hash boost_1_62_0.tar.bz2")); + "The argument should be a file path\n%s", Commands::Help::create_example_string("hash boost_1_62_0.tar.bz2")); args.check_min_arg_count(1, example); args.check_max_arg_count(2, example); -- cgit v1.2.3 From 050e4a0f7a8156bd862f95c06ea298ab6697e147 Mon Sep 17 00:00:00 2001 From: Alexander Karatarakis Date: Fri, 27 Jan 2017 12:49:09 -0800 Subject: Introduce precompiled headers --- toolsrc/src/commands_hash.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'toolsrc/src/commands_hash.cpp') diff --git a/toolsrc/src/commands_hash.cpp b/toolsrc/src/commands_hash.cpp index 7048fb0d9..4c0028f53 100644 --- a/toolsrc/src/commands_hash.cpp +++ b/toolsrc/src/commands_hash.cpp @@ -1,3 +1,4 @@ +#include "pch.h" #include "vcpkg_Commands.h" #include "vcpkg_System.h" -- cgit v1.2.3