From 9d739cd68576f250ee093eea59d8b38910aaa134 Mon Sep 17 00:00:00 2001 From: Tammy Qiu Date: Fri, 24 Jul 2020 18:25:32 -0400 Subject: [PATCH 1/9] [wasm] Add Timezone data generator as build task --- Directory.Build.props | 2 + eng/testing/tests.mobile.targets | 12 +- src/mono/wasm/Makefile | 8 +- src/mono/wasm/runtime/dotnet.timezones.blat | Bin 635142 -> 0 bytes src/mono/wasm/wasm.targets | 15 +- .../WasmBundleTask/WasmBundleTask.cs | 158 ++++++++++++++++++ .../WasmBundleTask/WasmBundleTask.csproj | 22 +++ tools-local/tasks/tasks.proj | 2 + 8 files changed, 213 insertions(+), 6 deletions(-) delete mode 100644 src/mono/wasm/runtime/dotnet.timezones.blat create mode 100644 tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs create mode 100644 tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.csproj diff --git a/Directory.Build.props b/Directory.Build.props index c4bcb9a625589..8c5f863e5670c 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -51,11 +51,13 @@ $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'AppleAppBuilder', 'Debug', '$(NetCoreAppCurrent)')) $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'AndroidAppBuilder', 'Debug', '$(NetCoreAppCurrent)')) $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'WasmAppBuilder', 'Debug', '$(NetCoreAppCurrent)', 'publish')) + $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'WasmBundleTask', 'Debug', '$(NetCoreAppCurrent)', 'publish')) $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'MonoAOTCompiler', 'Debug', '$(NetCoreAppCurrent)')) $([MSBuild]::NormalizePath('$(AppleAppBuilderDir)', 'AppleAppBuilder.dll')) $([MSBuild]::NormalizePath('$(AndroidAppBuilderDir)', 'AndroidAppBuilder.dll')) $([MSBuild]::NormalizePath('$(WasmAppBuilderDir)', 'WasmAppBuilder.dll')) + $([MSBuild]::NormalizePath('$(WasmBundleTaskDir)', 'WasmBundleTask.dll')) $([MSBuild]::NormalizePath('$(MonoAOTCompilerDir)', 'MonoAOTCompiler.dll')) diff --git a/eng/testing/tests.mobile.targets b/eng/testing/tests.mobile.targets index dc7dd97397e5c..44718e57a0cb6 100644 --- a/eng/testing/tests.mobile.targets +++ b/eng/testing/tests.mobile.targets @@ -171,6 +171,16 @@ AssemblySearchPaths="@(AssemblySearchPaths)"/> + + + + + @@ -186,5 +196,5 @@ + DependsOnTargets="Publish;BundleTestAppleApp;BundleTestAndroidApp;BundleTestWasmApp;BundleWasmTestData;ArchiveTests" /> diff --git a/src/mono/wasm/Makefile b/src/mono/wasm/Makefile index 2562217a9354a..b2cb1e4dec903 100644 --- a/src/mono/wasm/Makefile +++ b/src/mono/wasm/Makefile @@ -17,7 +17,7 @@ NATIVE_DIR?=$(OBJDIR)/native/net5.0-Browser-$(CONFIG)-wasm BUILDS_BIN_DIR?=$(BINDIR)/native/net5.0-Browser-$(CONFIG)-wasm ICU_LIBDIR?= -all: build-native timezone-data icu-data +all: build-native icu-data # # EMSCRIPTEN SETUP @@ -112,9 +112,6 @@ clean: # Helper targets .PHONY: runtime -timezone-data: - cp runtime/dotnet.timezones.blat $(BUILDS_BIN_DIR) - icu-data: cp $(ICU_LIBDIR)/icudt.dat $(BUILDS_BIN_DIR) @@ -130,6 +127,9 @@ test-runner: app-builder: $(DOTNET) build $(TOP)/tools-local/tasks/mobile.tasks/WasmAppBuilder +bundle-task: + $(DOTNET) build $(TOP)/tools-local/tasks/mobile.tasks/WasmBundleTask + run-tests-v8-%: PATH="$(JSVU):$(PATH)" $(DOTNET) build $(TOP)/src/libraries/$*/tests/ /t:Test /p:TargetOS=Browser /p:TargetArchitecture=wasm /p:Configuration=$(CONFIG) /p:JSEngine=V8 $(MSBUILD_ARGS) run-tests-sm-%: diff --git a/src/mono/wasm/runtime/dotnet.timezones.blat b/src/mono/wasm/runtime/dotnet.timezones.blat deleted file mode 100644 index 30b4d13614ef256ef711e7eb2c6bfa04f7acbec3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 635142 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

