[Esbox-commits] r1855 - in branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard: . nokiabin
eswartz at garage.maemo.org
eswartz at garage.maemo.org
Wed Jul 8 23:34:10 EEST 2009
Author: eswartz
Date: 2009-07-08 23:34:09 +0300 (Wed, 08 Jul 2009)
New Revision: 1855
Removed:
branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/NokiaBinariesPackageInstaller.java
Modified:
branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/NewScratchbox1SDKWizard.java
branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1SDKInstallerEngine.java
branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1TargetInstallerEngine.java
branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/DiabloInstallerScriptWorkPage.java
branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/FremantleWorkPage.java
branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/NokiaBinariesInstallerEngine.java
Log:
Work to make the package manager wizards and operations more centralized. Reudce a lot of duplication and add useful utilities for common operations.
Modified: branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/NewScratchbox1SDKWizard.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/NewScratchbox1SDKWizard.java 2009-07-08 11:19:18 UTC (rev 1854)
+++ branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/NewScratchbox1SDKWizard.java 2009-07-08 20:34:09 UTC (rev 1855)
@@ -223,7 +223,7 @@
IStatus status = engine.installScratchbox(monitor);
- if (status.matches(IStatus.CANCEL))
+ if (status.matches(IStatus.CANCEL) || monitor.isCanceled())
status = Activator.createErrorStatus("The installation was canceled.", null);
statuses[0] = status;
}
Modified: branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1SDKInstallerEngine.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1SDKInstallerEngine.java 2009-07-08 11:19:18 UTC (rev 1854)
+++ branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1SDKInstallerEngine.java 2009-07-08 20:34:09 UTC (rev 1855)
@@ -13,10 +13,7 @@
package org.maemo.esbox.internal.scratchbox.sb1.ui.wizard;
import java.text.MessageFormat;
-import java.util.Arrays;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -45,10 +42,13 @@
import org.maemo.mica.common.core.ui.IProgressReporter;
import org.maemo.mica.common.core.ui.ProgressReporterStreamTextMonitor;
import org.maemo.mica.internal.api.common.core.sdk.SDKManagerInternal;
-import org.maemo.mica.internal.api.linux.packages.core.*;
+import org.maemo.mica.internal.api.linux.packages.core.ISystemPackage;
+import org.maemo.mica.internal.api.linux.packages.core.aptinstall.AptInstallerEngine;
+import org.maemo.mica.internal.api.linux.packages.core.aptinstall.IAptInstallerWorkList;
+import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.AptPackageManager;
import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.AptPackageManagerRegistry;
import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.IAptPackageManager;
-import org.maemo.mica.internal.api.linux.packages.ui.aptinstall.MachinePackageInstaller;
+import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.IAptRepository;
/**
* This engine runs the Scratchbox installer script,
@@ -203,28 +203,55 @@
private IStatus safeInstallWithPkgManager(IProgressMonitor monitor) {
IStatus status = null;
-
- reporter.logInfo("Installing " + installerData.getName());
-
- Set<String> pkgs = new HashSet<String>();
- pkgs.addAll(Arrays.asList(installerData.getRequiredPackages()));
-
- String[] repositoriesToAdd = new String[]{installerData.getRepositoryURL()};
//FIXME should add an Field on WizardWorkPage
int timeout= 30;
- boolean forceUpgrade = false;
- boolean forceInstall = true;
- MachinePackageInstaller pkgInstaller = new MachinePackageInstaller(
- pkgs, repositoriesToAdd, machine, true, forceUpgrade, forceInstall, timeout, reporter);
+ reporter.logInfo("Installing " + installerData.getName());
- status = pkgInstaller.ensureInstalledPackages(shell, monitor);
-
+ try {
+ IAptInstallerWorkList workList = gatherWork();
+
+ AptInstallerEngine engine = new AptInstallerEngine(
+ shell, reporter, workList);
+ engine.state().setNetworkTimeout(timeout);
+
+ status = engine.run(monitor);
+ } catch (MicaException e) {
+ status = Activator.createErrorStatus("Unexpected error:", e);
+ reporter.log(status);
+ }
+
monitor.done();
return status;
}
+ /**
+ * Gather the work needed for the package operations
+ * @return
+ */
+ private IAptInstallerWorkList gatherWork() throws MicaException {
+ IAptPackageManager manager = AptPackageManagerRegistry.getInstance().
+ getPackageManagerFor(machine);
+ if (manager == null) {
+ throw new MicaException(machine + " does not support apt");
+ }
+
+ String repositoryURL = installerData.getRepositoryURL();
+ IAptRepository repository = AptPackageManager.createRepositoryFromString(manager,
+ null, repositoryURL);
+
+ if (repository == null) {
+ throw new MicaException("Cannot create repository from: " + repositoryURL);
+ }
+
+ IAptInstallerWorkList workList = AptInstallerEngine.newWorkList();
+
+ workList.queueInstallUnknownPackages(manager, installerData.getRequiredPackages());
+
+ return workList;
+ }
+
private IStatus safeInstallScratchbox(IProgressMonitor monitor) {
MultiStatus multiStatus = new MultiStatus(Activator.PLUGIN_ID, 0, null, null);
Modified: branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1TargetInstallerEngine.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1TargetInstallerEngine.java 2009-07-08 11:19:18 UTC (rev 1854)
+++ branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/Scratchbox1TargetInstallerEngine.java 2009-07-08 20:34:09 UTC (rev 1855)
@@ -17,7 +17,6 @@
import java.util.List;
import java.util.regex.Pattern;
-import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@@ -39,9 +38,10 @@
import org.maemo.mica.common.core.ui.IProgressReporter;
import org.maemo.mica.internal.api.common.core.sdk.SDKManagerInternal;
import org.maemo.mica.internal.api.linux.packages.core.ISystemPackage;
+import org.maemo.mica.internal.api.linux.packages.core.aptinstall.AptInstallerEngine;
+import org.maemo.mica.internal.api.linux.packages.core.aptinstall.IAptInstallerWorkList;
import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.AptPackageManagerRegistry;
import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.IAptPackageManager;
-import org.maemo.mica.internal.api.linux.packages.ui.aptinstall.MachinePackageInstaller;
/**
* This engine runs the SDK installer script in non-interactive mode,
@@ -197,12 +197,12 @@
*/
private void checkRequiredDevkitsAndCompilers(MultiStatus multiStatus, IProgressMonitor monitor) {
IStatus status;
- if(!installerData.isInstallRequiredCompilers() || !installerData.isInstallRequiredDevkits())
+ if(!installerData.isInstallRequiredCompilers() && !installerData.isInstallRequiredDevkits())
return;
- monitor.beginTask("", 3);
- monitor.subTask("Looking for required scratchbox compilers and devkits...");
- reporter.logInfo("Looking for required scratchbox compilers and devkits");
+ monitor.beginTask("", 20);
+ monitor.subTask("Looking for required Scratchbox compilers and devkits...");
+ reporter.logInfo("Looking for required Scratchbox compilers and devkits");
IScratchbox1SDK sdk = installerData.getScratchbox1SDK();
@@ -229,7 +229,7 @@
if (manager == null){
status = Activator.createStatus(IStatus.ERROR,
- "Could not found package manager.");
+ "Could not find package manager.");
reporter.log(status);
multiStatus.add(status);
return;
@@ -237,6 +237,7 @@
ISystemPackage[] sboxPackages = null;
try {
+ reporter.logInfo("Finding Scratchbox packages available on " + machine.getName());
sboxPackages = manager.searchSystemPackages(
Pattern.compile("scratchbox-(core|libs|devkit-.*|toolchain-.*)"),
new SubProgressMonitor(monitor, 1));
@@ -255,74 +256,80 @@
return;
}
+ IAptInstallerWorkList workList = AptInstallerEngine.newWorkList();
- try {
- if(installerData.isInstallRequiredDevkits()){
- reporter.logInfo("Checking required devkits for " + installerData.getName());
- List<ISystemPackage> toInstall = new ArrayList<ISystemPackage>();
- List<String> uninstallable = new ArrayList<String>();
- for(String devkit : missingDevkits){
- boolean unknown = true;//unknown package?
- String name = inferPkgNameFromDevkit(devkit);
- for(ISystemPackage pkg : sboxPackages){
- if(pkg.getName().matches(name)){
- unknown = false;
- toInstall.add(pkg);
- }
+ if (installerData.isInstallRequiredDevkits()){
+ reporter.logInfo("Checking required devkits for " + installerData.getName());
+ List<ISystemPackage> toInstall = new ArrayList<ISystemPackage>();
+ List<String> uninstallable = new ArrayList<String>();
+ for (String devkit : missingDevkits){
+ boolean unknown = true;//unknown package?
+ String name = inferPkgNameFromDevkit(devkit);
+ for (ISystemPackage pkg : sboxPackages){
+ if(pkg.getName().matches(name)){
+ unknown = false;
+ toInstall.add(pkg);
}
- if(unknown)
- uninstallable.add(devkit);
}
-
-
- if (uninstallable.size() > 0) {
- status = Activator.createStatus(IStatus.ERROR,
- "Could not find required packages for devkits: " + uninstallable
- + " you should add the repository to sources.list before using this installer, manually install them, or upgrade Scratchbox first.");
- reporter.log(status);
- multiStatus.add(status);
- return;
- }
-
- MachinePackageInstaller.installPackages(toInstall, true, shell, reporter, monitor);
+ if (unknown)
+ uninstallable.add(devkit);
}
- monitor.worked(2);
+ if (uninstallable.size() > 0) {
+ status = Activator.createStatus(IStatus.ERROR,
+ "Could not find required packages for devkits: " + uninstallable
+ + " you should add the repository to sources.list before using this installer, manually install them, or upgrade Scratchbox first.");
+ reporter.log(status);
+ multiStatus.add(status);
+ return;
+ }
+
+ workList.queueInstallPackages((ISystemPackage[]) toInstall.toArray(new ISystemPackage[toInstall.size()]));
- if(installerData.isInstallRequiredCompilers()){
- reporter.logInfo("Checking required compilers for " + installerData.getName());
- List<ISystemPackage> toInstall = new ArrayList<ISystemPackage>();
- List<String> uninstallable = new ArrayList<String>();
- for(String compiler : missingCompilers){
- boolean unknown = true;//unknown package?
- String name = inferPkgNameFromCompiler(compiler);
- for(ISystemPackage pkg : sboxPackages){
- if(pkg.getName().matches(name)){
- unknown = false;
- toInstall.add(pkg);
- }
+ }
+
+ monitor.worked(2);
+
+ if(installerData.isInstallRequiredCompilers()){
+ reporter.logInfo("Checking required compilers for " + installerData.getName());
+ List<ISystemPackage> toInstall = new ArrayList<ISystemPackage>();
+ List<String> uninstallable = new ArrayList<String>();
+ for(String compiler : missingCompilers){
+ boolean unknown = true;//unknown package?
+ String name = inferPkgNameFromCompiler(compiler);
+ for(ISystemPackage pkg : sboxPackages){
+ if(pkg.getName().matches(name)){
+ unknown = false;
+ toInstall.add(pkg);
}
- if(unknown)
- uninstallable.add(compiler);
}
-
-
- if (uninstallable.size() > 0) {
- status = Activator.createStatus(IStatus.ERROR,
- "Could not find required packages for compilers: " + uninstallable
- + " you should add the repository to sources.list before using this installer, manually install them, or upgrade Scratchbox first.");
- reporter.log(status);
- multiStatus.add(status);
- return;
- }
-
- MachinePackageInstaller.installPackages(toInstall, true, shell, reporter, monitor);
+ if(unknown)
+ uninstallable.add(compiler);
}
- monitor.worked(3);
- } catch (CoreException e) {
- multiStatus.add(e.getStatus());
+
+ if (uninstallable.size() > 0) {
+ status = Activator.createStatus(IStatus.ERROR,
+ "Could not find required packages for compilers: " + uninstallable
+ + " you should add the repository to sources.list before using this installer, manually install them, or upgrade Scratchbox first.");
+ reporter.log(status);
+ multiStatus.add(status);
+ return;
+ }
+
+ workList.queueInstallPackages((ISystemPackage[]) toInstall.toArray(new ISystemPackage[toInstall.size()]));
}
+ monitor.worked(3);
+
+ // do the work
+ AptInstallerEngine engine = new AptInstallerEngine(shell, reporter, workList);
+ engine.state().setNetworkTimeout(30);
+
+ status = engine.run(new SubProgressMonitor(monitor, 17));
+
+ if (!status.isOK())
+ multiStatus.add(status);
+
}
/**
@@ -333,7 +340,7 @@
private String inferPkgNameFromDevkit(String devkit) {
String prefix = "scratchbox-devkit-";
//XXX HACK: to infer package names from devkit name
- if(devkit.matches("debian-*")){
+ if(devkit.matches("debian-.*")){
return prefix + "debian";
}
Modified: branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/DiabloInstallerScriptWorkPage.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/DiabloInstallerScriptWorkPage.java 2009-07-08 11:19:18 UTC (rev 1854)
+++ branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/DiabloInstallerScriptWorkPage.java 2009-07-08 20:34:09 UTC (rev 1855)
@@ -41,7 +41,6 @@
public class DiabloInstallerScriptWorkPage extends WizardWorkProgressPageBase {
private boolean forceUpgrade;
- private boolean updateLists;
private TimeoutUI timeoutUI;
private DiabloInstallerScriptWorkPage workPage = this;
private NokiaBinariesInstallerData installerData;
@@ -51,7 +50,6 @@
"Install Nokia-closed binaries packages",
"This page shows the installation process. Before finishing, configure the settings and verify your network preferences.");
forceUpgrade = true;
- updateLists = true;
timeoutUI = new TimeoutUI();
timeoutUI.setTimeout(30);
try {
@@ -82,21 +80,6 @@
}
/**
- * @return the updateLists
- */
- public boolean getUpdateLists() {
- return updateLists;
- }
-
- /**
- * @param updateLists
- * the updateLists to set
- */
- public void setUpdateLists(boolean updateLists) {
- this.updateLists = updateLists;
- }
-
- /**
* @return the timeout in seconds
*/
public int getTimeout() {
@@ -203,7 +186,6 @@
monitor.subTask("Running installer...");
NokiaBinariesInstallerEngine installer = new NokiaBinariesInstallerEngine(
installerData, buildMachine, targets, workPage
- .getUpdateLists(), workPage
.getForceUpgrade(), workPage.getTimeout(),
workPage.getProgressReporter());
Modified: branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/FremantleWorkPage.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/FremantleWorkPage.java 2009-07-08 11:19:18 UTC (rev 1854)
+++ branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/FremantleWorkPage.java 2009-07-08 20:34:09 UTC (rev 1855)
@@ -7,10 +7,14 @@
*
* Contributors:
* Fabrício S Epaminondas (UFCG)
- *
+ * Ed Swartz (Nokia)
*******************************************************************************/
package org.maemo.esbox.internal.scratchbox.sb1.ui.wizard.nokiabin;
+import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+import java.util.Set;
+
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.layout.GridDataFactory;
@@ -19,25 +23,24 @@
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.maemo.esbox.internal.scratchbox.sb1.Activator;
+import org.maemo.mica.common.core.MicaException;
import org.maemo.mica.common.core.Policy;
import org.maemo.mica.common.core.sdk.ISDKTarget;
import org.maemo.mica.common.ui.TimeoutUI;
import org.maemo.mica.internal.api.common.ui.wizards.WizardWorkProgressPageBase;
+import org.maemo.mica.internal.api.linux.packages.core.aptinstall.AptInstallerEngine;
+import org.maemo.mica.internal.api.linux.packages.core.aptinstall.IAptInstallerWorkList;
+import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.AptPackageManager;
+import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.AptPackageManagerRegistry;
+import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.IAptPackageManager;
+import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.IAptRepository;
-import java.lang.reflect.InvocationTargetException;
-import java.util.List;
-import java.util.Set;
-
/**
- *
- * FIXME this was repeated from {@link ProjectPackageInstallerWizardWorkPage}
- *
* @author Fabrício S Epaminondas (UFCG)
*
*/
public class FremantleWorkPage extends WizardWorkProgressPageBase {
private boolean forceUpgrade;
- private boolean updateLists;
private TimeoutUI timeoutUI;
private FremantleWorkPage workPage = this;
@@ -46,7 +49,6 @@
"Install Nokia-closed binaries packages",
"This page shows the installation process. Before finishing, configure the settings and verify your network preferences.");
forceUpgrade = true;
- updateLists = true;
timeoutUI = new TimeoutUI();
timeoutUI.setTimeout(30);
setWizard(wizard);
@@ -71,21 +73,6 @@
}
/**
- * @return the updateLists
- */
- public boolean getUpdateLists() {
- return updateLists;
- }
-
- /**
- * @param updateLists
- * the updateLists to set
- */
- public void setUpdateLists(boolean updateLists) {
- this.updateLists = updateLists;
- }
-
- /**
* @return the timeout in seconds
*/
public int getTimeout() {
@@ -161,7 +148,6 @@
* @seeorg.maemo.esbox.internal.scratchbox.sb1.ui.wizard.nokiabin.
* INokiaBinariesWizardDelegate#doWork()
*/
- @SuppressWarnings("unchecked")
public IStatus doWork() {
final IStatus[] statuses = { Policy.getCancelStatus(Activator
@@ -170,29 +156,29 @@
getContainer().showPage(workPage);
workPage.showAndClearLog();
- final List<ISDKTarget> targets = (List<ISDKTarget>) getWizard()
- .getParameter("targets_selection");
-
getContainer().run(true, true, new IRunnableWithProgress() {
public void run(IProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
monitor.subTask("Running installer...");
- NokiaBinariesPackageInstaller installer = new NokiaBinariesPackageInstaller(
- targets, (Set<String>) getWizard().getParameter(
- "packages"), getWizard().getParameter(
- "repoURL").toString(), workPage
- .getUpdateLists(), workPage
- .getForceUpgrade(), workPage.getTimeout(),
- workPage.getProgressReporter());
-
- IStatus status = null;
- installer.setInteractiveMode(false);
- status = installer.ensureInstalledPackages(getShell(),
- monitor);
-
- if (status != null && status.matches(IStatus.CANCEL))
+
+ IAptInstallerWorkList workList;
+ IStatus status;
+ try {
+ workList = gatherWork();
+
+ AptInstallerEngine engine = new AptInstallerEngine(getShell(),
+ workPage.getProgressReporter(), workList);
+ engine.state().setNetworkTimeout(workPage.getTimeout());
+
+ status = engine.run(monitor);
+ } catch (MicaException e) {
+ status = Activator.createErrorStatus("Unexpected error:", e);
+ workPage.getProgressReporter().log(status);
+ }
+
+ if (status.matches(IStatus.CANCEL) || monitor.isCanceled())
status = Activator.createErrorStatus(
"The installation was canceled.", null);
@@ -210,4 +196,46 @@
}
return statuses[0];
}
+
+ /**
+ * Gather work needed to make package changes
+ * @param string
+ * @return new {@link IAptInstallerWorkList}
+ * @throws MicaException for serious problem
+ */
+ @SuppressWarnings("unchecked")
+ protected IAptInstallerWorkList gatherWork() throws MicaException {
+ IAptInstallerWorkList workList = AptInstallerEngine.newWorkList();
+
+ final List<ISDKTarget> targets = (List<ISDKTarget>) getWizard()
+ .getParameter("targets_selection");
+
+ Set<String> packages = (Set<String>) getWizard().getParameter("packages");
+
+ for (ISDKTarget target : targets) {
+ IAptPackageManager manager = AptPackageManagerRegistry.getInstance().getPackageManagerFor(target);
+ if (manager == null) {
+ throw new MicaException(target + " does not support apt");
+ }
+
+ String repoURL = getWizard().getParameter("repoURL").toString();
+
+ IAptRepository repository = AptPackageManager.createRepositoryFromString(
+ manager, null, repoURL);
+ if (repository == null) {
+ throw new MicaException("Cannot create repository from " + repoURL);
+ }
+
+ workList.queueAddRepository(manager, repository);
+
+ workList.queueInstallUnknownPackages(manager,
+ (String[]) packages.toArray(new String[packages.size()]));
+
+ if (forceUpgrade) {
+ workList.queueUpgradePackages(manager);
+ }
+ }
+ return workList;
+
+ }
}
Modified: branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/NokiaBinariesInstallerEngine.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/NokiaBinariesInstallerEngine.java 2009-07-08 11:19:18 UTC (rev 1854)
+++ branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/NokiaBinariesInstallerEngine.java 2009-07-08 20:34:09 UTC (rev 1855)
@@ -7,7 +7,7 @@
*
* Contributors:
* Fabrício S Epaminondas (UFCG)
- *
+ * Ed Swartz (Nokia)
*******************************************************************************/
package org.maemo.esbox.internal.scratchbox.sb1.ui.wizard.nokiabin;
@@ -22,6 +22,12 @@
import org.maemo.mica.common.core.sdk.ISDKTarget;
import org.maemo.mica.common.core.ui.IProgressReporter;
import org.maemo.mica.internal.api.common.core.GeneralUtils;
+import org.maemo.mica.internal.api.linux.packages.core.aptinstall.AptInstallerEngine;
+import org.maemo.mica.internal.api.linux.packages.core.aptinstall.IAptInstallerWorkList;
+import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.AptPackageManager;
+import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.AptPackageManagerRegistry;
+import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.IAptPackageManager;
+import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.IAptRepository;
import java.net.URL;
import java.util.List;
@@ -34,7 +40,6 @@
private NokiaBinariesInstallerData installerData;
private List<ISDKTarget> targets;
- private boolean updateLists;
private boolean forceUpgrade;
private int timeout;
private IProgressReporter reporter;
@@ -53,19 +58,18 @@
* @param buildMachine
* @param targets
* @param parameter
- * @param updateLists
* @param forceUpgrade
* @param timeout
* @param reporter
*/
public NokiaBinariesInstallerEngine(
- NokiaBinariesInstallerData installerData, IBuildMachine buildMachine,List<ISDKTarget> targets,
- boolean updateLists, boolean forceUpgrade, int timeout,
+ NokiaBinariesInstallerData installerData, IBuildMachine buildMachine,
+ List<ISDKTarget> targets,
+ boolean forceUpgrade, int timeout,
IProgressReporter reporter) {
this.installerData = installerData;
this.buildMachine = buildMachine;
this.targets = targets;
- this.updateLists = updateLists;
this.forceUpgrade = forceUpgrade;
this.timeout = timeout;
this.reporter = reporter;
@@ -127,34 +131,31 @@
}
//Running package installer
-packinstall:if (exit != 0) {
+ if (exit != 0) {
multiStatus.add(Activator.createErrorStatus("Installation script failed with exit code " + exit, null));
} else {
String repoURL = nokiaBinariesInstallerScriptMonitor.getRepositoryURL();
reporter.logInfo("Nokia packages decompressed on: " + repoURL);
- reporter.logInfo("Installing nokia packages from local debian repository");
- monitor.subTask("Installing nokia packages from local debian repository");
-
-
- NokiaBinariesPackageInstaller installer = new NokiaBinariesPackageInstaller(
- targets,
- installerData.getPackages(),
- repoURL,
- updateLists,
- forceUpgrade,
- timeout,
- reporter);
-
- if (monitor.isCanceled()) {
- break packinstall;
+ reporter.logInfo("Installing Nokia packages from local Debian repository");
+ monitor.subTask("Installing Nokia packages from local Debian repository");
+
+ IAptInstallerWorkList workList;
+ try {
+ workList = gatherWork(repoURL);
+
+ AptInstallerEngine engine = new AptInstallerEngine(shell, reporter, workList);
+ engine.state().setNetworkTimeout(timeout);
+
+ status = engine.run(monitor);
+ } catch (MicaException e) {
+ status = Activator.createErrorStatus("Unexpected error:", e);
+ reporter.log(status);
}
- installer.setInteractiveMode(false);
- status = installer.ensureInstalledPackages(shell, monitor);
- multiStatus.add(status);
-
+ if (!status.isOK())
+ multiStatus.add(status);
}
} finally {
@@ -172,6 +173,38 @@
/**
+ * Construct the worklist for the apt operations
+ * @param repoURL
+ * @return new worklist
+ * @throws MicaException if there are serious problems
+ */
+ private IAptInstallerWorkList gatherWork(String repoURL) throws MicaException {
+ IAptInstallerWorkList workList = AptInstallerEngine.newWorkList();
+ for (ISDKTarget target : targets) {
+ IAptPackageManager manager = AptPackageManagerRegistry.getInstance().getPackageManagerFor(target);
+ if (manager == null) {
+ throw new MicaException("Unexpected error: " + target + " does not support apt");
+ }
+
+ IAptRepository repository = AptPackageManager.createRepositoryFromString(
+ manager, null, repoURL);
+ if (repository == null) {
+ throw new MicaException("Unexpected error: cannot create repository from " + repoURL);
+ }
+
+ workList.queueAddRepository(manager, repository);
+
+ workList.queueInstallUnknownPackages(manager,
+ (String[]) installerData.getPackages().toArray(new String[installerData.getPackages().size()]));
+
+ if (forceUpgrade) {
+ workList.queueUpgradePackages(manager);
+ }
+ }
+ return workList;
+ }
+
+ /**
* @param multiStatus
* @param monitor
* @param installerURL
Deleted: branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/NokiaBinariesPackageInstaller.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/NokiaBinariesPackageInstaller.java 2009-07-08 11:19:18 UTC (rev 1854)
+++ branches/work_Ed/org.maemo.esbox.scratchbox.sb1/src/org/maemo/esbox/internal/scratchbox/sb1/ui/wizard/nokiabin/NokiaBinariesPackageInstaller.java 2009-07-08 20:34:09 UTC (rev 1855)
@@ -1,125 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Nokia Corporation
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Fabrício S Epaminondas (UFCG)
- *
- *******************************************************************************/
-package org.maemo.esbox.internal.scratchbox.sb1.ui.wizard.nokiabin;
-
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.swt.widgets.Shell;
-import org.maemo.esbox.internal.scratchbox.sb1.Activator;
-import org.maemo.mica.common.core.sdk.*;
-import org.maemo.mica.common.core.ui.IProgressReporter;
-import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.AptPackageManagerRegistry;
-import org.maemo.mica.internal.api.linux.packages.core.aptpkgconfig.IAptPackageManager;
-import org.maemo.mica.internal.api.linux.packages.ui.aptinstall.MachinePackageInstaller;
-
-import java.text.MessageFormat;
-import java.util.*;
-
-
-/**
- *
- * @author Fabrício S Epaminondas (UFCG)
- *
- */
-public class NokiaBinariesPackageInstaller extends MachinePackageInstaller {
-
- private Queue<ISDKTarget> sdkTargetsQueue;
-
- /**
- * Create the installer engine.
- * @param sdkTargets the set of targets to scan and install packages
- * @param nokia meta-packages to install
- * @param repoURL package repository URL
- * @param updateLists update package lists
- * @param forceUpgrade upgrade existing packages
- * @param timeout
- * @param reporter interface for reporting info, warning, and error messages
- * NOTE: the class still invokes UI for asking questions, unless JUnit is running,
- * in which case all questions are answered "yes".
- */
- public NokiaBinariesPackageInstaller(
- List<ISDKTarget> sdkTargets,
- Set<String> packages, String repoURL,
- boolean updateLists, boolean forceUpgrade,
- int timeout,
- IProgressReporter reporter) {
- super(packages, new String[]{repoURL}, null, updateLists, forceUpgrade, true, timeout, reporter);
-
- if(sdkTargets ==null || sdkTargets.isEmpty())
- throw new IllegalStateException("SDK target list must contains any sdk target");
-
- this.sdkTargetsQueue = new LinkedList<ISDKTarget>();
- this.sdkTargetsQueue.addAll(sdkTargets);
- }
-
- @Override
- public IStatus ensureInstalledPackages(Shell shell, IProgressMonitor monitor) {
- if (monitor == null)
- monitor = new NullProgressMonitor();
-
- monitor.beginTask("", sdkTargetsQueue.size());
-
- MultiStatus multiStatus = new MultiStatus(Activator.PLUGIN_ID, 0,
- "Problems encountered while installing packages", null);
-
- while(!sdkTargetsQueue.isEmpty()){
- ISDKTarget target = sdkTargetsQueue.peek();
- setMachine(target.getMachine());
- IStatus status = super.runPackageInstaller(shell, new SubProgressMonitor(monitor, 1));
- sdkTargetsQueue.poll();
- multiStatus.add(status);
- if (monitor.isCanceled())
- break;
- }
- monitor.done();
-
- if (multiStatus.isOK() || multiStatus.matches(IStatus.INFO)) {
- multiStatus = new MultiStatus(Activator.PLUGIN_ID, 0, multiStatus
- .getChildren(), "Installation was successful.", null);
- }
- return multiStatus;
- }
-
- /**
- * Get the package managers for the currently SDK target in processing.
- * @return
- */
- @Override
- protected IAptPackageManager getPackageManager(IProgressMonitor monitor) {
- monitor.beginTask("", 1);
- ISDKTarget target = sdkTargetsQueue.peek();
- SDKUtils.establishPlatform(target,
- new SubProgressMonitor(monitor, 1));
- if (monitor.isCanceled())
- return null;
-
- if (ISDKPlatform.NAME_UNKNOWN.equals(target.getPlatform().getName())) {
- reporter
- .log(Activator
- .createErrorStatus(
- MessageFormat
- .format(
- "Cannot determine the platform for {0}; excluding it from package operations",
- target.getName()), null));
- return null;
- }
-
- monitor.subTask("Scanning packages in " + target.getName() + "...");
- reporter.logInfo("Scanning packages in " + target.getName());
- IAptPackageManager manager = AptPackageManagerRegistry.getInstance()
- .getPackageManagerFor(target);
- if (monitor.isCanceled() || manager == null)
- return null;
-
- return manager;
- }
-}
More information about the Esbox-commits
mailing list