public void Constructor1_MetadataViewSetToNull() { MetadataView metadataView = new MetadataView(); var export = new Lazy <string, MetadataView>(() => "Value", null, false); Assert.IsNull(export.Metadata); }
protected virtual DiffInfo LoadFromPackage(string path) { IProcessingContext context = new SimpleProcessingContext(); CommandInstallerContext.Setup(context, Path.GetFileNameWithoutExtension(path), UpgradeAction.Preview, Sitecore.Update.Utils.InstallMode.Install, null, new List <ContingencyEntry>()); ISource <PackageEntry> source = new PackageReader(path); ISink <PackageEntry> installer = DoCreateInstallerSink(context); var sorter = new PackageDumper(source); sorter.Initialize(context); sorter.Populate(installer); installer.Flush(); var commands = new List <ICommand>(sorter.Commands); var engine = new DataEngine { FilterCommands = false, OptimizeCommands = false }; engine.ProcessCommands(ref commands); var info = new DiffInfo(commands, string.Empty, string.Empty, "Generated by ConvertFromPackage command."); MetadataView view = UpdateHelper.LoadMetadata(path); if (view != null) { info.Readme = view.Readme; info.InstallMode = view.Comment; info.Title = view.PackageName; } ; return(info); }
/// <summary> /// Executes the post install steps /// </summary> /// <param name="postStepDetails"></param> internal static void ExecutePostSteps(InstallLogger installLogger, PostStepDetails postStepDetails) { try { SetInstallerState(InstallerState.InstallingPostSteps); //Load the metadata from the update package MetadataView metedateView = UpdateHelper.LoadMetadata(postStepDetails.PostStepPackageFilename); List <ContingencyEntry> logMessages = new List <ContingencyEntry>(); try { //Execute the post install steps DiffInstaller diffInstaller = new DiffInstaller(UpgradeAction.Upgrade); diffInstaller.ExecutePostInstallationInstructions(postStepDetails.PostStepPackageFilename, postStepDetails.HistoryPath, InstallMode.Update, metedateView, installLogger, ref logMessages); } finally { //Move the update package into the history folder File.Move(postStepDetails.PostStepPackageFilename, Path.Combine(postStepDetails.HistoryPath, Path.GetFileName(postStepDetails.PostStepPackageFilename))); } } catch (Exception ex) { Log.Fatal("Post step execution failed", ex, "InstallPackage"); installLogger.Fatal("Post step execution failed", ex); throw; } finally { SetInstallerState(InstallerState.Ready); } }
private void InstallPackage(FileInfo file) { // in case file disappeared since retrieved file.Refresh(); if (!file.Exists) { return; } FridayLog.Info(AutoPackages.FeatureName, $"Install auto package (Skip on conflicts): {file.FullName}"); using (new SecurityDisabler()) { var context = new SimpleProcessingContext(); // IItemInstallerEvents type cast is essential var items = (IItemInstallerEvents) new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode.Skip, MergeMode.Undefined)); context.AddAspect(items); // IFileInstallerEvents type cast is essential var files = (IFileInstallerEvents) new DefaultFileInstallerEvents(false); context.AddAspect(files); new Installer().InstallPackage(file.FullName, context); new Installer().InstallSecurity(file.FullName, context); var previewContext = Installer.CreatePreviewContext(); var packageReader = new PackageReader(file.FullName); var view = new MetadataView(previewContext); var metadataSink = new MetadataSink(view); metadataSink.Initialize(previewContext); packageReader.Populate(metadataSink); new Installer().ExecutePostStep(view.PostStep, previewContext); } }
public void InstallPackage(string path) { bool hasPostAction; string historyPath; // Use default logger ILog log = LogManager.GetLogger("root"); XmlConfigurator.Configure((XmlElement)ConfigurationManager.GetSection("log4net")); using (new SecurityDisabler()) { DiffInstaller installer = new DiffInstaller(UpgradeAction.Upgrade); MetadataView view = UpdateHelper.LoadMetadata(path); //Get the package entries List <ContingencyEntry> entries = installer.InstallPackage(path, InstallMode.Install, log, out hasPostAction, out historyPath); installer.ExecutePostInstallationInstructions(path, historyPath, InstallMode.Install, view, log, ref entries); #if SITECORE_6X UpdateHelper.SaveInstallationMessages(entries, historyPath); #endif } }
public void Constructor1_MetadataViewSet() { MetadataView metadataView = new MetadataView(); var export = new Lazy <string, MetadataView>(() => "Value", metadataView, false); Assert.AreEqual(metadataView, export.Metadata); }
public void Install() { Context.SetActiveSite("shell"); using (new SecurityDisabler()) { using (new SyncOperationContext()) { IProcessingContext context = new SimpleProcessingContext(); IItemInstallerEvents events = new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode.Overwrite, MergeMode.Clear)); context.AddAspect(events); IFileInstallerEvents events1 = new DefaultFileInstallerEvents(true); context.AddAspect(events1); var inst = new Installer(); inst.InstallPackage(FileUtil.MapPath(FileName), context); ISource <PackageEntry> source = new PackageReader(FileUtil.MapPath(FileName)); var previewContext = Installer.CreatePreviewContext(); var view = new MetadataView(previewContext); var sink = new MetadataSink(view); sink.Initialize(previewContext); source.Populate(sink); inst.ExecutePostStep(view.PostStep, previewContext); } } }
public void Constructor2_MetadataSet() { MetadataView metadataView = new MetadataView(); var export = new Lazy<object, MetadataView>(metadataView, false); Assert.AreSame(metadataView, export.Metadata); Assert.IsNotNull(export.Value); }
public void Constructor3_MetadataSet() { MetadataView metadataView = new MetadataView(); var export = new Lazy <object, MetadataView>(metadataView, true); Assert.AreSame(metadataView, export.Metadata); Assert.IsNotNull(export.Value); }
public void Constructor4_MetadataSet() { MetadataView metadataView = new MetadataView(); var export = new Lazy <string, MetadataView>(() => "Value", metadataView, true); Assert.AreSame(metadataView, export.Metadata); Assert.IsNotNull(export.Value); }
protected override void ProcessRecord() { if (DisableIndexing.IsPresent) { WriteWarning($"The parameter {nameof(DisableIndexing)} is no longer used. The functionality has been removed from the Sitecore platform."); } var fileName = Path; PerformInstallAction(() => { if (!System.IO.Path.IsPathRooted(fileName)) { var packagePath = FullPackagePath(fileName); WriteVerbose($"Path is not rooted. Updating to {packagePath}."); if (!FileUtil.Exists(packagePath)) { packagePath = System.IO.Path.GetFullPath( System.IO.Path.Combine( CurrentProviderLocation("FileSystem").ProviderPath, fileName)); WriteVerbose($"Path could not be found. Updating to {packagePath}."); if (!FileUtil.Exists(packagePath)) { WriteVerbose("Path still could not be found. Check that the file actually exists in the Sitecore package directory."); } } fileName = packagePath; } if (!ShouldProcess(fileName, "Install package")) { return; } using (new Sitecore.Data.BulkUpdateContext()) { IProcessingContext context = new SimpleProcessingContext(); IItemInstallerEvents instance1 = new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode, MergeMode)); context.AddAspect(instance1); IFileInstallerEvents instance2 = new DefaultFileInstallerEvents(true); context.AddAspect(instance2); var installer = new Installer(); installer.InstallPackage(fileName, context); ISource <PackageEntry> source = new PackageReader(fileName); var previewContext = Installer.CreatePreviewContext(); var view = new MetadataView(previewContext); var metadataSink = new MetadataSink(view); metadataSink.Initialize(previewContext); source.Populate(metadataSink); installer.ExecutePostStep(view.PostStep, previewContext); } }); }
public void ProcessRequest(HttpContext context) { try { HttpContext.Current.Response.Write("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); HttpContext.Current.Response.Write("<Response>"); HttpContext.Current.Response.Flush(); this.ExtractQueryParameters(); if (string.IsNullOrEmpty(this.PackagePath)) { string msg = $"The package \"{PackagePath}\" not found."; Fatal(msg, new ArgumentNullException(msg)); } else { string str; MetadataView metadata = GetMetadata(this.PackagePath, out str); if ((metadata == null) || !string.IsNullOrEmpty(str)) { string msg = $"The package \"{PackagePath}\" could not be loaded.<p>The file is not an update package."; Fatal(msg, new ArgumentNullException(msg)); } else { this.countOfCommands = metadata.CommandsCount; string packageInfos = $@"Package name: {metadata.PackageName} Package version: {metadata.Version} (revision: {metadata.Revision}) Author: {metadata.PackageName} Publisher: {metadata.Publisher} Readme: {metadata.Readme} Comment: {metadata.Comment}"; Info(packageInfos); this.InstallTdsPackage(this.PackagePath); } } } catch (Exception exception) { Error("Unknow error", exception); } finally { HttpContext.Current.Response.Write("</Response>"); HttpContext.Current.Response.Flush(); } }
public void Install([NotNull] string fileName) { try { Context.SetActiveSite("shell"); using (new SecurityDisabler()) { using (new ProxyDisabler()) { using (new SyncOperationContext()) { IProcessingContext context = new SimpleProcessingContext(); IItemInstallerEvents itemInstallerEvents = new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode.Overwrite, MergeMode.Clear)); context.AddAspect(itemInstallerEvents); IFileInstallerEvents fileInstallerEvents = new DefaultFileInstallerEvents(true); context.AddAspect(fileInstallerEvents); var installer = new Installer(); installer.InstallPackage(FileUtil.MapPath(fileName), context); ISource <PackageEntry> source = new PackageReader(FileUtil.MapPath(fileName)); var previewContext = Installer.CreatePreviewContext(); var view = new MetadataView(previewContext); var sink = new MetadataSink(view); sink.Initialize(previewContext); source.Populate(sink); installer.ExecutePostStep(view.PostStep, previewContext); } } } File.WriteAllText(fileName + ".log", @"OK"); } catch (Exception ex) { File.WriteAllText(fileName + ".log", @"Error" + Environment.NewLine + ex.Message + Environment.NewLine + ex.StackTrace); } }
public static MetadataView GetMetadata(string packagePath, out string error) { Assert.IsNotNull(packagePath, "package path"); error = string.Empty; MetadataView metadataFromCache = null; try { metadataFromCache = UpdateHelper.LoadMetadata(packagePath); } catch { } if ((metadataFromCache == null) || string.IsNullOrEmpty(metadataFromCache.PackageName)) { error = Translate.Text("The package \"{0}\" could not be loaded.<p>The file is not an update package.</p>", new object[] { packagePath }); return(null); } return(metadataFromCache); }
public void Constructor1_MetadataViewSetToNull() { MetadataView metadataView = new MetadataView(); var export = new Lazy<string, MetadataView>(() => "Value", null, false); Assert.IsNull(export.Metadata); }
public void Constructor4_MetadataSet() { MetadataView metadataView = new MetadataView(); var export = new Lazy<string, MetadataView>(() => "Value", metadataView, true); Assert.AreSame(metadataView, export.Metadata); Assert.IsNotNull(export.Value); }
private void InstallPackage(FileInfo file) { // in case file disappeared since retrieved file.Refresh(); if (!file.Exists) { return; } var filenameWithoutExtension = Path.GetFileNameWithoutExtension(file.Name); filenameWithoutExtension = ItemUtil.ProposeValidItemName(filenameWithoutExtension); Assert.IsTrue(!string.IsNullOrWhiteSpace(filenameWithoutExtension), "The package should be renamed to something that item can have name of: " + file.Name); using (new SecurityDisabler()) { var db = Factory.GetDatabase("core"); var historyItem = db.GetItem("/sitecore/system/Packages/Installation history"); if (historyItem.Children.Any(x => string.Equals(x.Name, filenameWithoutExtension, StringComparison.OrdinalIgnoreCase))) { FridayLog.Info(AutoPackages.FeatureName, $"Install auto package skipped (already installed): \"{file.FullName}\""); return; } } // The way how SC creates history item it cumbersome - it has some non-obvious length limitations // so add extra logic to work around it. var historyFile = new FileInfo(file.FullName + ".history.txt"); if (historyFile.Exists) { FridayLog.Info(AutoPackages.FeatureName, $"Install auto package skipped (already installed): \"{file.FullName}\""); return; } File.AppendAllText(historyFile.FullName, DateTime.UtcNow.ToString("o") + "\r\n"); FridayLog.Info(AutoPackages.FeatureName, $"Install auto package (Skip on conflicts): \"{file.FullName}\""); using (new SecurityDisabler()) { var context = new SimpleProcessingContext(); // IItemInstallerEvents type cast is essential var items = (IItemInstallerEvents) new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode.Overwrite, MergeMode.Undefined)); context.AddAspect(items); // IFileInstallerEvents type cast is essential var files = (IFileInstallerEvents) new DefaultFileInstallerEvents(true); context.AddAspect(files); new Installer().InstallPackage(file.FullName, context); new Installer().InstallSecurity(file.FullName, context); var previewContext = Installer.CreatePreviewContext(); var packageReader = new PackageReader(file.FullName); var view = new MetadataView(previewContext); var metadataSink = new MetadataSink(view); metadataSink.Initialize(previewContext); packageReader.Populate(metadataSink); new Installer().ExecutePostStep(view.PostStep, previewContext); } }
public PackageManifest Execute(string packagePath, bool disableIndexing) { if (!File.Exists(packagePath)) { throw new NotFoundException(); } using (new ShutdownGuard()) { if (disableIndexing) { Sitecore.Configuration.Settings.Indexing.Enabled = false; } var installationInfo = GetInstallationInfo(packagePath); string historyPath = null; List <ContingencyEntry> entries = null; var logger = Sitecore.Diagnostics.LoggerFactory.GetLogger(this); // TODO abstractions try { entries = UpdateHelper.Install(installationInfo, logger, out historyPath); string error = string.Empty; logger.Info("Executing post installation actions."); MetadataView metadata = PreviewMetadataWizardPage.GetMetadata(packagePath, out error); if (string.IsNullOrEmpty(error)) { DiffInstaller diffInstaller = new DiffInstaller(UpgradeAction.Upgrade); using (new SecurityDisabler()) { diffInstaller.ExecutePostInstallationInstructions(packagePath, historyPath, installationInfo.Mode, metadata, logger, ref entries); } } else { logger.Info("Post installation actions error."); logger.Error(error); } logger.Info("Executing post installation actions finished."); return(_manifestRepository.GetManifest(packagePath)); } catch (PostStepInstallerException exception) { entries = exception.Entries; historyPath = exception.HistoryPath; throw; } finally { if (disableIndexing) { Sitecore.Configuration.Settings.Indexing.Enabled = true; } try { SaveInstallationMessages(entries, historyPath); } catch (Exception) { logger.Error("Failed to record installation messages"); foreach (var entry in entries ?? Enumerable.Empty <ContingencyEntry>()) { logger.Info(string.Format("Entry [{0}]-[{1}]-[{2}]-[{3}]-[{4}]-[{5}]-[{6}]-[{7}]-[{8}]-[{9}]-[{10}]-[{11}]", entry.Action, entry.Behavior, entry.CommandKey, entry.Database, entry.Level, entry.LongDescription, entry.MessageGroup, entry.MessageGroupDescription, entry.MessageID, entry.MessageType, entry.Number, entry.ShortDescription)); } throw; } } } }
public PackageManifest Execute(string packagePath, bool disableIndexing, bool enableSecurityInstall, bool analyzeOnly, bool summeryOnly, string version) { if (!File.Exists(packagePath)) { throw new NotFoundException(); } using (new ShutdownGuard()) { if (disableIndexing) { Sitecore.Configuration.Settings.Indexing.Enabled = false; } var installationInfo = GetInstallationInfo(packagePath); string historyPath = null; List <ContingencyEntry> entries = null; var logger = Sitecore.Diagnostics.LoggerFactory.GetLogger(this); // TODO abstractions var manifestReporter = new ManifestReporter(logger); var manifestReport = manifestReporter.ReportPackage(packagePath); if (analyzeOnly) { manifestReport.AnalyzeOnly = true; var manifest = new PackageManifest(); manifest.ManifestReport = manifestReport; return(manifest); } if (!string.IsNullOrWhiteSpace(version)) { var targetPath = manifestReporter.SessionTempDirectory + "package.zip"; // open reader using (var zipFile = new ZipFile(manifestReporter.ExtractedTempPackagePath)) { var existingVersionEntry = zipFile.Entries.FirstOrDefault(entry => entry.FileName.ToLower().EndsWith("sc_version.txt")); if (existingVersionEntry != null) { zipFile.RemoveEntry(existingVersionEntry); } zipFile.AddEntry("metadata\\sc_version.txt", version); zipFile.Save(targetPath); } // and now replace the ziped update file System.IO.File.Delete(packagePath); Utilities.ZipFile(targetPath, packagePath); } try { entries = UpdateHelper.Install(installationInfo, logger, out historyPath); string error = string.Empty; logger.Info("Executing post installation actions."); MetadataView metadata = PreviewMetadataWizardPage.GetMetadata(packagePath, out error); if (string.IsNullOrEmpty(error)) { ShipInstaller diffInstaller = new ShipInstaller(UpgradeAction.Upgrade); using (new SecurityDisabler()) { if (enableSecurityInstall) { diffInstaller.InstallSecurity(packagePath); } diffInstaller.ExecutePostInstallationInstructions(packagePath, historyPath, installationInfo.Mode, metadata, logger, ref entries); } } else { if (!manifestReport.ErrorOccured) { manifestReport.SetError(error); } logger.Info("Post installation actions error."); logger.Error(error); } logger.Info("Executing post installation actions finished."); var manifest = _manifestRepository.GetManifest(packagePath); manifest.ManifestReport = manifestReport; BuildSummery(manifest, entries); if (summeryOnly) { manifest.ManifestReport.Databases = null; } return(manifest); } catch (PostStepInstallerException exception) { entries = exception.Entries; historyPath = exception.HistoryPath; throw; } finally { if (disableIndexing) { Sitecore.Configuration.Settings.Indexing.Enabled = true; } manifestReporter.Dispose(); try { SaveInstallationMessages(entries, historyPath); } catch (Exception) { logger.Error("Failed to record installation messages"); foreach (var entry in entries ?? Enumerable.Empty <ContingencyEntry>()) { logger.Info(string.Format("Entry [{0}]-[{1}]-[{2}]-[{3}]-[{4}]-[{5}]-[{6}]-[{7}]-[{8}]-[{9}]-[{10}]-[{11}]", entry.Action, entry.Behavior, entry.CommandKey, entry.Database, entry.Level, entry.LongDescription, entry.MessageGroup, entry.MessageGroupDescription, entry.MessageID, entry.MessageType, entry.Number, entry.ShortDescription)); } throw; } } } }
public void Constructor1_MetadataViewSet() { MetadataView metadataView = new MetadataView(); var export = new Lazy<string, MetadataView>(() => "Value", metadataView, false); Assert.AreEqual(metadataView, export.Metadata); }
protected override void ProcessRecord() { var fileName = Path; PerformInstallAction(() => { if (!System.IO.Path.IsPathRooted(fileName)) { var packagePath = FullPackagePath(fileName); WriteVerbose($"Path is not rooted. Updating to {packagePath}."); if (!FileUtil.Exists(packagePath)) { packagePath = System.IO.Path.GetFullPath( System.IO.Path.Combine( CurrentProviderLocation("FileSystem").ProviderPath, fileName)); WriteVerbose($"Path could not be found. Updating to {packagePath}."); if (!FileUtil.Exists(packagePath)) { WriteVerbose("Path still could not be found. Check that the file actually exists in the Sitecore package directory."); } } fileName = packagePath; } if (ShouldProcess(fileName, "Install package")) { var obsoleter = TypeResolver.Resolve <IObsoleter>(); var indexSetting = obsoleter.IndexingEnabled; if (DisableIndexing.IsPresent) { obsoleter.IndexingEnabled = false; } try { IProcessingContext context = new SimpleProcessingContext(); IItemInstallerEvents instance1 = new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode, MergeMode)); context.AddAspect(instance1); IFileInstallerEvents instance2 = new DefaultFileInstallerEvents(true); context.AddAspect(instance2); var installer = new Installer(); installer.InstallPackage(fileName, context); ISource <PackageEntry> source = new PackageReader(fileName); var previewContext = Installer.CreatePreviewContext(); var view = new MetadataView(previewContext); var metadataSink = new MetadataSink(view); metadataSink.Initialize(previewContext); source.Populate(metadataSink); installer.ExecutePostStep(view.PostStep, previewContext); } finally { if (DisableIndexing.IsPresent) { obsoleter.IndexingEnabled = indexSetting; } } } }); }
public MetadataViewModel(MetadataView view) { _view = view; }
private void InstallSitecorePackage([NotNull] string fileName) { Context.SetActiveSite("shell"); using (new SecurityDisabler()) { using (new ProxyDisabler()) { using (new SyncOperationContext()) { var context = new SimpleProcessingContext(); var defaultItemInstallerEvents = new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode.Overwrite, MergeMode.Clear)); context.AddAspect(defaultItemInstallerEvents); var defaultFileInstallerEvents = new DefaultFileInstallerEvents(true); context.AddAspect(defaultFileInstallerEvents); var installer = new Installer(); installer.InstallPackage(FileUtil.MapPath(fileName), context); var packageReader = new PackageReader(FileUtil.MapPath(fileName)); var previewContext = Installer.CreatePreviewContext(); var view = new MetadataView(previewContext); var sink = new MetadataSink(view); sink.Initialize(previewContext); packageReader.Populate(sink); installer.ExecutePostStep(view.PostStep, previewContext); } } } }
protected override void ProcessRecord() { var fileName = Path; PerformInstallAction(() => { if (!System.IO.Path.IsPathRooted(fileName)) { var packagePath = FullPackagePath(fileName); WriteVerbose($"Path is not rooted. Updating to {packagePath}."); if (!FileUtil.Exists(packagePath)) { packagePath = System.IO.Path.GetFullPath( System.IO.Path.Combine( CurrentProviderLocation("FileSystem").ProviderPath, fileName)); WriteVerbose($"Path could not be found. Updating to {packagePath}."); if (!FileUtil.Exists(packagePath)) { WriteVerbose("Path still could not be found. Check that the file actually exists in the Sitecore package directory."); } } fileName = packagePath; } if (ShouldProcess(fileName, "Install package")) { var indexSetting = Sitecore.Configuration.Settings.Indexing.Enabled; if (DisableIndexing.IsPresent) { Sitecore.Configuration.Settings.Indexing.Enabled = false; } try { IProcessingContext context = new SimpleProcessingContext(); IItemInstallerEvents instance1 = new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode, MergeMode)); context.AddAspect(instance1); IFileInstallerEvents instance2 = new DefaultFileInstallerEvents(true); context.AddAspect(instance2); var installer = new Installer(); installer.InstallPackage(fileName, context); ISource<PackageEntry> source = new PackageReader(fileName); var previewContext = Installer.CreatePreviewContext(); var view = new MetadataView(previewContext); var metadataSink = new MetadataSink(view); metadataSink.Initialize(previewContext); source.Populate(metadataSink); installer.ExecutePostStep(view.PostStep, previewContext); } finally { if (DisableIndexing.IsPresent) { Sitecore.Configuration.Settings.Indexing.Enabled = indexSetting; } } } }); }