diff --git a/Util/Xamarin.Build.Download/source/Xamarin.Build.Download.Tests/Test.cs b/Util/Xamarin.Build.Download/source/Xamarin.Build.Download.Tests/Test.cs index bf3ddf9ba9..3fa2e8a668 100644 --- a/Util/Xamarin.Build.Download/source/Xamarin.Build.Download.Tests/Test.cs +++ b/Util/Xamarin.Build.Download/source/Xamarin.Build.Download.Tests/Test.cs @@ -122,7 +122,7 @@ public void TestZipDownload () var success = BuildProject (engine, project, "_XamarinBuildDownload", log); - + AssertNoMessagesOrWarnings (log, DEFAULT_IGNORE_PATTERNS); Assert.True (success); @@ -332,7 +332,7 @@ public void TestAndroidAarAdded() var artifactXbdId = "gpsbasement-16.2.0"; var r = AndroidAarAdd(unpackDir, artifactXbdId, "https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-basement/16.2.0/play-services-basement-16.2.0.aar", true); - + AssertNoMessagesOrWarnings(r.logs, DEFAULT_IGNORE_PATTERNS); Assert.True(r.success); @@ -361,7 +361,7 @@ public void TestAndroidAarIdeTooOld() var engine = new ProjectCollection (); var prel = ProjectRootElement.Create (Path.Combine (TempDir, "project.csproj"), engine); - + prel.SetProperty ("XamarinBuildDownloadDir", unpackDir); prel.SetProperty ("TargetFrameworkIdentifier", "MonoAndroid"); prel.SetProperty ("TargetFrameworkVersion", "v9.0"); @@ -678,7 +678,7 @@ public void TestGetPartialZipItemsToDownload () { "RangeStart", "199278205" }, { "RangeEnd", "199589731" }, }); - + AddCoreTargets (prel); var project = new ProjectInstance (prel); @@ -694,5 +694,37 @@ public void TestGetPartialZipItemsToDownload () Assert.Equal (2, itemToDownload.Count); Assert.True (itemToDownload.First ().GetMetadata ("Url").EvaluatedValue == itemUrl); } + + [Fact] + public void TestPathGreaterThan260Chars () + { + var engine = new ProjectCollection (); + var prel = ProjectRootElement.Create (Path.Combine (TempDir, "project.csproj"), engine); + + var unpackDir = GetTempPath ("unpacked"); + + for (var i = 1; unpackDir.Length < 260; i++) + unpackDir = Path.Combine (unpackDir, $"segment{i}"); + + prel.SetProperty ("XamarinBuildDownloadDir", unpackDir); + + prel.AddItem ( + "XamarinBuildDownload", "GAppM-8.8.0", new Dictionary { + { "Url", "https://dl.google.com/firebase/ios/analytics/86849febfdc4ff13/GoogleAppMeasurement-8.8.0.tar.gz" }, + { "Kind", "Tgz" } + }); + + AddCoreTargets (prel); + + var project = new ProjectInstance (prel); + var log = new MSBuildTestLogger (); + + var success = BuildProject (engine, project, "_XamarinBuildDownload", log); + + AssertNoMessagesOrWarnings (log, DEFAULT_IGNORE_PATTERNS); + Assert.True (success); + + Assert.True (File.Exists (Path.Combine (unpackDir, "GAppM-8.8.0", "GoogleAppMeasurement-8.8.0", "dummy.txt"))); + } } } \ No newline at end of file diff --git a/Util/Xamarin.Build.Download/source/Xamarin.Build.Download/ProcessArgumentBuilder.cs b/Util/Xamarin.Build.Download/source/Xamarin.Build.Download/ProcessArgumentBuilder.cs index 7c9bc2dd06..2a10b46f34 100644 --- a/Util/Xamarin.Build.Download/source/Xamarin.Build.Download/ProcessArgumentBuilder.cs +++ b/Util/Xamarin.Build.Download/source/Xamarin.Build.Download/ProcessArgumentBuilder.cs @@ -33,8 +33,6 @@ namespace Xamarin.MacDev /// class ProcessArgumentBuilder { - static readonly char[] QuoteSpecials = new char[] { ' ', '\\', '\'', '"', ',', ';' }; - readonly HashSet hash = new HashSet (); readonly StringBuilder builder = new StringBuilder (); @@ -91,19 +89,9 @@ public void AddQuotedFormat (string argumentFormat, object val0) static void AppendQuoted (StringBuilder quoted, string text) { - if (text.IndexOfAny (QuoteSpecials) != -1) { - quoted.Append ("\""); - - for (int i = 0; i < text.Length; i++) { - if (text[i] == '\\' || text[i] == '"') - quoted.Append ('\\'); - quoted.Append (text[i]); - } - - quoted.Append ("\""); - } else { - quoted.Append (text); - } + quoted.Append ("\""); + quoted.Append (text); + quoted.Append ("\""); } /// Adds an argument, quoting and escaping as necessary. diff --git a/Util/Xamarin.Build.Download/source/Xamarin.Build.Download/Xamarin.Build.Download.csproj b/Util/Xamarin.Build.Download/source/Xamarin.Build.Download/Xamarin.Build.Download.csproj index 39a363299e..0e66aebf06 100644 --- a/Util/Xamarin.Build.Download/source/Xamarin.Build.Download/Xamarin.Build.Download.csproj +++ b/Util/Xamarin.Build.Download/source/Xamarin.Build.Download/Xamarin.Build.Download.csproj @@ -8,7 +8,7 @@ Xamarin.Build.Download Xamarin Build-time Download Support - 0.10.0 + 0.11.0 Microsoft Microsoft https://go.microsoft.com/fwlink/?linkid=865061 diff --git a/Util/Xamarin.Build.Download/source/Xamarin.Build.Download/XamarinDownloadArchives.cs b/Util/Xamarin.Build.Download/source/Xamarin.Build.Download/XamarinDownloadArchives.cs index 0d7cfbb459..14adfe2780 100644 --- a/Util/Xamarin.Build.Download/source/Xamarin.Build.Download/XamarinDownloadArchives.cs +++ b/Util/Xamarin.Build.Download/source/Xamarin.Build.Download/XamarinDownloadArchives.cs @@ -287,10 +287,22 @@ ProcessStartInfo CreateExtractionArgs (string file, string contentDir, ArchiveKi default: throw new ArgumentException ("kind"); } - return new ProcessStartInfo (args.ProcessPath, args.ToString ()) { - WorkingDirectory = contentDir, - CreateNoWindow = true - }; + + ProcessStartInfo psi = null; + if (Platform.IsWindows) + psi = new ProcessStartInfo (args.ProcessPath, args.ToString ()) + { + WorkingDirectory = null, + CreateNoWindow = true + }; + else + psi = new ProcessStartInfo (args.ProcessPath, args.ToString ()) + { + WorkingDirectory = contentDir, + CreateNoWindow = true + }; + + return psi; } static ProcessArgumentBuilder Build7ZipExtractionArgs (string file, string contentDir, string user7ZipPath, bool ignoreTarSymLinks, string vsInstallRoot)