Exemplo n.º 1
0
        /// <summary>
        /// Uninstalls provided packages
        /// </summary>
        /// <param name="packages">Packages to uninstall</param>
        /// <param name="options">Additional options</param>
        /// <returns>Task</returns>
        public async Task UninstallPackages(ICollection <PackageId> packages, UninstallationOptions options)
        {
            Logger.Info("Uninstalling packages...");
            DeploymentContext.RaiseDeploymentEvent(new BeforeMaintenanceEvent());

            try
            {
                var uninstallationPlan = await PackageDeployer.PlanUninstallation(
                    DeploymentContext.ProductConfigurationProvider.GetPackages(),
                    packages, options.RemoveDependencies);

                using (var transaction = TransactionSource.NewTransaction(DeploymentContext))
                {
                    foreach (var action in uninstallationPlan.Actions)
                    {
                        action.Execute(transaction);
                    }

                    DeploymentContext.ProductConfigurationProvider.Save();
                    transaction.Commit();
                }
            }
            catch (Exception e)
            {
                Logger.TraceException(e.Message, e);
                throw;
            }

            DeploymentContext.RaiseDeploymentEvent(new AfterMaintenanceEvent());
            Logger.Info("Packages uninstalled.");
        }
Exemplo n.º 2
0
        /// <summary>
        /// Executes the specified command application.
        /// </summary>
        /// <param name="cmdApp">The command application.</param>
        /// <param name="logErrorAction">The log error action.</param>
        /// <returns>Error Code</returns>
        protected override async Task <int> Execute(CommandLineApplication cmdApp, Action <string> logErrorAction)
        {
            if (_package.Values.Count == 0)
            {
                logErrorAction($"Missed packages list");
                return(1);
            }

            if (MissedOption(_productPath, logErrorAction))
            {
                return(1);
            }

            var engine     = GetDeploymentEngine(cmdApp);
            var packageIds = _package.Values.Select(x => new PackageId(x)).ToArray();

            if (!_enforce.HasValue())
            {
                var packages = engine.DeploymentContext.ProductConfigurationProvider.GetPackages();
                var slice    = packages.SliceWithDependents(packageIds);
                if (slice.Count != packageIds.Length)
                {
                    logErrorAction($"Some packages cannot be uninstalled because of the packages which depend on them");
                    return(1);
                }
            }

            var options = new UninstallationOptions {
                RemoveDependencies = _removeDependencies.HasValue()
            };
            await engine.UninstallPackages(packageIds, options);

            return(await Task.FromResult(0));
        }
Exemplo n.º 3
0
        public async Task IntegratedTest()
        {
            using (var helper = new TestDeploymentHelper().WithConfiguration().AndNuGetSource())
            {
                var options = new UninstallationOptions {
                    RemoveDependencies = false
                };

                var engine = helper.CreatEngine();
                await engine.InstallPackages(
                    new[] { new PackageId("Newtonsoft.Json/8.0.3"), new PackageId("bootstrap/3.3.7") },
                    new InstallationOptions { AllowDowngrades = false, UpdatePackages = false });

                var source        = new ProductConfigurationSource();
                var productConfig = source.GetProductConfigurationProvider(helper.InstallPath);
                var packageConfig = productConfig.GetPackageConfiguration(new PackageId("bootstrap/3.3.7"));
                var metadata      = packageConfig.GetPackageMetadata();
                metadata.Title.Should().Be("Bootstrap CSS");

                var files = Directory.GetFiles(helper.InstallPath);
                files.Length.Should().Be(3);

                var dirs = Directory.GetDirectories(helper.InstallPath);
                dirs.Length.Should().Be(3);

                engine = helper.CreatEngine();
                await engine.InstallPackages(new[] { new PackageId("Newtonsoft.Json/9.0.1") },
                                             new InstallationOptions { AllowDowngrades = false, UpdatePackages = true });

                engine = helper.CreatEngine();
                await engine.UninstallPackages(new[] { new PackageId("Newtonsoft.Json/9.0.1") }, options);

                files = Directory.GetFiles(helper.InstallPath);
                files.Length.Should().Be(1, "because Newtonsoft.Json is uninstalled");

                engine = helper.CreatEngine();
                await engine.UninstallPackages(new[] { new PackageId("bootstrap/3.3.7") }, options);

                dirs = Directory.GetDirectories(helper.InstallPath);
                dirs.Length.Should().Be(1);
            }
        }
Exemplo n.º 4
0
        public static void Uninstall(UninstallationOptions options)
        {
            var renameList = GetInstallationInstructions();

            renameList.Reverse();

            foreach (var i in renameList)
            {
                if (File.Exists(i.newName) && !File.Exists(i.orig))
                {
                    File.Move(i.newName, i.orig);
                }
            }

            Settings.PatcherDir = "";
            Settings.Save();

            if (options.RecoverOriginalFiles)
            {
                Process.Start("AMBPatcher.exe", "recover").WaitForExit();

                if (options.DeleteAllModLoaderFiles && Directory.Exists("mods_sha"))
                {
                    Directory.Delete("mods_sha", true);
                }
            }

            if (options.UninstallAndDeleteOCMI)
            {
                if (File.Exists("OneClickModInstaller.exe"))
                {
                    Process.Start("OneClickModInstaller.exe", "--uninstall").WaitForExit();
                    File.Delete("OneClickModInstaller.exe");
                }

                if (!options.KeepSettings && File.Exists("OneClickModInstaller.cfg"))
                {
                    File.Delete("OneClickModInstaller.cfg");
                }
            }

            if (options.DeleteAllModLoaderFiles)
            {
                foreach (var file in renameList)
                {
                    if (file.modloaderFile && (File.Exists(file.orig) || Directory.Exists(file.orig)))
                    {
                        if (!options.KeepSettings ||
                            !(options.KeepSettings && (file.orig.EndsWith(".cfg") || file.orig.EndsWith(".config"))))
                        {
                            if (File.Exists(file.orig))
                            {
                                File.Delete(file.orig);
                            }
                            else if (Directory.Exists(file.orig))
                            {
                                Directory.Delete(file.orig, true);
                            }
                        }
                    }
                }

                var bat = "taskkill /IM Sonic4ModManager.exe /F\n" +
                          "DEL Sonic4ModManager.exe\n" +
                          "DEL FinishInstallation.bat";
                File.WriteAllText("FinishInstallation.bat", bat);

                Process.Start("FinishInstallation.bat");
                Environment.Exit(0);
            }
        }