export: Show what output file/files are created

This commit is contained in:
Alexander Karatarakis 2017-04-24 19:02:51 -07:00
parent 7396e4ad63
commit 608ce794ac

View File

@ -15,7 +15,7 @@ namespace vcpkg::Commands::Export
using Dependencies::RequestType; using Dependencies::RequestType;
using Dependencies::ExportPlanType; using Dependencies::ExportPlanType;
static std::string create_nuspec_file_contents(const std::string& exported_dir_filename, const std::string& nuget_id, const std::string& nupkg_version) static std::string create_nuspec_file_contents(const std::string& raw_exported_dir_filename, const std::string& nuget_id, const std::string& nupkg_version)
{ {
static constexpr auto content_template = R"( static constexpr auto content_template = R"(
<package> <package>
@ -28,8 +28,8 @@ namespace vcpkg::Commands::Export
</description> </description>
</metadata> </metadata>
<files> <files>
<file src="@EXPORTED_DIR@\**" target="" /> <file src="@RAW_EXPORTED_DIR@\**" target="" />
<file src="@EXPORTED_DIR@\.vcpkg-root" target="" /> <file src="@RAW_EXPORTED_DIR@\.vcpkg-root" target="" />
<file src="scripts\buildsystems\msbuild\applocal.ps1" target="build\native\applocal.ps1" /> <file src="scripts\buildsystems\msbuild\applocal.ps1" target="build\native\applocal.ps1" />
<file src="scripts\buildsystems\msbuild\vcpkg.targets" target="build\native\@NUGET_ID@.targets" /> <file src="scripts\buildsystems\msbuild\vcpkg.targets" target="build\native\@NUGET_ID@.targets" />
<file src="scripts\buildsystems\vcpkg.cmake" target="build\native\vcpkg.cmake" /> <file src="scripts\buildsystems\vcpkg.cmake" target="build\native\vcpkg.cmake" />
@ -39,7 +39,7 @@ namespace vcpkg::Commands::Export
std::string nuspec_file_content = std::regex_replace(content_template, std::regex("@NUGET_ID@"), nuget_id); std::string nuspec_file_content = std::regex_replace(content_template, std::regex("@NUGET_ID@"), nuget_id);
nuspec_file_content = std::regex_replace(nuspec_file_content, std::regex("@VERSION@"), nupkg_version); nuspec_file_content = std::regex_replace(nuspec_file_content, std::regex("@VERSION@"), nupkg_version);
nuspec_file_content = std::regex_replace(nuspec_file_content, std::regex("@EXPORTED_DIR@"), exported_dir_filename); nuspec_file_content = std::regex_replace(nuspec_file_content, std::regex("@RAW_EXPORTED_DIR@"), raw_exported_dir_filename);
return nuspec_file_content; return nuspec_file_content;
} }
@ -76,29 +76,7 @@ namespace vcpkg::Commands::Export
} }
} }
static void do_nuget_export(const VcpkgPaths& paths, const fs::path& exported_dir_path) static std::string create_export_id()
{
Files::Filesystem& fs = paths.get_filesystem();
const std::string exported_dir_filename = exported_dir_path.filename().string();
const std::string nuget_id = exported_dir_filename;
const std::string nupkg_version = "1.0.0";
const std::string nuspec_file_content = create_nuspec_file_contents(exported_dir_filename, nuget_id, nupkg_version);
const fs::path nuspec_file_path = paths.root / "export.nuspec";
fs.write_contents(nuspec_file_path, nuspec_file_content);
const fs::path& nuget_exe = paths.get_nuget_exe();
// -NoDefaultExcludes is needed for ".vcpkg-root"
const std::wstring cmd_line = Strings::wformat(LR"("%s" pack -OutputDirectory "%s" "%s" -NoDefaultExcludes > nul)", nuget_exe.native(), paths.root.native(), nuspec_file_path.native());
const int exit_code = System::cmd_execute_clean(cmd_line);
Checks::check_exit(VCPKG_LINE_INFO, exit_code == 0, "Error: NuGet package creation failed");
}
static std::string create_exported_dir_filename()
{ {
const tm date_time = System::get_current_date_time(); const tm date_time = System::get_current_date_time();
@ -111,6 +89,31 @@ namespace vcpkg::Commands::Export
return ("vcpkg-exported-" + date_time_as_string); return ("vcpkg-exported-" + date_time_as_string);
} }
static fs::path do_nuget_export(const VcpkgPaths& paths, const fs::path& raw_exported_dir, const fs::path& output_dir)
{
static const std::string NUPKG_VERSION = "1.0.0";
Files::Filesystem& fs = paths.get_filesystem();
const fs::path& nuget_exe = paths.get_nuget_exe();
const std::string filename = raw_exported_dir.filename().string();
const std::string nuget_id = filename;
const std::string nuspec_file_content = create_nuspec_file_contents(filename, nuget_id, NUPKG_VERSION);
const fs::path nuspec_file_path = output_dir / "export.nuspec";
fs.write_contents(nuspec_file_path, nuspec_file_content);
// -NoDefaultExcludes is needed for ".vcpkg-root"
const std::wstring cmd_line = Strings::wformat(LR"("%s" pack -OutputDirectory "%s" "%s" -NoDefaultExcludes > nul)",
nuget_exe.native(), output_dir.native(), nuspec_file_path.native());
const int exit_code = System::cmd_execute_clean(cmd_line);
Checks::check_exit(VCPKG_LINE_INFO, exit_code == 0, "Error: NuGet package creation failed");
const fs::path output_path = output_dir / (nuget_id + ".nupkg");
return output_path;
}
enum class ArchiveFormat enum class ArchiveFormat
{ {
ZIP, ZIP,
@ -143,23 +146,24 @@ namespace vcpkg::Commands::Export
} }
} }
static void do_archive_export(const VcpkgPaths& paths, const fs::path& exported_dir_path, const ArchiveFormat& format) static fs::path do_archive_export(const VcpkgPaths& paths, const fs::path& raw_exported_dir, const fs::path& output_dir, const ArchiveFormat& format)
{ {
const fs::path& cmake_exe = paths.get_cmake_exe();
const std::wstring extension = get_extension(format); const std::wstring extension = get_extension(format);
const std::wstring option = get_option(format); const std::wstring option = get_option(format);
const std::wstring exported_dir_filename = exported_dir_path.filename().native(); const std::wstring exported_dir_filename = raw_exported_dir.filename().native();
const std::wstring exported_archive_filename = Strings::wformat(L"%s.%s", exported_dir_filename, extension); const std::wstring exported_archive_filename = Strings::wformat(L"%s.%s", exported_dir_filename, extension);
const std::wstring exported_archive_path = (paths.root / exported_archive_filename).native(); const fs::path exported_archive_path = (output_dir / exported_archive_filename);
const fs::path& cmake_exe = paths.get_cmake_exe();
// -NoDefaultExcludes is needed for ".vcpkg-root" // -NoDefaultExcludes is needed for ".vcpkg-root"
const std::wstring cmd_line = Strings::wformat(LR"("%s" -E tar "cf" "%s" --format=%s -- "%s")", const std::wstring cmd_line = Strings::wformat(LR"("%s" -E tar "cf" "%s" --format=%s -- "%s")",
cmake_exe.native(), exported_archive_path, option, exported_dir_path.native()); cmake_exe.native(), exported_archive_path.native(), option, raw_exported_dir.native());
const int exit_code = System::cmd_execute_clean(cmd_line); const int exit_code = System::cmd_execute_clean(cmd_line);
Checks::check_exit(VCPKG_LINE_INFO, exit_code == 0, "Error: %s creation failed", exported_dir_path.generic_string()); Checks::check_exit(VCPKG_LINE_INFO, exit_code == 0, "Error: %s creation failed", exported_archive_path.generic_string());
return exported_archive_path;
} }
void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet) void perform_and_exit(const VcpkgCmdArguments& args, const VcpkgPaths& paths, const Triplet& default_triplet)
@ -236,13 +240,14 @@ namespace vcpkg::Commands::Export
Checks::exit_success(VCPKG_LINE_INFO); Checks::exit_success(VCPKG_LINE_INFO);
} }
const std::string exported_dir_filename = create_exported_dir_filename(); const std::string export_id = create_export_id();
Files::Filesystem& fs = paths.get_filesystem(); Files::Filesystem& fs = paths.get_filesystem();
const fs::path exported_dir_path = paths.root / exported_dir_filename; const fs::path export_to_path = paths.root;
const fs::path raw_exported_dir_path = export_to_path / export_id;
std::error_code ec; std::error_code ec;
fs.remove_all(exported_dir_path, ec); fs.remove_all(raw_exported_dir_path, ec);
fs.create_directory(exported_dir_path, ec); fs.create_directory(raw_exported_dir_path, ec);
// execute the plan // execute the plan
for (const ExportPlanAction& action : export_plan) for (const ExportPlanAction& action : export_plan)
@ -257,46 +262,49 @@ namespace vcpkg::Commands::Export
const BinaryParagraph& binary_paragraph = action.any_paragraph.binary_paragraph.value_or_exit(VCPKG_LINE_INFO); const BinaryParagraph& binary_paragraph = action.any_paragraph.binary_paragraph.value_or_exit(VCPKG_LINE_INFO);
const InstallDir dirs = InstallDir::from_destination_root( const InstallDir dirs = InstallDir::from_destination_root(
exported_dir_path / "installed", raw_exported_dir_path / "installed",
action.spec.triplet().to_string(), action.spec.triplet().to_string(),
exported_dir_path / "installed" / "vcpkg" / "info" / (binary_paragraph.fullstem() + ".list")); raw_exported_dir_path / "installed" / "vcpkg" / "info" / (binary_paragraph.fullstem() + ".list"));
Install::install_files_and_write_listfile(paths.get_filesystem(), paths.package_dir(action.spec), dirs); Install::install_files_and_write_listfile(paths.get_filesystem(), paths.package_dir(action.spec), dirs);
System::println(System::Color::success, "Exporting package %s... done", display_name); System::println(System::Color::success, "Exporting package %s... done", display_name);
} }
const fs::path vcpkg_root_file = (exported_dir_path / ".vcpkg-root"); const fs::path vcpkg_root_file = (raw_exported_dir_path / ".vcpkg-root");
fs.write_contents(vcpkg_root_file, ""); fs.write_contents(vcpkg_root_file, "");
if (raw) if (raw)
{ {
System::println(System::Color::success, R"(Files exported at: "%s")", exported_dir_path.generic_string()); System::println(System::Color::success, R"(Files exported at: "%s")", raw_exported_dir_path.generic_string());
} }
if (nuget) if (nuget)
{ {
System::println("Creating nuget file at %s... ", paths.root.generic_string()); System::println("Creating nuget package... ");
do_nuget_export(paths, exported_dir_path); const fs::path output_path = do_nuget_export(paths, raw_exported_dir_path, export_to_path);
System::println(System::Color::success, "Creating nuget file at %s... done", paths.root.generic_string()); System::println(System::Color::success, "Creating nuget package... done");
System::println(System::Color::success, "Nuget package exported at: %s", output_path.generic_string());
} }
if (zip) if (zip)
{ {
System::println("Creating zip file at %s... ", paths.root.generic_string()); System::println("Creating zip archive... ");
do_archive_export(paths, exported_dir_path, ArchiveFormat::ZIP); const fs::path output_path = do_archive_export(paths, raw_exported_dir_path, export_to_path, ArchiveFormat::ZIP);
System::println(System::Color::success, "Creating zip file at %s... done", paths.root.generic_string()); System::println(System::Color::success, "Creating zip archive... done");
System::println(System::Color::success, "Zip archive exported at: %s", output_path.generic_string());
} }
if (_7zip) if (_7zip)
{ {
System::println("Creating 7zip file at %s... ", paths.root.generic_string()); System::println("Creating 7zip archive... ");
do_archive_export(paths, exported_dir_path, ArchiveFormat::_7ZIP); const fs::path output_path = do_archive_export(paths, raw_exported_dir_path, export_to_path, ArchiveFormat::_7ZIP);
System::println(System::Color::success, "Creating 7zip file at %s... done", paths.root.generic_string()); System::println(System::Color::success, "Creating 7zip archive... done");
System::println(System::Color::success, "7zip archive exported at: %s", output_path.generic_string());
} }
if (!raw) if (!raw)
{ {
fs.remove_all(exported_dir_path, ec); fs.remove_all(raw_exported_dir_path, ec);
} }
Checks::exit_success(VCPKG_LINE_INFO); Checks::exit_success(VCPKG_LINE_INFO);