From d5dd42f127b043d725ad30ee1c13060d4c5db4de Mon Sep 17 00:00:00 2001 From: Rob Reynolds Date: Thu, 17 Sep 2015 22:10:46 -0500 Subject: [PATCH] (GH-364) Only update the config if changed Do not try to write to the config file unless something has changed. --- .../infrastructure.app/services/FilesServiceSpecs.cs | 4 +++- src/chocolatey/infrastructure/services/XmlService.cs | 11 +++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/chocolatey.tests.integration/infrastructure.app/services/FilesServiceSpecs.cs b/src/chocolatey.tests.integration/infrastructure.app/services/FilesServiceSpecs.cs index b5cc3278df..18af879850 100644 --- a/src/chocolatey.tests.integration/infrastructure.app/services/FilesServiceSpecs.cs +++ b/src/chocolatey.tests.integration/infrastructure.app/services/FilesServiceSpecs.cs @@ -35,10 +35,12 @@ public abstract class FilesServiceSpecsBase : TinySpec { protected FilesService Service; protected IFileSystem FileSystem = new DotNetFileSystem(); + protected IHashProvider HashProvider; public override void Context() { - Service = new FilesService(new XmlService(FileSystem), FileSystem, new CrytpoHashProvider(FileSystem, CryptoHashProviderType.Md5)); + HashProvider = new CrytpoHashProvider(FileSystem, CryptoHashProviderType.Md5); + Service = new FilesService(new XmlService(FileSystem, HashProvider), FileSystem, new CrytpoHashProvider(FileSystem, CryptoHashProviderType.Md5)); } } diff --git a/src/chocolatey/infrastructure/services/XmlService.cs b/src/chocolatey/infrastructure/services/XmlService.cs index 18bcd8d577..c56f0297e6 100644 --- a/src/chocolatey/infrastructure/services/XmlService.cs +++ b/src/chocolatey/infrastructure/services/XmlService.cs @@ -19,6 +19,7 @@ namespace chocolatey.infrastructure.services using System.Text; using System.Xml; using System.Xml.Serialization; + using cryptography; using filesystem; using tolerance; @@ -28,10 +29,12 @@ namespace chocolatey.infrastructure.services public sealed class XmlService : IXmlService { private readonly IFileSystem _fileSystem; + private readonly IHashProvider _hashProvider; - public XmlService(IFileSystem fileSystem) + public XmlService(IFileSystem fileSystem, IHashProvider hashProvider) { _fileSystem = fileSystem; + _hashProvider = hashProvider; } public XmlType deserialize(string xmlFilePath) @@ -74,7 +77,11 @@ public void serialize(XmlType xmlType, string xmlFilePath) textWriter.Close(); textWriter.Dispose(); - _fileSystem.copy_file(xmlUpdateFilePath, xmlFilePath, overwriteExisting: true); + if (!_hashProvider.hash_file(xmlFilePath).is_equal_to(_hashProvider.hash_file(xmlUpdateFilePath))) + { + _fileSystem.copy_file(xmlUpdateFilePath, xmlFilePath, overwriteExisting: true); + } + _fileSystem.delete_file(xmlUpdateFilePath); }, "Error serializing type {0}".format_with(typeof(XmlType)),