private PatchResult CreateIncrementalPatch() { if (cancel) { return(PatchResult.Failed); } Directory.CreateDirectory(incrementalPatchOutputPath); Directory.CreateDirectory(incrementalPatchTempPath); incrementalPatch = new IncrementalPatchInfo { FromVersion = previousVersion, ToVersion = version }; Log(Localization.Get(StringId.CreatingIncrementalPatch)); Stopwatch timer = Stopwatch.StartNew(); DirectoryInfo rootDirectory = new DirectoryInfo(rootPath); TraverseIncrementalPatchRecursively(rootDirectory, ""); if (cancel) { return(PatchResult.Failed); } Log(Localization.Get(StringId.CompressingPatchIntoOneFile)); string compressedPatchPath = incrementalPatchOutputPath + incrementalPatch.PatchVersion() + PatchParameters.INCREMENTAL_PATCH_FILE_EXTENSION; ZipUtils.CompressFolder(incrementalPatchTempPath, compressedPatchPath, compressionFormatIncrementalPatch); Log(Localization.Get(StringId.WritingIncrementalPatchInfoToXML)); PatchUtils.SerializeIncrementalPatchInfoToXML(incrementalPatch, incrementalPatchOutputPath + incrementalPatch.PatchVersion() + PatchParameters.INCREMENTAL_PATCH_INFO_EXTENSION); versionInfo.IncrementalPatches.Add(new IncrementalPatch(previousVersion, version, new FileInfo(compressedPatchPath), incrementalPatch.Files.Count, compressionFormatIncrementalPatch)); PatchUtils.DeleteDirectory(incrementalPatchTempPath); Log(Localization.Get(StringId.IncrementalPatchCreatedInXSeconds, timer.ElapsedSeconds())); return(PatchResult.Success); }
private PatchResult CreateInstallerPatch() { if (cancel) { return(PatchResult.Failed); } Directory.CreateDirectory(installerPatchOutputPath); string compressedPatchPath = installerPatchOutputPath + PatchParameters.INSTALLER_PATCH_FILENAME; Log(Localization.Get(StringId.CreatingInstallerPatch)); Stopwatch timer = Stopwatch.StartNew(); Log(Localization.Get(StringId.CompressingXToY, rootPath, compressedPatchPath)); ZipUtils.CompressFolder(rootPath, compressedPatchPath, compressionFormatInstallerPatch, ignoredPathsRegex); if (cancel) { return(PatchResult.Failed); } Log(Localization.Get(StringId.PatchCreatedInXSeconds, timer.ElapsedSeconds())); FileInfo installerPatch = new FileInfo(compressedPatchPath); versionInfo.InstallerPatch = new InstallerPatch(installerPatch, compressionFormatInstallerPatch); // Calculate compression ratio long uncompressedTotal = 0L, compressedTotal = installerPatch.Length; for (int i = 0; i < versionInfo.Files.Count; i++) { uncompressedTotal += versionInfo.Files[i].FileSize; } Log(Localization.Get(StringId.CompressionRatioIsX, ((double)compressedTotal * 100 / uncompressedTotal).ToString("F2"))); return(PatchResult.Success); }