diff options
author | Jason Malinowski <jason.malinowski@microsoft.com> | 2016-01-15 00:01:19 +0300 |
---|---|---|
committer | Jason Malinowski <jason.malinowski@microsoft.com> | 2016-01-15 00:01:19 +0300 |
commit | 6d5532276ed05781421e33572bc7602d4c7b7f2d (patch) | |
tree | 26781cdc5a0920994a0f8614ead208644ae55564 | |
parent | 935352cdd96162be0b3bb861e025c8df335eb2f2 (diff) |
Use the locale information from NuGet to figure out TargetPaths
The project.lock.json provides, for resource items, the culture which
was pulled out of the path in the NuGet package. We can use this to
construct target paths rather than re-figuring it out ourselves.
3 files changed, 10 insertions, 68 deletions
diff --git a/src/Microsoft.NuGet.Build.Tasks/CultureStringUtilities.cs b/src/Microsoft.NuGet.Build.Tasks/CultureStringUtilities.cs deleted file mode 100644 index d8a2447..0000000 --- a/src/Microsoft.NuGet.Build.Tasks/CultureStringUtilities.cs +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Globalization; - -namespace Microsoft.NuGet.Build.Tasks -{ - internal class CultureStringUtilities - { - static private Lazy<string[]> cultureInfoStringsLazy = new Lazy<string[]>(GetCultureInfoArray); - static private string[] cultureInfoStrings => cultureInfoStringsLazy.Value; - - internal static bool IsValidCultureString(string cultureString) - { - // Note, it does not matter what kind of comparer we use as long as the comparer - // for Array.Sort() [see PopulateCultureInfoArray()] and Array.BinarySearch() is - // the same. - bool valid = true; - - if (Array.BinarySearch(cultureInfoStrings, cultureString, StringComparer.OrdinalIgnoreCase) < 0) - { - valid = false; - } - - return valid; - } - - private static string[] GetCultureInfoArray() - { - CultureInfo[] cultureInfos = CultureInfo.GetCultures(CultureTypes.AllCultures); - - var cultureInfoArray = new string[cultureInfos.Length]; - for (int i = 0; i < cultureInfos.Length; i++) - { - cultureInfoArray[i] = cultureInfos[i].Name; - } - - // Note, it does not matter what kind of comparer we use as long as the comparer - // for Array.BinarySearch() [see ValidateCultureInfoString()] and Array.Sort() is - // the same. - Array.Sort(cultureInfoArray, StringComparer.OrdinalIgnoreCase); - return cultureInfoArray; - } - } -}
\ No newline at end of file diff --git a/src/Microsoft.NuGet.Build.Tasks/Microsoft.NuGet.Build.Tasks.csproj b/src/Microsoft.NuGet.Build.Tasks/Microsoft.NuGet.Build.Tasks.csproj index a7be6e4..163ddec 100644 --- a/src/Microsoft.NuGet.Build.Tasks/Microsoft.NuGet.Build.Tasks.csproj +++ b/src/Microsoft.NuGet.Build.Tasks/Microsoft.NuGet.Build.Tasks.csproj @@ -41,7 +41,6 @@ <Reference Include="Microsoft.CSharp" /> </ItemGroup> <ItemGroup> - <Compile Include="CultureStringUtilities.cs" /> <Compile Include="Delegates.cs" /> <Compile Include="ExceptionFromResource.cs" /> <Compile Include="InternalsVisibleTo.cs" /> diff --git a/src/Microsoft.NuGet.Build.Tasks/ResolveNuGetPackageAssets.cs b/src/Microsoft.NuGet.Build.Tasks/ResolveNuGetPackageAssets.cs index 0e278fe..8538ea6 100644 --- a/src/Microsoft.NuGet.Build.Tasks/ResolveNuGetPackageAssets.cs +++ b/src/Microsoft.NuGet.Build.Tasks/ResolveNuGetPackageAssets.cs @@ -719,17 +719,22 @@ namespace Microsoft.NuGet.Build.Tasks return items; } - foreach (string file in values.Properties().Select(p => p.Name)) + foreach (var file in values.Properties()) { - if (Path.GetFileName(file) == "_._") + if (Path.GetFileName(file.Name) == "_._") { continue; } - var sanitizedFile = file.Replace('/', '\\'); - string targetPath = TryGetTargetPath(sanitizedFile); + string targetPath = null; + string culture = file.Value["locale"]?.ToString(); - var item = CreateItem(package, package.GetFullPathToFile(file), targetPath); + if (culture != null) + { + targetPath = Path.Combine(culture, Path.GetFileName(file.Name)); + } + + var item = CreateItem(package, package.GetFullPathToFile(file.Name), targetPath); item.SetMetadata("Private", "false"); @@ -761,22 +766,6 @@ namespace Microsoft.NuGet.Build.Tasks return item; } - private static string TryGetTargetPath(string file) - { - var foldersAndFile = file.Split('\\').ToArray(); - - for (int i = foldersAndFile.Length - 1; i > -1; i--) - { - if (CultureStringUtilities.IsValidCultureString(foldersAndFile[i])) - { - return Path.Combine(foldersAndFile.Skip(i).ToArray()); - } - } - - // There is no culture-specific directory, so it'll go in the root - return null; - } - private void GetReferencedPackages(JObject lockFile) { var projectFileDependencyGroups = (JObject)lockFile["projectFileDependencyGroups"]; |