diff --git a/src/Squirrel/DeltaPackage.cs b/src/Squirrel/DeltaPackage.cs index de15030b..773bd56a 100644 --- a/src/Squirrel/DeltaPackage.cs +++ b/src/Squirrel/DeltaPackage.cs @@ -68,17 +68,11 @@ namespace Squirrel this.Log().Info("Extracting {0} and {1} into {2}", basePackage.ReleasePackageFile, newPackage.ReleasePackageFile, tempPath); + Utility.ExtractZipToDirectory(basePackage.ReleasePackageFile, baseTempInfo.FullName).Wait(); var opts = new ExtractionOptions() { ExtractFullPath = true, Overwrite = true, PreserveFileTime = true }; - using (var za = ZipArchive.Open(basePackage.ReleasePackageFile)) - using (var reader = za.ExtractAllEntries()) { - reader.WriteAllToDirectory(baseTempInfo.FullName, opts); - } - - using (var za = ZipArchive.Open(basePackage.ReleasePackageFile)) - using (var reader = za.ExtractAllEntries()) { - reader.WriteAllToDirectory(tempInfo.FullName, opts); - } + Utility.ExtractZipToDirectory(basePackage.ReleasePackageFile, baseTempInfo.FullName).Wait(); + Utility.ExtractZipToDirectory(newPackage.ReleasePackageFile, tempInfo.FullName).Wait(); // Collect a list of relative paths under 'lib' and map them // to their full name. We'll use this later to determine in @@ -95,10 +89,7 @@ namespace Squirrel } ReleasePackage.addDeltaFilesToContentTypes(tempInfo.FullName); - using (var za = ZipArchive.Create()) { - za.AddAllFromDirectory(tempInfo.FullName); - za.SaveTo(outputFile, CompressionType.Deflate); - } + Utility.CreateZipFromDirectory(outputFile, tempInfo.FullName).Wait(); } return new ReleasePackage(outputFile); diff --git a/src/Squirrel/ReleasePackage.cs b/src/Squirrel/ReleasePackage.cs index 9a2fea96..903b0a8c 100644 --- a/src/Squirrel/ReleasePackage.cs +++ b/src/Squirrel/ReleasePackage.cs @@ -163,7 +163,7 @@ namespace Squirrel contentsPostProcessHook?.Invoke(tempPath); - createZipEncoded(outputFile, tempPath); + Utility.CreateZipFromDirectory(outputFile, tempPath).Wait(); ReleasePackageFile = outputFile; return ReleasePackageFile; @@ -217,28 +217,6 @@ namespace Squirrel }); } - // Create zip file with entry names %-encoded, as nupkg file does. - void createZipEncoded(string zipFilePath, string folder) - { - var sevenZip = Path.Combine( - Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), - "7z.exe"); - - Utility.InvokeProcessAsync(sevenZip, String.Format("a \"{0}\" -tzip -mmt on *", zipFilePath), CancellationToken.None, folder) - .Wait(); - - /* - using (var archive = ZipArchive.Create()) - using (var tgt = File.OpenWrite(zipFilePath)) { - archive.DeflateCompressionLevel = CompressionLevel.BestCompression; - archive.AddAllFromDirectory(folder); - archive.SaveTo( - tgt, - new WriterOptions(CompressionType.Deflate)); - } - */ - } - void extractDependentPackages(IEnumerable dependencies, DirectoryInfo tempPath, FrameworkName framework) { dependencies.ForEach(pkg => { diff --git a/src/Squirrel/Utility.cs b/src/Squirrel/Utility.cs index cb513b00..55c68043 100644 --- a/src/Squirrel/Utility.cs +++ b/src/Squirrel/Utility.cs @@ -386,6 +386,20 @@ namespace Squirrel } } + public static async Task CreateZipFromDirectory(string zipFilePath, string inFolder) + { + var sevenZip = Utility.FindHelperExecutable("7z.exe"); + var result = default(Tuple); + + try { + result = await Utility.InvokeProcessAsync(sevenZip, String.Format("a \"{0}\" -tzip -mmt on *", zipFilePath), CancellationToken.None, inFolder); + if (result.Item1 != 0) throw new Exception(result.Item2); + } catch (Exception ex) { + Log().Error($"Failed to extract file {zipFilePath} to {inFolder}\n{ex.Message}"); + throw; + } + } + public static string AppDirForRelease(string rootAppDirectory, ReleaseEntry entry) { return Path.Combine(rootAppDirectory, "app-" + entry.Version.ToString());