diff --git a/src/Umbraco.Core/Configuration/ClientDependencyConfiguration.cs b/src/Umbraco.Core/Configuration/ClientDependencyConfiguration.cs index 6fbdec6901..b3076f2143 100644 --- a/src/Umbraco.Core/Configuration/ClientDependencyConfiguration.cs +++ b/src/Umbraco.Core/Configuration/ClientDependencyConfiguration.cs @@ -1,6 +1,10 @@ using System; -using System.Linq; +using System.Collections.Generic; +using System.IO; +using System.Web; using System.Xml.Linq; +using ClientDependency.Core.CompositeFiles.Providers; +using ClientDependency.Core.Config; using Umbraco.Core.IO; using Umbraco.Core.Logging; @@ -49,5 +53,57 @@ namespace Umbraco.Core.Configuration return false; } + + /// + /// Clears the temporary files stored for the ClientDependency folder + /// + /// + internal bool ClearTempFiles(HttpContextBase currentHttpContext) + { + var cdfTempDirectories = new HashSet(); + foreach (BaseCompositeFileProcessingProvider provider in ClientDependencySettings.Instance + .CompositeFileProcessingProviderCollection) + { + var path = provider.CompositeFilePath.FullName; + cdfTempDirectories.Add(path); + } + + try + { + var relativePath = currentHttpContext.Server.MapPath(XmlFileMapper.FileMapVirtualFolder); + if (relativePath != null) + { + var directoryInfo = new DirectoryInfo(relativePath); + var path = directoryInfo.FullName; + cdfTempDirectories.Add(path); + } + } + catch (Exception ex) + { + //invalid path format or something... try/catch to be safe + LogHelper.Error("Could not get path from ClientDependency.config", ex); + } + + var noErrorsDeleting = true; + foreach (var directory in cdfTempDirectories) + { + var directoryInfo = new DirectoryInfo(directory); + if (directoryInfo.Exists == false) + continue; + + try + { + directoryInfo.Delete(true); + } + catch (Exception ex) + { + // Something could be locking the directory or the was another error, making sure we don't break the upgrade installer + LogHelper.Error("Could not clear temp files", ex); + noErrorsDeleting = false; + } + } + + return noErrorsDeleting; + } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 3adf99981a..3850fb98b0 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -45,6 +45,9 @@ ..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.Net4.dll True + + ..\packages\ClientDependency.1.9.2\lib\net45\ClientDependency.Core.dll + ..\packages\HtmlAgilityPack.1.4.9.5\lib\Net45\HtmlAgilityPack.dll True diff --git a/src/Umbraco.Core/packages.config b/src/Umbraco.Core/packages.config index dd00d61ea6..2a84e2d967 100644 --- a/src/Umbraco.Core/packages.config +++ b/src/Umbraco.Core/packages.config @@ -1,6 +1,7 @@  + diff --git a/src/Umbraco.Web/Install/Controllers/InstallController.cs b/src/Umbraco.Web/Install/Controllers/InstallController.cs index 360e35efda..7e3336e1e8 100644 --- a/src/Umbraco.Web/Install/Controllers/InstallController.cs +++ b/src/Umbraco.Web/Install/Controllers/InstallController.cs @@ -47,6 +47,8 @@ namespace Umbraco.Web.Install.Controllers // Update ClientDependency version var clientDependencyConfig = new ClientDependencyConfiguration(ApplicationContext.Current.ProfilingLogger.Logger); var clientDependencyUpdated = clientDependencyConfig.IncreaseVersionNumber(); + // Delete ClientDependency temp directories to make sure we get fresh caches + var clientDependencyTempFilesDeleted = clientDependencyConfig.ClearTempFiles(HttpContext); var result = _umbracoContext.Security.ValidateCurrentUser(false);