*xTYxRCqzV)MbCHm3368)%r3ya}zd}r(` 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 diff --git a/src/mono/wasm/wasm.targets b/src/mono/wasm/wasm.targets index be87c207b15d6..7c701ce9b0891 100644 --- a/src/mono/wasm/wasm.targets +++ b/src/mono/wasm/wasm.targets @@ -11,6 +11,8 @@ + + $(ArtifactsObjDir)wasm\pinvoke-table.h @@ -32,9 +34,20 @@ OutputPath="$(WasmPInvokeTablePath)" /> + + + $(NativeBinDir)dotnet.timezones.blat + + + + + DependsOnTargets="BuildPInvokeTable;BundleWasm"> diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs new file mode 100644 index 0000000000000..321d71d7a0360 --- /dev/null +++ b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs @@ -0,0 +1,158 @@ +using System; +using System.Buffers.Binary; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.Json; +using System.Linq; +using System.Text.RegularExpressions; +using System.Net; +using System.Reflection; +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; +using System.Diagnostics; + +public class WasmBundleTask : Task +{ + public string? InputDirectory { get; set; } + public string? OutputDirectory { get; set; } + public string? Type { get; set; } + public string? FileName { get; set; } + + private (byte[] json_bytes, MemoryStream stream) enumerateData (string[] sub_folders, string output_folder) { + var indices = new List(); + var stream = new MemoryStream(); + + foreach (var folder in sub_folders) + { + var path = Path.Combine(output_folder, folder); + if (folder == "zone1970.tab") { + var fileInfo = new FileInfo(path); + indices.Add(new object[] { "zone.tab", fileInfo.Length}); + string[] systemtz = { "America/Los_Angeles", "Australia/Sydney", "Europe/London", "Pacific/Tongatapu", + "America/Sao_Paulo", "Australia/Perth", "Africa/Nairobi", "Europe/Berlin", + "Europe/Moscow", "Africa/Tripoli", "America/Argentina/Catamarca", "Europe/Lisbon", + "America/St_Johns"}; + using (var readStream = fileInfo.OpenRead()) + using (StreamReader sr = new StreamReader(readStream)) + using (MemoryStream ms = new MemoryStream()) + using (StreamWriter ws = new StreamWriter(ms)){ + string? line; + while ((line = sr.ReadLine()) != null) { + if (systemtz.Any(x => Regex.IsMatch(line, $@"\b{x}\b"))) { + ws.WriteLine(line); + } + } + ws.Flush(); + ms.Position = 0; + ms.CopyTo(stream); + } + } else { + var directoryInfo = new DirectoryInfo(path); + foreach (var entry in directoryInfo.EnumerateFiles("*", SearchOption.AllDirectories)) + { + var relativePath = entry.FullName.Substring(output_folder.Length).Trim('/'); + indices.Add(new object[] { relativePath, entry.Length}); + + using (var readStream = entry.OpenRead()) + readStream.CopyTo(stream); + } + } + } + + stream.Position = 0; + var options = new JsonSerializerOptions + { + WriteIndented = false + }; + + var jsonBytes = JsonSerializer.SerializeToUtf8Bytes(indices); + + return (jsonBytes, stream); + } + + private (byte[] json_bytes, MemoryStream stream) readTimeZone (string folder) { + // https://en.wikipedia.org/wiki/Tz_database#Area + var areas = new[] { "Africa", "America", "Antarctica", "Arctic", "Asia", "Atlantic", "Australia", "Europe", "Indian", "Pacific", "zone1970.tab"}; + + return enumerateData (areas, folder); + } + + private (byte[] json_bytes, MemoryStream stream) readGeneralData (string input_folder) { + var DirectoryInfo = new DirectoryInfo (input_folder); + string[] sub_folders = DirectoryInfo.EnumerateFileSystemInfos().Select(f => f.Name).ToArray(); + + return enumerateData (sub_folders, input_folder); + } + + private void DownloadTimeZoneData (string input_folder, string output_folder) { + using (var client = new WebClient()) + { + client.DownloadFile("https://data.iana.org/time-zones/tzdata-latest.tar.gz", $"{input_folder}/tzdata.tar.gz"); + } + + string[] files = {"africa", "antarctica", "asia", "australasia", "etcetera", "europe", "northamerica", "southamerica"}; + + using (Process process = new Process()) { + process.StartInfo.UseShellExecute = false; + process.StartInfo.FileName = "tar"; + process.StartInfo.Arguments = $"xvzf \"{input_folder}/tzdata.tar.gz\" -C \"{input_folder}\""; + process.Start(); + process.WaitForExit(); + + process.StartInfo.FileName = "zic"; + foreach (var f in files) { + process.StartInfo.Arguments = $"-d \"{output_folder}\" \"{input_folder}/{f}\""; + process.Start(); + process.WaitForExit(); + } + } + File.Copy(Path.Combine(input_folder,"zone1970.tab"), Path.Combine(output_folder,"zone1970.tab")); + } + + public override bool Execute () + { + (byte[] json_bytes, MemoryStream stream) data; + + if (OutputDirectory == null) + { + OutputDirectory = Path.Combine(Directory.GetCurrentDirectory(), "obj", "data", "output"); + } + Directory.CreateDirectory(OutputDirectory); + + if (InputDirectory == null) { + InputDirectory = Path.Combine(Directory.GetCurrentDirectory(), "obj", "data", "input"); + } + Directory.CreateDirectory(InputDirectory); + + if (Type == "timezone") { + DownloadTimeZoneData (InputDirectory, OutputDirectory); + data = readTimeZone (OutputDirectory); + } + else { + data = readGeneralData (InputDirectory); + } + + if (FileName == null) { + throw new ArgumentException($"Invalid file name"); + } + using (var file = File.OpenWrite(FileName)) + { + var jsonBytes = data.json_bytes; + var stream = data.stream; + var bytes = new byte[4]; + var magicBytes = Encoding.ASCII.GetBytes("talb"); + BinaryPrimitives.WriteInt32LittleEndian(bytes, jsonBytes.Length); + file.Write(magicBytes); + file.Write(bytes); + file.Write(jsonBytes); + + stream.CopyTo(file); + } + Directory.Delete(InputDirectory, true); + Directory.Delete(OutputDirectory, true); + + return true; + } +} + diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.csproj b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.csproj new file mode 100644 index 0000000000000..33e146c8562e3 --- /dev/null +++ b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.csproj @@ -0,0 +1,22 @@ + + + $(NetCoreAppCurrent) + Library + false + enable + + + + + + + + + + + + + + diff --git a/tools-local/tasks/tasks.proj b/tools-local/tasks/tasks.proj index a81e2f9590eb6..efd0d1b397c92 100644 --- a/tools-local/tasks/tasks.proj +++ b/tools-local/tasks/tasks.proj @@ -7,6 +7,8 @@ Condition="'$(TargetOS)' != 'iOS' and '$(TargetOS)' != 'tvOS'" /> + From d4ba94001a456b629e064f8023871c978e7087bb Mon Sep 17 00:00:00 2001 From: Tammy Qiu Date: Mon, 27 Jul 2020 14:14:44 -0400 Subject: [PATCH 2/9] Incorporate PR feedback (style) --- src/mono/wasm/wasm.targets | 20 +++++++------- .../WasmBundleTask/WasmBundleTask.cs | 26 +++++++++---------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/mono/wasm/wasm.targets b/src/mono/wasm/wasm.targets index 7c701ce9b0891..ff68d705a7322 100644 --- a/src/mono/wasm/wasm.targets +++ b/src/mono/wasm/wasm.targets @@ -11,8 +11,6 @@ - - $(ArtifactsObjDir)wasm\pinvoke-table.h @@ -22,13 +20,16 @@ - - + + + + + - + @@ -36,18 +37,19 @@ - $(NativeBinDir)dotnet.timezones.blat + $(NativeBinDir)dotnet.timezones.blat + FileName="$(TimeZonesDataPath)" /> + + DependsOnTargets="BuildPInvokeTable"> diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs index 321d71d7a0360..735707f9620de 100644 --- a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs +++ b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs @@ -19,7 +19,7 @@ public class WasmBundleTask : Task public string? Type { get; set; } public string? FileName { get; set; } - private (byte[] json_bytes, MemoryStream stream) enumerateData (string[] sub_folders, string output_folder) { + private (byte[] json_bytes, MemoryStream stream) EnumerateData(string[] sub_folders, string output_folder) { var indices = new List(); var stream = new MemoryStream(); @@ -28,7 +28,7 @@ public class WasmBundleTask : Task var path = Path.Combine(output_folder, folder); if (folder == "zone1970.tab") { var fileInfo = new FileInfo(path); - indices.Add(new object[] { "zone.tab", fileInfo.Length}); + indices.Add(new object[] { "zone.tab", fileInfo.Length }); string[] systemtz = { "America/Los_Angeles", "Australia/Sydney", "Europe/London", "Pacific/Tongatapu", "America/Sao_Paulo", "Australia/Perth", "Africa/Nairobi", "Europe/Berlin", "Europe/Moscow", "Africa/Tripoli", "America/Argentina/Catamarca", "Europe/Lisbon", @@ -52,7 +52,7 @@ public class WasmBundleTask : Task foreach (var entry in directoryInfo.EnumerateFiles("*", SearchOption.AllDirectories)) { var relativePath = entry.FullName.Substring(output_folder.Length).Trim('/'); - indices.Add(new object[] { relativePath, entry.Length}); + indices.Add(new object[] { relativePath, entry.Length }); using (var readStream = entry.OpenRead()) readStream.CopyTo(stream); @@ -71,21 +71,21 @@ public class WasmBundleTask : Task return (jsonBytes, stream); } - private (byte[] json_bytes, MemoryStream stream) readTimeZone (string folder) { + private (byte[] json_bytes, MemoryStream stream) ReadTimeZone(string folder) { // https://en.wikipedia.org/wiki/Tz_database#Area var areas = new[] { "Africa", "America", "Antarctica", "Arctic", "Asia", "Atlantic", "Australia", "Europe", "Indian", "Pacific", "zone1970.tab"}; - return enumerateData (areas, folder); + return EnumerateData(areas, folder); } - private (byte[] json_bytes, MemoryStream stream) readGeneralData (string input_folder) { - var DirectoryInfo = new DirectoryInfo (input_folder); + private (byte[] json_bytes, MemoryStream stream) ReadGeneralData(string input_folder) { + var DirectoryInfo = new DirectoryInfo(input_folder); string[] sub_folders = DirectoryInfo.EnumerateFileSystemInfos().Select(f => f.Name).ToArray(); - return enumerateData (sub_folders, input_folder); + return EnumerateData(sub_folders, input_folder); } - private void DownloadTimeZoneData (string input_folder, string output_folder) { + private void DownloadTimeZoneData(string input_folder, string output_folder) { using (var client = new WebClient()) { client.DownloadFile("https://data.iana.org/time-zones/tzdata-latest.tar.gz", $"{input_folder}/tzdata.tar.gz"); @@ -110,7 +110,7 @@ private void DownloadTimeZoneData (string input_folder, string output_folder) { File.Copy(Path.Combine(input_folder,"zone1970.tab"), Path.Combine(output_folder,"zone1970.tab")); } - public override bool Execute () + public override bool Execute() { (byte[] json_bytes, MemoryStream stream) data; @@ -126,11 +126,11 @@ public override bool Execute () Directory.CreateDirectory(InputDirectory); if (Type == "timezone") { - DownloadTimeZoneData (InputDirectory, OutputDirectory); - data = readTimeZone (OutputDirectory); + DownloadTimeZoneData(InputDirectory, OutputDirectory); + data = ReadTimeZone(OutputDirectory); } else { - data = readGeneralData (InputDirectory); + data = ReadGeneralData(InputDirectory); } if (FileName == null) { From 99326002425974cb7460ede910a49790a520d53c Mon Sep 17 00:00:00 2001 From: Tammy Qiu Date: Wed, 5 Aug 2020 14:12:34 -0400 Subject: [PATCH 3/9] Split bundler task into timezone specific + general data bundling --- eng/testing/tests.mobile.targets | 17 ++- src/mono/wasm/wasm.targets | 17 ++- .../WasmBundleTask/TimeZoneLoader.cs | 97 ++++++++++++++ .../WasmBundleTask/WasmBundleTask.cs | 118 +++--------------- .../WasmBundleTask/WasmBundleTask.csproj | 1 + 5 files changed, 139 insertions(+), 111 deletions(-) create mode 100644 tools-local/tasks/mobile.tasks/WasmBundleTask/TimeZoneLoader.cs diff --git a/eng/testing/tests.mobile.targets b/eng/testing/tests.mobile.targets index ed6229309b108..c877811d555ea 100644 --- a/eng/testing/tests.mobile.targets +++ b/eng/testing/tests.mobile.targets @@ -162,14 +162,21 @@ AssemblySearchPaths="@(AssemblySearchPaths)" /> + + + + + - + + InputDirectory="$(BundleDir)obj/data/output" + FileName="$(MicrosoftNetCoreAppRuntimePackRidDir)dotnet.timezones.blat" + AppDir="$(BundleDir)"/> - + + + + + + + $(NativeBinDir)dotnet.timezones.blat + DependsOnTargets="BuildPInvokeTable;BundleWasm"> diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/TimeZoneLoader.cs b/tools-local/tasks/mobile.tasks/WasmBundleTask/TimeZoneLoader.cs new file mode 100644 index 0000000000000..7156bc16c297d --- /dev/null +++ b/tools-local/tasks/mobile.tasks/WasmBundleTask/TimeZoneLoader.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Linq; +using System.Text.RegularExpressions; +using System.Net; +using System.Reflection; +using System.Diagnostics; +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; + +public class TimeZoneLoader : Task +{ + public string? InputDirectory { get; set; } + public string? OutputDirectory { get; set; } + + private void DownloadTimeZoneData() { + using (var client = new WebClient()) + { + client.DownloadFile("https://data.iana.org/time-zones/tzdata-latest.tar.gz", $"{InputDirectory}/tzdata.tar.gz"); + } + + string[] files = {"africa", "antarctica", "asia", "australasia", "etcetera", "europe", "northamerica", "southamerica"}; + + using (Process process = new Process()) { + process.StartInfo.UseShellExecute = false; + process.StartInfo.FileName = "tar"; + process.StartInfo.Arguments = $"xvzf \"{InputDirectory}/tzdata.tar.gz\" -C \"{InputDirectory}\""; + process.Start(); + process.WaitForExit(); + + process.StartInfo.FileName = "zic"; + foreach (var f in files) { + process.StartInfo.Arguments = $"-d \"{OutputDirectory}\" \"{InputDirectory}/{f}\""; + process.Start(); + process.WaitForExit(); + } + } + File.Copy(Path.Combine(InputDirectory!,"zone1970.tab"), Path.Combine(OutputDirectory!,"zone1970.tab")); + } + + private void FilterTimeZoneData(string[] areas) { + var directoryInfo = new DirectoryInfo (OutputDirectory!); + foreach (var entry in directoryInfo.EnumerateDirectories()) { + if (Array.IndexOf(areas, entry.Name) == -1) { + Directory.Delete(entry.FullName, true); + } + } + } + + private void FilterZoneTab(string[] filters) { + var oldPath = Path.Combine(OutputDirectory!, "zone1970.tab"); + var path = Path.Combine(OutputDirectory!, "zone.tab"); + var fileInfo = new FileInfo(oldPath); + using (var readStream = fileInfo.OpenRead()) + using (StreamReader sr = new StreamReader(readStream)) + using (FileStream fs = File.OpenWrite(path)) + using (StreamWriter sw = new StreamWriter(fs)){ + string? line; + while ((line = sr.ReadLine()) != null) { + if (filters.Any(x => Regex.IsMatch(line, $@"\b{x}\b"))) { + sw.WriteLine(line); + } + } + } + File.Delete(oldPath); + } + + public override bool Execute() { + if (InputDirectory == null) { + InputDirectory = Path.Combine(Directory.GetCurrentDirectory(), "obj", "data", "input"); + } + Directory.CreateDirectory(InputDirectory); + + if (OutputDirectory == null) { + OutputDirectory = Path.Combine(Directory.GetCurrentDirectory(), "obj", "data", "output"); + } + Directory.CreateDirectory(OutputDirectory); + + DownloadTimeZoneData(); + + string[] areas = new string[] { "Africa", "America", "Antarctica", "Arctic", "Asia", "Atlantic", "Australia", "Europe", "Indian", "Pacific", "zone1970.tab"}; + + string[] filtered = new string[] { "America/Los_Angeles", "Australia/Sydney", "Europe/London", "Pacific/Tongatapu", + "America/Sao_Paulo", "Australia/Perth", "Africa/Nairobi", "Europe/Berlin", + "Europe/Moscow", "Africa/Tripoli", "America/Argentina/Catamarca", "Europe/Lisbon", + "America/St_Johns"}; + + FilterTimeZoneData(areas); + FilterZoneTab(filtered); + + return true; + } +} \ No newline at end of file diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs index 735707f9620de..0ad3ce46c0505 100644 --- a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs +++ b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs @@ -4,134 +4,52 @@ using System.IO; using System.Text; using System.Text.Json; +using System.Text.Json.Serialization; using System.Linq; using System.Text.RegularExpressions; using System.Net; using System.Reflection; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; -using System.Diagnostics; + public class WasmBundleTask : Task { + [Required] + public string? AppDir { get; set; } public string? InputDirectory { get; set; } - public string? OutputDirectory { get; set; } - public string? Type { get; set; } public string? FileName { get; set; } - private (byte[] json_bytes, MemoryStream stream) EnumerateData(string[] sub_folders, string output_folder) { + private (byte[] json_bytes, MemoryStream stream) EnumerateData() { var indices = new List(); var stream = new MemoryStream(); + + var directoryInfo = new DirectoryInfo(InputDirectory!); + + foreach (var entry in directoryInfo.EnumerateFiles("*", SearchOption.AllDirectories)) { + + var relativePath = entry.FullName.Substring(InputDirectory!.Length).Trim('/'); + indices.Add(new object[] { relativePath, entry.Length }); - foreach (var folder in sub_folders) - { - var path = Path.Combine(output_folder, folder); - if (folder == "zone1970.tab") { - var fileInfo = new FileInfo(path); - indices.Add(new object[] { "zone.tab", fileInfo.Length }); - string[] systemtz = { "America/Los_Angeles", "Australia/Sydney", "Europe/London", "Pacific/Tongatapu", - "America/Sao_Paulo", "Australia/Perth", "Africa/Nairobi", "Europe/Berlin", - "Europe/Moscow", "Africa/Tripoli", "America/Argentina/Catamarca", "Europe/Lisbon", - "America/St_Johns"}; - using (var readStream = fileInfo.OpenRead()) - using (StreamReader sr = new StreamReader(readStream)) - using (MemoryStream ms = new MemoryStream()) - using (StreamWriter ws = new StreamWriter(ms)){ - string? line; - while ((line = sr.ReadLine()) != null) { - if (systemtz.Any(x => Regex.IsMatch(line, $@"\b{x}\b"))) { - ws.WriteLine(line); - } - } - ws.Flush(); - ms.Position = 0; - ms.CopyTo(stream); - } - } else { - var directoryInfo = new DirectoryInfo(path); - foreach (var entry in directoryInfo.EnumerateFiles("*", SearchOption.AllDirectories)) - { - var relativePath = entry.FullName.Substring(output_folder.Length).Trim('/'); - indices.Add(new object[] { relativePath, entry.Length }); - - using (var readStream = entry.OpenRead()) - readStream.CopyTo(stream); - } - } + using (var readStream = entry.OpenRead()) + readStream.CopyTo(stream); } stream.Position = 0; - var options = new JsonSerializerOptions - { - WriteIndented = false - }; - var jsonBytes = JsonSerializer.SerializeToUtf8Bytes(indices); return (jsonBytes, stream); } - private (byte[] json_bytes, MemoryStream stream) ReadTimeZone(string folder) { - // https://en.wikipedia.org/wiki/Tz_database#Area - var areas = new[] { "Africa", "America", "Antarctica", "Arctic", "Asia", "Atlantic", "Australia", "Europe", "Indian", "Pacific", "zone1970.tab"}; - - return EnumerateData(areas, folder); - } - - private (byte[] json_bytes, MemoryStream stream) ReadGeneralData(string input_folder) { - var DirectoryInfo = new DirectoryInfo(input_folder); - string[] sub_folders = DirectoryInfo.EnumerateFileSystemInfos().Select(f => f.Name).ToArray(); - - return EnumerateData(sub_folders, input_folder); - } - - private void DownloadTimeZoneData(string input_folder, string output_folder) { - using (var client = new WebClient()) - { - client.DownloadFile("https://data.iana.org/time-zones/tzdata-latest.tar.gz", $"{input_folder}/tzdata.tar.gz"); - } - - string[] files = {"africa", "antarctica", "asia", "australasia", "etcetera", "europe", "northamerica", "southamerica"}; - - using (Process process = new Process()) { - process.StartInfo.UseShellExecute = false; - process.StartInfo.FileName = "tar"; - process.StartInfo.Arguments = $"xvzf \"{input_folder}/tzdata.tar.gz\" -C \"{input_folder}\""; - process.Start(); - process.WaitForExit(); - - process.StartInfo.FileName = "zic"; - foreach (var f in files) { - process.StartInfo.Arguments = $"-d \"{output_folder}\" \"{input_folder}/{f}\""; - process.Start(); - process.WaitForExit(); - } - } - File.Copy(Path.Combine(input_folder,"zone1970.tab"), Path.Combine(output_folder,"zone1970.tab")); - } - public override bool Execute() { (byte[] json_bytes, MemoryStream stream) data; - - if (OutputDirectory == null) - { - OutputDirectory = Path.Combine(Directory.GetCurrentDirectory(), "obj", "data", "output"); - } - Directory.CreateDirectory(OutputDirectory); if (InputDirectory == null) { - InputDirectory = Path.Combine(Directory.GetCurrentDirectory(), "obj", "data", "input"); - } - Directory.CreateDirectory(InputDirectory); - - if (Type == "timezone") { - DownloadTimeZoneData(InputDirectory, OutputDirectory); - data = ReadTimeZone(OutputDirectory); - } - else { - data = ReadGeneralData(InputDirectory); + throw new ArgumentException("Input directory doesn't exist."); } + + data = EnumerateData(); if (FileName == null) { throw new ArgumentException($"Invalid file name"); @@ -149,8 +67,6 @@ public override bool Execute() stream.CopyTo(file); } - Directory.Delete(InputDirectory, true); - Directory.Delete(OutputDirectory, true); return true; } diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.csproj b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.csproj index 33e146c8562e3..b8a2081d8e32d 100644 --- a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.csproj +++ b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.csproj @@ -13,6 +13,7 @@ + From d93236b0f01a6c3e2fc71a99d73e73e9e64ace4d Mon Sep 17 00:00:00 2001 From: Tammy Qiu Date: Thu, 6 Aug 2020 15:51:30 -0400 Subject: [PATCH 4/9] Move tzdb version outside into task parameter --- eng/testing/tests.mobile.targets | 6 +++--- src/mono/wasm/wasm.targets | 4 ++-- .../mobile.tasks/WasmBundleTask/TimeZoneLoader.cs | 13 ++++++------- .../mobile.tasks/WasmBundleTask/WasmBundleTask.cs | 4 +--- 4 files changed, 12 insertions(+), 15 deletions(-) diff --git a/eng/testing/tests.mobile.targets b/eng/testing/tests.mobile.targets index c877811d555ea..c4798fc48c147 100644 --- a/eng/testing/tests.mobile.targets +++ b/eng/testing/tests.mobile.targets @@ -167,7 +167,8 @@ + OutputDirectory="$(BundleDir)obj/data/output" + Version="2020a"/> + FileName="$(MicrosoftNetCoreAppRuntimePackRidDir)dotnet.timezones.blat" /> + OutputDirectory="$(ArtifactsObjDir)wasm/data/output" + Version="2020a" /> @@ -49,7 +50,6 @@ diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/TimeZoneLoader.cs b/tools-local/tasks/mobile.tasks/WasmBundleTask/TimeZoneLoader.cs index 7156bc16c297d..1c1be207f0d1c 100644 --- a/tools-local/tasks/mobile.tasks/WasmBundleTask/TimeZoneLoader.cs +++ b/tools-local/tasks/mobile.tasks/WasmBundleTask/TimeZoneLoader.cs @@ -16,22 +16,21 @@ public class TimeZoneLoader : Task { public string? InputDirectory { get; set; } public string? OutputDirectory { get; set; } + public string? Version { get; set; } private void DownloadTimeZoneData() { + List files = new List() {"africa", "antarctica", "asia", "australasia", "etcetera", "europe", "northamerica", "southamerica", "zone1970.tab"}; using (var client = new WebClient()) { - client.DownloadFile("https://data.iana.org/time-zones/tzdata-latest.tar.gz", $"{InputDirectory}/tzdata.tar.gz"); + foreach (var file in files) { + client.DownloadFile($"https://data.iana.org/time-zones/tzdb-{Version}/{file}", $"{InputDirectory}/{file}"); + } } - string[] files = {"africa", "antarctica", "asia", "australasia", "etcetera", "europe", "northamerica", "southamerica"}; + files.Remove("zone1970.tab"); using (Process process = new Process()) { process.StartInfo.UseShellExecute = false; - process.StartInfo.FileName = "tar"; - process.StartInfo.Arguments = $"xvzf \"{InputDirectory}/tzdata.tar.gz\" -C \"{InputDirectory}\""; - process.Start(); - process.WaitForExit(); - process.StartInfo.FileName = "zic"; foreach (var f in files) { process.StartInfo.Arguments = $"-d \"{OutputDirectory}\" \"{InputDirectory}/{f}\""; diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs index 0ad3ce46c0505..a3f680432f450 100644 --- a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs +++ b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs @@ -15,8 +15,6 @@ public class WasmBundleTask : Task { - [Required] - public string? AppDir { get; set; } public string? InputDirectory { get; set; } public string? FileName { get; set; } @@ -27,7 +25,7 @@ public class WasmBundleTask : Task var directoryInfo = new DirectoryInfo(InputDirectory!); foreach (var entry in directoryInfo.EnumerateFiles("*", SearchOption.AllDirectories)) { - + var relativePath = entry.FullName.Substring(InputDirectory!.Length).Trim('/'); indices.Add(new object[] { relativePath, entry.Length }); From 486c18bd61b06210f10d59521ea5061b8dbd003f Mon Sep 17 00:00:00 2001 From: Tammy Qiu Date: Fri, 7 Aug 2020 15:14:41 -0400 Subject: [PATCH 5/9] Change fileshare mode to ReadWrite for dotnet.timezones.blat --- tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs index a3f680432f450..eb2415cccd6aa 100644 --- a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs +++ b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs @@ -52,7 +52,7 @@ public override bool Execute() if (FileName == null) { throw new ArgumentException($"Invalid file name"); } - using (var file = File.OpenWrite(FileName)) + using (var file = File.Open(FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { var jsonBytes = data.json_bytes; var stream = data.stream; From 2495afe9ec95baea848e9c88b6b22a419a090552 Mon Sep 17 00:00:00 2001 From: Tammy Qiu Date: Mon, 10 Aug 2020 15:29:59 -0400 Subject: [PATCH 6/9] Incorporate PR feedback (style and naming) --- eng/testing/tests.mobile.targets | 5 +- .../WasmBundleTask/TimeZoneLoader.cs | 60 +++++++++++-------- .../WasmBundleTask/WasmBundleTask.cs | 26 ++++---- 3 files changed, 54 insertions(+), 37 deletions(-) diff --git a/eng/testing/tests.mobile.targets b/eng/testing/tests.mobile.targets index c4798fc48c147..9f4ca7030ec84 100644 --- a/eng/testing/tests.mobile.targets +++ b/eng/testing/tests.mobile.targets @@ -165,10 +165,13 @@ + + 2020a + + Version="$(TimeZoneDataVersion)"/> files = new List() {"africa", "antarctica", "asia", "australasia", "etcetera", "europe", "northamerica", "southamerica", "zone1970.tab"}; using (var client = new WebClient()) { - foreach (var file in files) { - client.DownloadFile($"https://data.iana.org/time-zones/tzdb-{Version}/{file}", $"{InputDirectory}/{file}"); + foreach (var file in files) + { + client.DownloadFile($"https://data.iana.org/time-zones/tzdb-{Version}/{file}", $"{Path.Combine(InputDirectory!, file)}"); } } files.Remove("zone1970.tab"); - using (Process process = new Process()) { + using (Process process = new Process()) + { process.StartInfo.UseShellExecute = false; process.StartInfo.FileName = "zic"; - foreach (var f in files) { - process.StartInfo.Arguments = $"-d \"{OutputDirectory}\" \"{InputDirectory}/{f}\""; + foreach (var f in files) + { + process.StartInfo.Arguments = $"-d \"{OutputDirectory}\" \"{Path.Combine(InputDirectory!, f)}\""; process.Start(); process.WaitForExit(); } @@ -41,26 +50,29 @@ private void DownloadTimeZoneData() { File.Copy(Path.Combine(InputDirectory!,"zone1970.tab"), Path.Combine(OutputDirectory!,"zone1970.tab")); } - private void FilterTimeZoneData(string[] areas) { + private void FilterTimeZoneData(string[] areas) + { var directoryInfo = new DirectoryInfo (OutputDirectory!); - foreach (var entry in directoryInfo.EnumerateDirectories()) { - if (Array.IndexOf(areas, entry.Name) == -1) { + foreach (var entry in directoryInfo.EnumerateDirectories()) + { + if (Array.IndexOf(areas, entry.Name) == -1) + { Directory.Delete(entry.FullName, true); } } } - private void FilterZoneTab(string[] filters) { + private void FilterZoneTab(string[] filters) + { var oldPath = Path.Combine(OutputDirectory!, "zone1970.tab"); var path = Path.Combine(OutputDirectory!, "zone.tab"); - var fileInfo = new FileInfo(oldPath); - using (var readStream = fileInfo.OpenRead()) - using (StreamReader sr = new StreamReader(readStream)) - using (FileStream fs = File.OpenWrite(path)) - using (StreamWriter sw = new StreamWriter(fs)){ + using (StreamReader sr = new StreamReader(oldPath)) + using (StreamWriter sw = new StreamWriter(path)) + { string? line; while ((line = sr.ReadLine()) != null) { - if (filters.Any(x => Regex.IsMatch(line, $@"\b{x}\b"))) { + if (filters.Any(x => Regex.IsMatch(line, $@"\b{x}\b"))) + { sw.WriteLine(line); } } @@ -68,16 +80,14 @@ private void FilterZoneTab(string[] filters) { File.Delete(oldPath); } - public override bool Execute() { - if (InputDirectory == null) { - InputDirectory = Path.Combine(Directory.GetCurrentDirectory(), "obj", "data", "input"); - } - Directory.CreateDirectory(InputDirectory); + public override bool Execute() + { - if (OutputDirectory == null) { - OutputDirectory = Path.Combine(Directory.GetCurrentDirectory(), "obj", "data", "output"); - } - Directory.CreateDirectory(OutputDirectory); + if (!Directory.Exists(InputDirectory)) + Directory.CreateDirectory(InputDirectory!); + + if (!Directory.Exists(OutputDirectory)) + Directory.CreateDirectory(OutputDirectory!); DownloadTimeZoneData(); diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs index eb2415cccd6aa..0a57c503df0e3 100644 --- a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs +++ b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs @@ -12,21 +12,25 @@ using Microsoft.Build.Framework; using Microsoft.Build.Utilities; - public class WasmBundleTask : Task { + [Required] public string? InputDirectory { get; set; } + + [Required] public string? FileName { get; set; } - private (byte[] json_bytes, MemoryStream stream) EnumerateData() { + private (byte[] json_bytes, MemoryStream stream) EnumerateData() + { var indices = new List(); var stream = new MemoryStream(); var directoryInfo = new DirectoryInfo(InputDirectory!); - foreach (var entry in directoryInfo.EnumerateFiles("*", SearchOption.AllDirectories)) { + foreach (var entry in directoryInfo.EnumerateFiles("*", SearchOption.AllDirectories)) + { - var relativePath = entry.FullName.Substring(InputDirectory!.Length).Trim('/'); + var relativePath = Path.GetRelativePath(InputDirectory!, entry.FullName); indices.Add(new object[] { relativePath, entry.Length }); using (var readStream = entry.OpenRead()) @@ -43,27 +47,27 @@ public override bool Execute() { (byte[] json_bytes, MemoryStream stream) data; - if (InputDirectory == null) { + if (InputDirectory == null) + { throw new ArgumentException("Input directory doesn't exist."); } data = EnumerateData(); - if (FileName == null) { + if (FileName == null) + { throw new ArgumentException($"Invalid file name"); } using (var file = File.Open(FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { - var jsonBytes = data.json_bytes; - var stream = data.stream; var bytes = new byte[4]; var magicBytes = Encoding.ASCII.GetBytes("talb"); - BinaryPrimitives.WriteInt32LittleEndian(bytes, jsonBytes.Length); + BinaryPrimitives.WriteInt32LittleEndian(bytes, data.json_bytes.Length); file.Write(magicBytes); file.Write(bytes); - file.Write(jsonBytes); + file.Write(data.json_bytes); - stream.CopyTo(file); + data.stream.CopyTo(file); } return true; From 590dc5407d49038a13ec85db2f09d50633e7d323 Mon Sep 17 00:00:00 2001 From: Tammy Qiu Date: Wed, 12 Aug 2020 13:17:08 -0400 Subject: [PATCH 7/9] More PR feedback --- src/mono/wasm/wasm.targets | 8 ++++---- .../WasmBundleTask/TimeZoneLoader.cs | 16 ++++++---------- .../WasmBundleTask/WasmBundleTask.cs | 18 +++++++----------- .../WasmBundleTask/WasmBundleTask.csproj | 6 ------ 4 files changed, 17 insertions(+), 31 deletions(-) diff --git a/src/mono/wasm/wasm.targets b/src/mono/wasm/wasm.targets index 740222cbb848c..1478492a09199 100644 --- a/src/mono/wasm/wasm.targets +++ b/src/mono/wasm/wasm.targets @@ -37,10 +37,10 @@ - + diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/TimeZoneLoader.cs b/tools-local/tasks/mobile.tasks/WasmBundleTask/TimeZoneLoader.cs index 81d1e7d98de87..a90f7d5432ba9 100644 --- a/tools-local/tasks/mobile.tasks/WasmBundleTask/TimeZoneLoader.cs +++ b/tools-local/tasks/mobile.tasks/WasmBundleTask/TimeZoneLoader.cs @@ -50,15 +50,13 @@ private void DownloadTimeZoneData() File.Copy(Path.Combine(InputDirectory!,"zone1970.tab"), Path.Combine(OutputDirectory!,"zone1970.tab")); } - private void FilterTimeZoneData(string[] areas) + private void FilterTimeZoneData() { - var directoryInfo = new DirectoryInfo (OutputDirectory!); - foreach (var entry in directoryInfo.EnumerateDirectories()) + // Remove unnecessary timezone files + foreach (var entry in new DirectoryInfo (OutputDirectory!).EnumerateFiles()) { - if (Array.IndexOf(areas, entry.Name) == -1) - { - Directory.Delete(entry.FullName, true); - } + if (entry.Name != "zone1970.tab") + File.Delete(entry.FullName); } } @@ -90,15 +88,13 @@ public override bool Execute() Directory.CreateDirectory(OutputDirectory!); DownloadTimeZoneData(); - - string[] areas = new string[] { "Africa", "America", "Antarctica", "Arctic", "Asia", "Atlantic", "Australia", "Europe", "Indian", "Pacific", "zone1970.tab"}; string[] filtered = new string[] { "America/Los_Angeles", "Australia/Sydney", "Europe/London", "Pacific/Tongatapu", "America/Sao_Paulo", "Australia/Perth", "Africa/Nairobi", "Europe/Berlin", "Europe/Moscow", "Africa/Tripoli", "America/Argentina/Catamarca", "Europe/Lisbon", "America/St_Johns"}; - FilterTimeZoneData(areas); + FilterTimeZoneData(); FilterZoneTab(filtered); return true; diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs index 0a57c503df0e3..8f46ee92b9614 100644 --- a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs +++ b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs @@ -29,7 +29,6 @@ public class WasmBundleTask : Task foreach (var entry in directoryInfo.EnumerateFiles("*", SearchOption.AllDirectories)) { - var relativePath = Path.GetRelativePath(InputDirectory!, entry.FullName); indices.Add(new object[] { relativePath, entry.Length }); @@ -47,24 +46,21 @@ public override bool Execute() { (byte[] json_bytes, MemoryStream stream) data; - if (InputDirectory == null) + if (!Directory.Exists(InputDirectory)) { - throw new ArgumentException("Input directory doesn't exist."); + Log.LogError($"Input directory '{InputDirectory}' does not exist"); + return false; } data = EnumerateData(); - if (FileName == null) - { - throw new ArgumentException($"Invalid file name"); - } - using (var file = File.Open(FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) + using (var file = File.Open(FileName!, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { - var bytes = new byte[4]; + var lengthBytes = new byte[4]; var magicBytes = Encoding.ASCII.GetBytes("talb"); - BinaryPrimitives.WriteInt32LittleEndian(bytes, data.json_bytes.Length); + BinaryPrimitives.WriteInt32LittleEndian(lengthBytes, data.json_bytes.Length); file.Write(magicBytes); - file.Write(bytes); + file.Write(lengthBytes); file.Write(data.json_bytes); data.stream.CopyTo(file); diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.csproj b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.csproj index b8a2081d8e32d..fd2ba129eaf4e 100644 --- a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.csproj +++ b/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.csproj @@ -2,7 +2,6 @@ $(NetCoreAppCurrent) Library - false enable @@ -10,11 +9,6 @@ - - - - - Date: Fri, 14 Aug 2020 16:04:27 -0400 Subject: [PATCH 8/9] Change names of variables --- Directory.Build.props | 4 ++-- eng/testing/tests.mobile.targets | 14 +++++++------- src/mono/wasm/Makefile | 2 +- src/mono/wasm/wasm.targets | 10 +++++----- .../CreateWasmBundle.cs} | 6 +++--- .../CreateWasmBundle.csproj} | 0 .../DownloadTimeZoneData.cs} | 6 +++--- tools-local/tasks/tasks.proj | 2 +- 8 files changed, 22 insertions(+), 22 deletions(-) rename tools-local/tasks/mobile.tasks/{WasmBundleTask/WasmBundleTask.cs => CreateWasmBundle/CreateWasmBundle.cs} (90%) rename tools-local/tasks/mobile.tasks/{WasmBundleTask/WasmBundleTask.csproj => CreateWasmBundle/CreateWasmBundle.csproj} (100%) rename tools-local/tasks/mobile.tasks/{WasmBundleTask/TimeZoneLoader.cs => CreateWasmBundle/DownloadTimeZoneData.cs} (96%) diff --git a/Directory.Build.props b/Directory.Build.props index 8c5f863e5670c..9c22bebc66f1c 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -51,13 +51,13 @@ $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'AppleAppBuilder', 'Debug', '$(NetCoreAppCurrent)')) $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'AndroidAppBuilder', 'Debug', '$(NetCoreAppCurrent)')) $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'WasmAppBuilder', 'Debug', '$(NetCoreAppCurrent)', 'publish')) - $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'WasmBundleTask', 'Debug', '$(NetCoreAppCurrent)', 'publish')) + $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'CreateWasmBundle', 'Debug', '$(NetCoreAppCurrent)', 'publish')) $([MSBuild]::NormalizeDirectory('$(ArtifactsBinDir)', 'MonoAOTCompiler', 'Debug', '$(NetCoreAppCurrent)')) $([MSBuild]::NormalizePath('$(AppleAppBuilderDir)', 'AppleAppBuilder.dll')) $([MSBuild]::NormalizePath('$(AndroidAppBuilderDir)', 'AndroidAppBuilder.dll')) $([MSBuild]::NormalizePath('$(WasmAppBuilderDir)', 'WasmAppBuilder.dll')) - $([MSBuild]::NormalizePath('$(WasmBundleTaskDir)', 'WasmBundleTask.dll')) + $([MSBuild]::NormalizePath('$(CreateWasmBundleDir)', 'CreateWasmBundle.dll')) $([MSBuild]::NormalizePath('$(MonoAOTCompilerDir)', 'MonoAOTCompiler.dll')) diff --git a/eng/testing/tests.mobile.targets b/eng/testing/tests.mobile.targets index 9f4ca7030ec84..f6bfdfa66420c 100644 --- a/eng/testing/tests.mobile.targets +++ b/eng/testing/tests.mobile.targets @@ -162,24 +162,24 @@ AssemblySearchPaths="@(AssemblySearchPaths)" /> - + 2020a - - + - + OutputFileName="$(MicrosoftNetCoreAppRuntimePackRidDir)dotnet.timezones.blat" /> - + - - + $(NativeBinDir)dotnet.timezones.blat - + OutputFileName="$(TimeZonesDataPath)" /> diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs b/tools-local/tasks/mobile.tasks/CreateWasmBundle/CreateWasmBundle.cs similarity index 90% rename from tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs rename to tools-local/tasks/mobile.tasks/CreateWasmBundle/CreateWasmBundle.cs index 8f46ee92b9614..8701b1d3aedea 100644 --- a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.cs +++ b/tools-local/tasks/mobile.tasks/CreateWasmBundle/CreateWasmBundle.cs @@ -12,13 +12,13 @@ using Microsoft.Build.Framework; using Microsoft.Build.Utilities; -public class WasmBundleTask : Task +public class CreateWasmBundle : Task { [Required] public string? InputDirectory { get; set; } [Required] - public string? FileName { get; set; } + public string? OutputFileName { get; set; } private (byte[] json_bytes, MemoryStream stream) EnumerateData() { @@ -54,7 +54,7 @@ public override bool Execute() data = EnumerateData(); - using (var file = File.Open(FileName!, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) + using (var file = File.Open(OutputFileName!, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { var lengthBytes = new byte[4]; var magicBytes = Encoding.ASCII.GetBytes("talb"); diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.csproj b/tools-local/tasks/mobile.tasks/CreateWasmBundle/CreateWasmBundle.csproj similarity index 100% rename from tools-local/tasks/mobile.tasks/WasmBundleTask/WasmBundleTask.csproj rename to tools-local/tasks/mobile.tasks/CreateWasmBundle/CreateWasmBundle.csproj diff --git a/tools-local/tasks/mobile.tasks/WasmBundleTask/TimeZoneLoader.cs b/tools-local/tasks/mobile.tasks/CreateWasmBundle/DownloadTimeZoneData.cs similarity index 96% rename from tools-local/tasks/mobile.tasks/WasmBundleTask/TimeZoneLoader.cs rename to tools-local/tasks/mobile.tasks/CreateWasmBundle/DownloadTimeZoneData.cs index a90f7d5432ba9..86aa80962d81c 100644 --- a/tools-local/tasks/mobile.tasks/WasmBundleTask/TimeZoneLoader.cs +++ b/tools-local/tasks/mobile.tasks/CreateWasmBundle/DownloadTimeZoneData.cs @@ -12,7 +12,7 @@ using Microsoft.Build.Framework; using Microsoft.Build.Utilities; -public class TimeZoneLoader : Task +public class DownloadTimeZoneData : Task { [Required] public string? InputDirectory { get; set; } @@ -23,7 +23,7 @@ public class TimeZoneLoader : Task [Required] public string? Version { get; set; } - private void DownloadTimeZoneData() + private void DownloadTimeZoneDataSource() { List files = new List() {"africa", "antarctica", "asia", "australasia", "etcetera", "europe", "northamerica", "southamerica", "zone1970.tab"}; using (var client = new WebClient()) @@ -87,7 +87,7 @@ public override bool Execute() if (!Directory.Exists(OutputDirectory)) Directory.CreateDirectory(OutputDirectory!); - DownloadTimeZoneData(); + DownloadTimeZoneDataSource(); string[] filtered = new string[] { "America/Los_Angeles", "Australia/Sydney", "Europe/London", "Pacific/Tongatapu", "America/Sao_Paulo", "Australia/Perth", "Africa/Nairobi", "Europe/Berlin", diff --git a/tools-local/tasks/tasks.proj b/tools-local/tasks/tasks.proj index efd0d1b397c92..43e52d2e7aeeb 100644 --- a/tools-local/tasks/tasks.proj +++ b/tools-local/tasks/tasks.proj @@ -7,7 +7,7 @@ Condition="'$(TargetOS)' != 'iOS' and '$(TargetOS)' != 'tvOS'" /> - From 1e255dd3bcaf7ca2b055773d9ab92b3622752d7e Mon Sep 17 00:00:00 2001 From: tqiu8 Date: Sat, 15 Aug 2020 13:45:12 -0400 Subject: [PATCH 9/9] PR feedback fixes --- .../tasks/mobile.tasks/CreateWasmBundle/CreateWasmBundle.cs | 4 +--- .../mobile.tasks/CreateWasmBundle/DownloadTimeZoneData.cs | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/tools-local/tasks/mobile.tasks/CreateWasmBundle/CreateWasmBundle.cs b/tools-local/tasks/mobile.tasks/CreateWasmBundle/CreateWasmBundle.cs index 8701b1d3aedea..25921596fe552 100644 --- a/tools-local/tasks/mobile.tasks/CreateWasmBundle/CreateWasmBundle.cs +++ b/tools-local/tasks/mobile.tasks/CreateWasmBundle/CreateWasmBundle.cs @@ -44,15 +44,13 @@ public class CreateWasmBundle : Task public override bool Execute() { - (byte[] json_bytes, MemoryStream stream) data; - if (!Directory.Exists(InputDirectory)) { Log.LogError($"Input directory '{InputDirectory}' does not exist"); return false; } - data = EnumerateData(); + (byte[] json_bytes, MemoryStream stream) data = EnumerateData(); using (var file = File.Open(OutputFileName!, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)) { diff --git a/tools-local/tasks/mobile.tasks/CreateWasmBundle/DownloadTimeZoneData.cs b/tools-local/tasks/mobile.tasks/CreateWasmBundle/DownloadTimeZoneData.cs index 86aa80962d81c..0d3501dfbb2a2 100644 --- a/tools-local/tasks/mobile.tasks/CreateWasmBundle/DownloadTimeZoneData.cs +++ b/tools-local/tasks/mobile.tasks/CreateWasmBundle/DownloadTimeZoneData.cs @@ -28,6 +28,7 @@ private void DownloadTimeZoneDataSource() List files = new List() {"africa", "antarctica", "asia", "australasia", "etcetera", "europe", "northamerica", "southamerica", "zone1970.tab"}; using (var client = new WebClient()) { + Console.WriteLine("Downloading TimeZone data files"); foreach (var file in files) { client.DownloadFile($"https://data.iana.org/time-zones/tzdb-{Version}/{file}", $"{Path.Combine(InputDirectory!, file)}");