/// <summary> /// Updates the add-in index of the provided repository /// </summary> /// <param name="statusMonitor"> /// Progress monitor where to show progress status and log /// </param> /// <param name="url"> /// URL of the repository /// </param> public void UpdateRepository(IProgressStatus statusMonitor, string url) { repoList = null; IProgressMonitor monitor = ProgressStatusMonitor.GetProgressMonitor(statusMonitor); monitor.BeginTask("Updating repositories", service.Configuration.Repositories.Count); try { int num = service.Configuration.Repositories.Count; for (int n = 0; n < num; n++) { RepositoryRecord rr = (RepositoryRecord)service.Configuration.Repositories [n]; if (((url == null && rr.Enabled) || rr.Url == url) && !rr.IsReference) { UpdateRepository(monitor, new Uri(rr.Url), rr); } monitor.Step(1); } } catch (Exception ex) { statusMonitor.ReportError("Could not get information from repository", ex); return; } finally { monitor.EndTask(); } PurgeUnusedRepositories(); service.SaveConfiguration(); }
public async Task CheckUpdates(ProgressMonitor monitor, bool automatic) { updateMonitor = monitor; try { if (UpdateService.UpdateLevel == UpdateLevel.Test) { Runtime.AddinSetupService.RegisterMainRepository(UpdateLevel.Test, true); } currentTask = Task.Run(delegate { using (ProgressStatusMonitor pm = new ProgressStatusMonitor(monitor)) { Runtime.AddinSetupService.Repositories.UpdateAllRepositories(pm); updates = Runtime.AddinSetupService.Repositories.GetAvailableUpdates(); } }); await currentTask; if (updates.Length > 0) { WarnAvailableUpdates(); } } finally { updateMonitor = null; currentTask = null; } }
void UpdateAddins() { PropertyService.Set("MonoDevelop.Ide.AddinUpdater.LastCheck", DateTime.Now); using (UpdateMonitor) { using (ProgressStatusMonitor pm = new ProgressStatusMonitor(UpdateMonitor)) { Runtime.AddinSetupService.Repositories.UpdateAllRepositories(pm); updates = Runtime.AddinSetupService.Repositories.GetAvailableUpdates(); if (updates.Length > 0) { DispatchService.GuiDispatch(new MessageHandler(WarnAvailableUpdates)); } } } }
/// <summary> /// Generates an on-line repository /// </summary> /// <param name="statusMonitor"> /// Progress monitor where to show progress status /// </param> /// <param name="path"> /// Path to the directory that contains the add-ins and that is going to be published /// </param> /// <remarks> /// This method generates the index files required to publish a directory as an online repository /// of add-ins. /// </remarks> public void BuildRepository(IProgressStatus statusMonitor, string path) { string mainPath = Path.Combine(path, "main.mrep"); ArrayList allAddins = new ArrayList(); Repository rootrep = (Repository)AddinStore.ReadObject(mainPath, typeof(Repository)); if (rootrep == null) { rootrep = new Repository(); } IProgressMonitor monitor = ProgressStatusMonitor.GetProgressMonitor(statusMonitor); BuildRepository(monitor, rootrep, path, "root.mrep", allAddins); AddinStore.WriteObject(mainPath, rootrep); GenerateIndexPage(rootrep, allAddins, path); monitor.Log.WriteLine("Updated main.mrep"); }
public void CheckUpdates(IProgressMonitor monitor, bool automatic) { updateMonitor = monitor; try { if (UpdateService.UpdateLevel == UpdateLevel.Test) { Runtime.AddinSetupService.RegisterMainRepository(UpdateLevel.Test, true); } using (ProgressStatusMonitor pm = new ProgressStatusMonitor(monitor)) { Runtime.AddinSetupService.Repositories.UpdateAllRepositories(pm); updates = Runtime.AddinSetupService.Repositories.GetAvailableUpdates(); if (updates.Length > 0) { DispatchService.GuiDispatch(new MessageHandler(WarnAvailableUpdates)); } } } finally { updateMonitor = null; } }
public void UpdateRepository(IProgressStatus statusMonitor, string url) { repoList = null; IProgressMonitor monitor = ProgressStatusMonitor.GetProgressMonitor(statusMonitor); monitor.BeginTask("Updating repositories", service.Configuration.Repositories.Count); try { int num = service.Configuration.Repositories.Count; for (int n = 0; n < num; n++) { RepositoryRecord rr = (RepositoryRecord)service.Configuration.Repositories [n]; if ((url == null || rr.Url == url) && !rr.IsReference) { UpdateRepository(monitor, new Uri(rr.Url), rr); } monitor.Step(1); } } finally { monitor.EndTask(); } service.SaveConfiguration(); }
public bool ResolveDependencies(IProgressStatus statusMonitor, PackageCollection packages, out PackageCollection toUninstall, out DependencyCollection unresolved) { IProgressMonitor monitor = ProgressStatusMonitor.GetProgressMonitor(statusMonitor); return(ResolveDependencies(monitor, packages, out toUninstall, out unresolved)); }
public void Uninstall(IProgressStatus statusMonitor, IEnumerable <string> ids) { IProgressMonitor monitor = ProgressStatusMonitor.GetProgressMonitor(statusMonitor); monitor.BeginTask("Uninstalling add-ins", ids.Count()); foreach (string id in ids) { bool rollback = false; ArrayList toUninstall = new ArrayList(); ArrayList uninstallPrepared = new ArrayList(); Addin ia = service.Registry.GetAddin(id); if (ia == null) { throw new InstallException("The add-in '" + id + "' is not installed."); } toUninstall.Add(AddinPackage.FromInstalledAddin(ia)); Addin[] deps = GetDependentAddins(id, true); foreach (Addin dep in deps) { toUninstall.Add(AddinPackage.FromInstalledAddin(dep)); } monitor.BeginTask("Deleting files", toUninstall.Count * 2 + uninstallPrepared.Count + 1); // Prepare install foreach (Package mpack in toUninstall) { try { mpack.PrepareUninstall(monitor, this); monitor.Step(1); uninstallPrepared.Add(mpack); } catch (Exception ex) { ReportException(monitor, ex); rollback = true; break; } } // Commit install if (!rollback) { foreach (Package mpack in toUninstall) { try { mpack.CommitUninstall(monitor, this); monitor.Step(1); } catch (Exception ex) { ReportException(monitor, ex); rollback = true; break; } } } // Rollback if failed if (rollback) { monitor.BeginTask("Rolling back uninstall", uninstallPrepared.Count); foreach (Package mpack in uninstallPrepared) { try { mpack.RollbackUninstall(monitor, this); } catch (Exception ex) { ReportException(monitor, ex); } } monitor.EndTask(); } monitor.Step(1); // Cleanup foreach (Package mpack in uninstallPrepared) { try { mpack.EndUninstall(monitor, this); monitor.Step(1); } catch (Exception ex) { monitor.Log.WriteLine(ex); } } monitor.EndTask(); monitor.Step(1); } // Update the extension maps service.Registry.Update(statusMonitor); monitor.EndTask(); service.SaveConfiguration(); ResetCachedData(); }
internal bool Install(IProgressStatus statusMonitor, PackageCollection packs) { // Make sure the registry is up to date service.Registry.Update(statusMonitor); IProgressMonitor monitor = ProgressStatusMonitor.GetProgressMonitor(statusMonitor); PackageCollection toUninstall; DependencyCollection unresolved; if (!ResolveDependencies(monitor, packs, out toUninstall, out unresolved)) { monitor.ReportError("Not all dependencies could be resolved.", null); return(false); } ArrayList prepared = new ArrayList(); ArrayList uninstallPrepared = new ArrayList(); bool rollback = false; monitor.BeginTask("Installing add-ins...", 100); // Prepare install monitor.BeginStepTask("Initializing installation", toUninstall.Count + packs.Count + 1, 75); foreach (Package mpack in toUninstall) { try { mpack.PrepareUninstall(monitor, this); uninstallPrepared.Add(mpack); if (monitor.IsCancelRequested) { throw new InstallException("Installation cancelled."); } monitor.Step(1); } catch (Exception ex) { ReportException(monitor, ex); rollback = true; break; } } monitor.Step(1); foreach (Package mpack in packs) { try { mpack.PrepareInstall(monitor, this); if (monitor.IsCancelRequested) { throw new InstallException("Installation cancelled."); } prepared.Add(mpack); monitor.Step(1); } catch (Exception ex) { ReportException(monitor, ex); rollback = true; break; } } monitor.EndTask(); monitor.BeginStepTask("Installing", toUninstall.Count + packs.Count + 1, 20); // Commit install if (!rollback) { foreach (Package mpack in toUninstall) { try { mpack.CommitUninstall(monitor, this); if (monitor.IsCancelRequested) { throw new InstallException("Installation cancelled."); } monitor.Step(1); } catch (Exception ex) { ReportException(monitor, ex); rollback = true; break; } } } monitor.Step(1); if (!rollback) { foreach (Package mpack in packs) { try { mpack.CommitInstall(monitor, this); if (monitor.IsCancelRequested) { throw new InstallException("Installation cancelled."); } monitor.Step(1); } catch (Exception ex) { ReportException(monitor, ex); rollback = true; break; } } } monitor.EndTask(); // Rollback if failed if (monitor.IsCancelRequested) { monitor = new NullProgressMonitor(); } if (rollback) { monitor.BeginStepTask("Finishing installation", (prepared.Count + uninstallPrepared.Count) * 2 + 1, 5); foreach (Package mpack in prepared) { try { mpack.RollbackInstall(monitor, this); monitor.Step(1); } catch (Exception ex) { ReportException(monitor, ex); } } foreach (Package mpack in uninstallPrepared) { try { mpack.RollbackUninstall(monitor, this); monitor.Step(1); } catch (Exception ex) { ReportException(monitor, ex); } } } else { monitor.BeginStepTask("Finishing installation", prepared.Count + uninstallPrepared.Count + 1, 5); } // Cleanup foreach (Package mpack in prepared) { try { mpack.EndInstall(monitor, this); monitor.Step(1); } catch (Exception ex) { monitor.Log.WriteLine(ex); } } monitor.Step(1); foreach (Package mpack in uninstallPrepared) { try { mpack.EndUninstall(monitor, this); monitor.Step(1); } catch (Exception ex) { monitor.Log.WriteLine(ex); } } // Update the extension maps service.Registry.Update(statusMonitor); monitor.EndTask(); monitor.EndTask(); service.SaveConfiguration(); ResetCachedData(); return(!rollback); }