예제 #1
0
        public void Constructor1_MetadataViewSetToNull()
        {
            MetadataView metadataView = new MetadataView();
            var          export       = new Lazy <string, MetadataView>(() => "Value", null, false);

            Assert.IsNull(export.Metadata);
        }
예제 #2
0
        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);
            }
        }
예제 #4
0
        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
            }
        }
예제 #6
0
        public void Constructor1_MetadataViewSet()
        {
            MetadataView metadataView = new MetadataView();
            var          export       = new Lazy <string, MetadataView>(() => "Value", metadataView, false);

            Assert.AreEqual(metadataView, export.Metadata);
        }
예제 #7
0
        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);
                }
            }
        }
예제 #8
0
        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);
        }
예제 #9
0
        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);
        }
예제 #10
0
        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);
        }
예제 #11
0
        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();
            }
        }
예제 #13
0
        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);
        }
예제 #15
0
 public void Constructor1_MetadataViewSetToNull()
 {
     MetadataView metadataView = new MetadataView();
     var export = new Lazy<string, MetadataView>(() => "Value", null, false);
     Assert.IsNull(export.Metadata);
 }
예제 #16
0
        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);
        }
예제 #17
0
        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;
                    }
                }
            }
        }
예제 #20
0
 public void Constructor1_MetadataViewSet()
 {
     MetadataView metadataView = new MetadataView();
     var export = new Lazy<string, MetadataView>(() => "Value", metadataView, false);
     Assert.AreEqual(metadataView, export.Metadata);
 }
예제 #21
0
        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);
                    }
                }
            }
        }
예제 #24
0
        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;
                            }
                        }
                    }
                });
        }