From 69ce0d1de427d12f432fcc88ee40eb5bfbb428f3 Mon Sep 17 00:00:00 2001 From: Daniel Dabrowski Date: Tue, 11 Mar 2014 13:17:23 +0100 Subject: [PATCH] #20549: Fixed. Installed files from package have same last write time. --- .../Packaging/Services/FileBasedProjectSystemTests.cs | 2 ++ .../Packaging/Services/PackageInstallerTests.cs | 2 ++ .../Orchard.Packaging/Services/FileBaseProjectSystem.cs | 9 +++++++++ .../Orchard.Packaging/Services/PackageInstaller.cs | 7 ++++++- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Orchard.Tests.Modules/Packaging/Services/FileBasedProjectSystemTests.cs b/src/Orchard.Tests.Modules/Packaging/Services/FileBasedProjectSystemTests.cs index a372cc629..85d28763d 100644 --- a/src/Orchard.Tests.Modules/Packaging/Services/FileBasedProjectSystemTests.cs +++ b/src/Orchard.Tests.Modules/Packaging/Services/FileBasedProjectSystemTests.cs @@ -10,6 +10,7 @@ using Orchard.Environment.Extensions.Models; using Orchard.FileSystems.VirtualPath; using Orchard.FileSystems.WebSite; using Orchard.Packaging.Services; +using Orchard.Services; using Orchard.Tests.Stubs; using Orchard.UI.Notify; using IPackageBuilder = Orchard.Packaging.Services.IPackageBuilder; @@ -39,6 +40,7 @@ namespace Orchard.Tests.Modules.Packaging.Services { builder.RegisterType().As(); builder.RegisterType().As() .As().InstancePerLifetimeScope(); + builder.RegisterType().As(); } [SetUp] diff --git a/src/Orchard.Tests.Modules/Packaging/Services/PackageInstallerTests.cs b/src/Orchard.Tests.Modules/Packaging/Services/PackageInstallerTests.cs index 4bac6f800..289badfbe 100644 --- a/src/Orchard.Tests.Modules/Packaging/Services/PackageInstallerTests.cs +++ b/src/Orchard.Tests.Modules/Packaging/Services/PackageInstallerTests.cs @@ -10,6 +10,7 @@ using Orchard.Environment.Extensions.Models; using Orchard.FileSystems.VirtualPath; using Orchard.FileSystems.WebSite; using Orchard.Packaging.Services; +using Orchard.Services; using Orchard.Tests.Stubs; using Orchard.UI.Notify; using IPackageBuilder = Orchard.Packaging.Services.IPackageBuilder; @@ -39,6 +40,7 @@ namespace Orchard.Tests.Modules.Packaging.Services { builder.RegisterType().As(); builder.RegisterType().As() .As().InstancePerLifetimeScope(); + builder.RegisterType().As(); } [SetUp] diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Services/FileBaseProjectSystem.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Services/FileBaseProjectSystem.cs index 35ef0693d..b8f09a0b2 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Services/FileBaseProjectSystem.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Services/FileBaseProjectSystem.cs @@ -10,6 +10,7 @@ namespace Orchard.Packaging.Services { private const string NetFrameworkIdentifier = ".NETFramework"; private const string BinDir = "bin"; private readonly string _root; + private DateTime? _writeTimeUtcForAddedFiles; public FileBasedProjectSystem(string root) { if (String.IsNullOrEmpty(root)) { @@ -61,6 +62,10 @@ namespace Orchard.Packaging.Services { using (Stream outputStream = File.Create(fullPath)) { stream.CopyTo(outputStream); } + + if (_writeTimeUtcForAddedFiles.HasValue) { + File.SetLastWriteTimeUtc(fullPath, _writeTimeUtcForAddedFiles.Value); + } } public void DeleteFile(string path) { @@ -172,6 +177,10 @@ namespace Orchard.Packaging.Services { return true; } + public void OverwriteLastWriteTimeUtcForAddedFiles(DateTime dateTime) { + _writeTimeUtcForAddedFiles = dateTime; + } + protected string MakeRelativePath(string fullPath) { return fullPath.Substring(Root.Length).TrimStart(Path.DirectorySeparatorChar); } diff --git a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageInstaller.cs b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageInstaller.cs index ad04a62df..7d996fed9 100644 --- a/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageInstaller.cs +++ b/src/Orchard.Web/Modules/Orchard.Packaging/Services/PackageInstaller.cs @@ -9,6 +9,7 @@ using Orchard.Localization; using Orchard.Logging; using Orchard.Packaging.Extensions; using Orchard.Packaging.Models; +using Orchard.Services; using Orchard.UI; using Orchard.UI.Notify; using NuGetPackageManager = NuGet.PackageManager; @@ -23,17 +24,20 @@ namespace Orchard.Packaging.Services { private readonly IVirtualPathProvider _virtualPathProvider; private readonly IExtensionManager _extensionManager; private readonly IFolderUpdater _folderUpdater; + private readonly IClock _clock; public PackageInstaller( INotifier notifier, IVirtualPathProvider virtualPathProvider, IExtensionManager extensionManager, - IFolderUpdater folderUpdater) { + IFolderUpdater folderUpdater, + IClock clock) { _notifier = notifier; _virtualPathProvider = virtualPathProvider; _extensionManager = extensionManager; _folderUpdater = folderUpdater; + _clock = clock; T = NullLocalizer.Instance; Logger = Logging.NullLogger.Instance; @@ -147,6 +151,7 @@ namespace Orchard.Packaging.Services { : packageRepository; var project = new FileBasedProjectSystem(targetPath) { Logger = logger }; + project.OverwriteLastWriteTimeUtcForAddedFiles(_clock.UtcNow); var projectManager = new ProjectManager( sourceRepository, // source repository for the package to install new DefaultPackagePathResolver(targetPath),