The following commit has been merged in the master branch:
commit c854a3da4689c9cf1e9b0747d9277a5122f1f8b2
Author: Jakub Adam <[email protected]>
Date:   Fri Aug 3 19:16:30 2012 +0200

    Simplified rebuild-prepare-install-profile-job-3-6.patch
    
    Works around dpkg bug #683547

diff --git a/debian/changelog b/debian/changelog
index 5b45564..52cd851 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,6 +2,8 @@ eclipse-mylyn (3.8.1-1) UNRELEASED; urgency=low
 
   * New upstream release.
   * Refreshed d/patches/debian-orbit-deps.patch.
+  * Simplified rebuild-prepare-install-profile-job-3-6.patch to work
+    around dpkg bug #683547.
 
  -- Jakub Adam <[email protected]>  Mon, 30 Jul 2012 19:48:34 +0200
 
diff --git a/debian/patches/rebuild-prepare-install-profile-job-3-6.patch 
b/debian/patches/rebuild-prepare-install-profile-job-3-6.patch
index e3937a5..76bfe01 100644
--- a/debian/patches/rebuild-prepare-install-profile-job-3-6.patch
+++ b/debian/patches/rebuild-prepare-install-profile-job-3-6.patch
@@ -1,464 +1,54 @@
 From: Jakub Adam <[email protected]>
-Date: Sun, 6 Nov 2011 21:10:43 +0100
+Date: Fri, 3 Aug 2012 19:13:14 +0200
 Subject: rebuild-prepare-install-profile-job-3-6
 
 ---
- .../build.properties                               |    8 +-
- .../ui/PrepareInstallProfileJob_e_3_6.java         |  425 --------------------
- .../mylyn/internal/discovery/ui/DiscoveryUi.java   |   11 +-
- .../ui/PrepareInstallProfileJob_e_3_6.java         |  425 ++++++++++++++++++++
- 4 files changed, 427 insertions(+), 442 deletions(-)
- delete mode 100644 
org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/src-e3.6/org/eclipse/mylyn/internal/discovery/ui/PrepareInstallProfileJob_e_3_6.java
- create mode 100644 
org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/src/org/eclipse/mylyn/internal/discovery/ui/PrepareInstallProfileJob_e_3_6.java
+ .../org.eclipse.mylyn.discovery.ui/build.properties         |    5 ++---
+ .../org.eclipse.mylyn.discovery.ui/customBuildCallbacks.xml |    8 --------
+ .../eclipse/mylyn/internal/discovery/ui/DiscoveryUi.java    |   11 +----------
+ 3 files changed, 3 insertions(+), 21 deletions(-)
 
 diff --git 
a/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/build.properties 
b/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/build.properties
-index ebba0e6..d4b87d9 100644
+index ebba0e6..b4fb17c 100644
 --- a/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/build.properties
 +++ b/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/build.properties
-@@ -15,11 +15,5 @@ bin.includes = META-INF/,\
+@@ -8,15 +8,14 @@
+ # Contributors:
+ #     Tasktop Technologies - initial API and implementation
+ 
###############################################################################
+-source.. = src/
++source.. = src/,\
++           src-e3.6/
+ output.. = bin/
+ bin.includes = META-INF/,\
+                .,\
                 plugin.xml,\
                 about.html,\
                 icons/,\
 -               lib-e3.5/,\
 -               lib-e3.6/,\
                 plugin.properties
--src.includes = about.html,\
--               src-e3.5/,\
--               src-e3.6/
--customBuildCallbacks=customBuildCallbacks.xml
--customBuildCallbacks.failonerror=true
-+src.includes = about.html
-diff --git 
a/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/src-e3.6/org/eclipse/mylyn/internal/discovery/ui/PrepareInstallProfileJob_e_3_6.java
 
b/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/src-e3.6/org/eclipse/mylyn/internal/discovery/ui/PrepareInstallProfileJob_e_3_6.java
-deleted file mode 100644
-index afaa427..0000000
---- 
a/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/src-e3.6/org/eclipse/mylyn/internal/discovery/ui/PrepareInstallProfileJob_e_3_6.java
-+++ /dev/null
-@@ -1,425 +0,0 @@
--/*******************************************************************************
-- * Copyright (c) 2009, 2010 Tasktop Technologies and others.
-- * 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:
-- *     Tasktop Technologies - initial API and implementation
-- 
*******************************************************************************/
--package org.eclipse.mylyn.internal.discovery.ui;
--
--import java.lang.reflect.InvocationTargetException;
--import java.net.MalformedURLException;
--import java.net.URI;
--import java.net.URISyntaxException;
--import java.net.URL;
--import java.util.ArrayList;
--import java.util.Arrays;
--import java.util.HashMap;
--import java.util.HashSet;
--import java.util.Iterator;
--import java.util.List;
--import java.util.Map;
--import java.util.Set;
--import java.util.regex.Pattern;
--
--import org.eclipse.core.runtime.CoreException;
--import org.eclipse.core.runtime.IProgressMonitor;
--import org.eclipse.core.runtime.IStatus;
--import org.eclipse.core.runtime.OperationCanceledException;
--import org.eclipse.core.runtime.Status;
--import org.eclipse.core.runtime.SubMonitor;
--import org.eclipse.core.runtime.SubProgressMonitor;
--import org.eclipse.equinox.internal.p2.ui.ProvUI;
--import org.eclipse.equinox.p2.core.ProvisionException;
--import org.eclipse.equinox.p2.engine.IProfile;
--import org.eclipse.equinox.p2.metadata.IInstallableUnit;
--import org.eclipse.equinox.p2.metadata.Version;
--import org.eclipse.equinox.p2.operations.InstallOperation;
--import org.eclipse.equinox.p2.operations.ProvisioningSession;
--import org.eclipse.equinox.p2.operations.RepositoryTracker;
--import org.eclipse.equinox.p2.operations.UninstallOperation;
--import org.eclipse.equinox.p2.query.IQuery;
--import org.eclipse.equinox.p2.query.IQueryResult;
--import org.eclipse.equinox.p2.query.QueryUtil;
--import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
--import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
--import org.eclipse.equinox.p2.ui.ProvisioningUI;
--import org.eclipse.jface.dialogs.MessageDialog;
--import org.eclipse.mylyn.internal.discovery.core.model.ConnectorDescriptor;
--import org.eclipse.mylyn.internal.discovery.ui.AbstractInstallJob;
--import org.eclipse.mylyn.internal.discovery.ui.DiscoveryUi;
--import org.eclipse.mylyn.internal.discovery.ui.InstalledItem;
--import org.eclipse.mylyn.internal.discovery.ui.UninstallRequest;
--import org.eclipse.mylyn.internal.discovery.ui.util.DiscoveryUiUtil;
--import org.eclipse.mylyn.internal.discovery.ui.wizards.Messages;
--import org.eclipse.osgi.util.NLS;
--import org.eclipse.swt.widgets.Display;
--
--/**
-- * A job that configures a p2 {@link #getInstallAction() install action} for 
installing one or more
-- * {@link ConnectorDescriptor connectors}. The bulk of the installation work 
is done by p2; this class just sets up the
-- * p2 repository meta-data and selects the appropriate features to install. 
After running the job the
-- * {@link #getInstallAction() install action} must be run to perform the 
installation.
-- * 
-- * @author David Green
-- * @author Steffen Pingel
-- */
--class PrepareInstallProfileJob_e_3_6 extends AbstractInstallJob {
--
--      private final List<ConnectorDescriptor> installableConnectors;
--
--      private final ProvisioningUI provisioningUI;
--
--      private Set<URI> repositoryLocations;
--
--      public PrepareInstallProfileJob_e_3_6(List<ConnectorDescriptor> 
installableConnectors) {
--              if (installableConnectors == null) {
--                      throw new IllegalArgumentException();
--              }
--              this.installableConnectors = new 
ArrayList<ConnectorDescriptor>(installableConnectors);
--              this.provisioningUI = ProvisioningUI.getDefaultUI();
--      }
--
--      public void run(IProgressMonitor progressMonitor) throws 
InvocationTargetException, InterruptedException {
--              if (installableConnectors.isEmpty()) {
--                      throw new IllegalArgumentException();
--              }
--
--              try {
--                      SubMonitor monitor = 
SubMonitor.convert(progressMonitor, 
Messages.InstallConnectorsJob_task_configuring,
--                                      100);
--                      try {
--                              final IInstallableUnit[] ius = 
computeInstallableUnits(monitor.newChild(50));
--
--                              checkCancelled(monitor);
--
--                              final InstallOperation installOperation = 
resolveInstall(monitor.newChild(50), ius,
--                                              repositoryLocations.toArray(new 
URI[0]));
--
--                              checkCancelled(monitor);
--
--                              Display.getDefault().asyncExec(new Runnable() {
--                                      public void run() {
--                                              
provisioningUI.openInstallWizard(Arrays.asList(ius), installOperation, null);
--                                      }
--                              });
--                      } finally {
--                              monitor.done();
--                      }
--              } catch (OperationCanceledException e) {
--                      throw new InterruptedException();
--              } catch (Exception e) {
--                      throw new InvocationTargetException(e);
--              }
--      }
--
--      @Override
--      public IStatus uninstall(UninstallRequest request, IProgressMonitor 
progressMonitor)
--                      throws InvocationTargetException, InterruptedException {
--              IProfile profile = 
ProvUI.getProfileRegistry(ProvisioningUI.getDefaultUI().getSession()).getProfile(
--                              ProvisioningUI.getDefaultUI().getProfileId());
--              if (profile == null) {
--                      throw new IllegalStateException("No valid profile 
defined");
--              }
--
--              try {
--                      SubMonitor monitor = 
SubMonitor.convert(progressMonitor, 
Messages.InstallConnectorsJob_task_configuring,
--                                      100);
--                      try {
--                              repositoryLocations = new 
HashSet<URI>(Arrays.asList(provisioningUI.getRepositoryTracker()
--                                              
.getKnownRepositories(provisioningUI.getSession())));
--
--                              final List<IInstallableUnit> ius = new 
ArrayList<IInstallableUnit>();
--                              IQueryResult<IInstallableUnit> result = 
profile.available(QueryUtil.createIUGroupQuery(), monitor);
--                              for (Iterator<IInstallableUnit> it = 
result.iterator(); it.hasNext();) {
--                                      IInstallableUnit iu = it.next();
--                                      try {
--                                              org.osgi.framework.Version 
version = new org.osgi.framework.Version(iu.getVersion()
--                                                              .getOriginal());
--                                              InstalledItem<IInstallableUnit> 
item = new InstalledItem<IInstallableUnit>(iu, iu.getId(),
--                                                              version);
--                                              if (request.select(item)) {
--                                                      ius.add(iu);
--                                              }
--                                      } catch (IllegalArgumentException e) {
--                                              // ignore
--                                      }
--                              }
--
--                              checkCancelled(monitor);
--
--                              if (ius.size() == 0) {
--                                      return Status.CANCEL_STATUS;
--                              }
--
--                              final UninstallOperation uninstallOperation = 
resolveUninstall(monitor.newChild(50),
--                                              ius.toArray(new 
IInstallableUnit[0]), repositoryLocations.toArray(new URI[0]));
--
--                              checkCancelled(monitor);
--
--                              return 
uninstallOperation.getProvisioningJob(null).runModal(monitor);
--                      } finally {
--                              monitor.done();
--                      }
--              } catch (OperationCanceledException e) {
--                      throw new InterruptedException();
--              } catch (Exception e) {
--                      throw new InvocationTargetException(e);
--              }
--      }
--
--      private void checkCancelled(IProgressMonitor monitor) {
--              if (monitor.isCanceled()) {
--                      throw new OperationCanceledException();
--              }
--      }
--
--      private UninstallOperation resolveUninstall(IProgressMonitor monitor, 
final IInstallableUnit[] ius,
--                      URI[] repositories) throws CoreException {
--              final UninstallOperation uninstallOperation = 
provisioningUI.getUninstallOperation(Arrays.asList(ius),
--                              repositories);
--              IStatus operationStatus = uninstallOperation.resolveModal(new 
SubProgressMonitor(monitor,
--                              installableConnectors.size()));
--              if (operationStatus.getSeverity() > IStatus.WARNING) {
--                      throw new CoreException(operationStatus);
--              }
--              return uninstallOperation;
--      }
--
--      private InstallOperation resolveInstall(IProgressMonitor monitor, final 
IInstallableUnit[] ius, URI[] repositories)
--                      throws CoreException {
--              final InstallOperation installOperation = 
provisioningUI.getInstallOperation(Arrays.asList(ius), repositories);
--              IStatus operationStatus = installOperation.resolveModal(new 
SubProgressMonitor(monitor,
--                              installableConnectors.size()));
--              if (operationStatus.getSeverity() > IStatus.WARNING) {
--                      throw new CoreException(operationStatus);
--              }
--              return installOperation;
--      }
--
--      public IInstallableUnit[] computeInstallableUnits(SubMonitor monitor) 
throws CoreException {
--              try {
--                      monitor.setWorkRemaining(100);
--                      // add repository urls and load meta data
--                      List<IMetadataRepository> repositories = 
addRepositories(monitor.newChild(50));
--                      final List<IInstallableUnit> installableUnits = 
queryInstallableUnits(monitor.newChild(50), repositories);
--                      removeOldVersions(installableUnits);
--                      checkForUnavailable(installableUnits);
--                      return installableUnits.toArray(new 
IInstallableUnit[installableUnits.size()]);
--
--//                    MultiStatus status = new 
MultiStatus(DiscoveryUi.ID_PLUGIN, 0, Messages.PrepareInstallProfileJob_ok, 
null);
--//                    ius = installableUnits.toArray(new 
IInstallableUnit[installableUnits.size()]);
--//                    ProfileChangeRequest profileChangeRequest = 
InstallAction.computeProfileChangeRequest(ius, profileId,
--//                                    status, new SubProgressMonitor(monitor, 
installableConnectors.size()));
--//                    if (status.getSeverity() > IStatus.WARNING) {
--//                            throw new CoreException(status);
--//                    }
--//                    if (profileChangeRequest == null) {
--//                            // failed but no indication as to why
--//                            throw new CoreException(new 
Status(IStatus.ERROR, DiscoveryUi.ID_PLUGIN,
--//                                            
Messages.PrepareInstallProfileJob_computeProfileChangeRequestFailed, null));
--//                    }
--//                    PlannerResolutionOperation operation = new 
PlannerResolutionOperation(
--//                                    
Messages.PrepareInstallProfileJob_calculatingRequirements, profileId, 
profileChangeRequest, null,
--//                                    status, true);
--//                    IStatus operationStatus = operation.execute(new 
SubProgressMonitor(monitor, installableConnectors.size()));
--//                    if (operationStatus.getSeverity() > IStatus.WARNING) {
--//                            throw new CoreException(operationStatus);
--//                    }
--//
--//                    plannerResolutionOperation = operation;
--
--              } catch (URISyntaxException e) {
--                      // should never happen, since we already validated URLs.
--                      throw new CoreException(new Status(IStatus.ERROR, 
DiscoveryUi.ID_PLUGIN,
--                                      
Messages.InstallConnectorsJob_unexpectedError_url, e));
--              } catch (MalformedURLException e) {
--                      // should never happen, since we already validated URLs.
--                      throw new CoreException(new Status(IStatus.ERROR, 
DiscoveryUi.ID_PLUGIN,
--                                      
Messages.InstallConnectorsJob_unexpectedError_url, e));
--              } finally {
--                      monitor.done();
--              }
--      }
--
--      /**
--       * Verifies that we found what we were looking for: it's possible that 
we have connector descriptors that are no
--       * longer available on their respective sites. In that case we must 
inform the user. Unfortunately this is the
--       * earliest point at which we can know.
--       */
--      private void checkForUnavailable(final List<IInstallableUnit> 
installableUnits) throws CoreException {
--              // at least one selected connector could not be found in a 
repository
--              Set<String> foundIds = new HashSet<String>();
--              for (IInstallableUnit unit : installableUnits) {
--                      foundIds.add(unit.getId());
--              }
--
--              String message = ""; //$NON-NLS-1$
--              String detailedMessage = ""; //$NON-NLS-1$
--              for (ConnectorDescriptor descriptor : installableConnectors) {
--                      StringBuilder unavailableIds = null;
--                      for (String id : descriptor.getInstallableUnits()) {
--                              if (!foundIds.contains(id)) {
--                                      if (unavailableIds == null) {
--                                              unavailableIds = new 
StringBuilder();
--                                      } else {
--                                              
unavailableIds.append(Messages.InstallConnectorsJob_commaSeparator);
--                                      }
--                                      unavailableIds.append(id);
--                              }
--                      }
--                      if (unavailableIds != null) {
--                              if (message.length() > 0) {
--                                      message += 
Messages.InstallConnectorsJob_commaSeparator;
--                              }
--                              message += descriptor.getName();
--
--                              if (detailedMessage.length() > 0) {
--                                      detailedMessage += 
Messages.InstallConnectorsJob_commaSeparator;
--                              }
--                              detailedMessage += 
NLS.bind(Messages.PrepareInstallProfileJob_notFoundDescriptorDetail, new 
Object[] {
--                                              descriptor.getName(), 
unavailableIds.toString(), descriptor.getSiteUrl() });
--                      }
--              }
--
--              if (message.length() > 0) {
--                      // instead of aborting here we ask the user if they 
wish to proceed anyways
--                      final boolean[] okayToProceed = new boolean[1];
--                      final String finalMessage = message;
--                      Display.getDefault().syncExec(new Runnable() {
--                              public void run() {
--                                      okayToProceed[0] = 
MessageDialog.openQuestion(DiscoveryUiUtil.getShell(),
--                                                      
Messages.InstallConnectorsJob_questionProceed,
--                                                      
NLS.bind(Messages.InstallConnectorsJob_questionProceed_long, new Object[] { 
finalMessage }));
--                              }
--                      });
--                      if (!okayToProceed[0]) {
--                              throw new CoreException(new 
Status(IStatus.ERROR, DiscoveryUi.ID_PLUGIN, NLS.bind(
--                                              
Messages.InstallConnectorsJob_connectorsNotAvailable, detailedMessage), null));
--                      }
--              }
--      }
--
--      /**
--       * Filters those installable units that have a duplicate in the list 
with a higher version number. it's possible
--       * that some repositories will host multiple versions of a particular 
feature. we assume that the user wants the
--       * highest version.
--       */
--      private void removeOldVersions(final List<IInstallableUnit> 
installableUnits) {
--              Map<String, Version> symbolicNameToVersion = new 
HashMap<String, Version>();
--              for (IInstallableUnit unit : installableUnits) {
--                      Version version = 
symbolicNameToVersion.get(unit.getId());
--                      if (version == null || 
version.compareTo(unit.getVersion()) < 0) {
--                              symbolicNameToVersion.put(unit.getId(), 
unit.getVersion());
--                      }
--              }
--              if (symbolicNameToVersion.size() != installableUnits.size()) {
--                      for (IInstallableUnit unit : new 
ArrayList<IInstallableUnit>(installableUnits)) {
--                              Version version = 
symbolicNameToVersion.get(unit.getId());
--                              if (!version.equals(unit.getVersion())) {
--                                      installableUnits.remove(unit);
--                              }
--                      }
--              }
--      }
--
--      /**
--       * Perform a query to get the installable units. This causes p2 to 
determine what features are available in each
--       * repository. We select installable units by matching both the feature 
id and the repository; it is possible though
--       * unlikely that the same feature id is available from more than one of 
the selected repositories, and we must
--       * ensure that the user gets the one that they asked for.
--       */
--      private List<IInstallableUnit> queryInstallableUnits(SubMonitor 
monitor, List<IMetadataRepository> repositories)
--                      throws URISyntaxException {
--              final List<IInstallableUnit> installableUnits = new 
ArrayList<IInstallableUnit>();
--
--              monitor.setWorkRemaining(repositories.size());
--              for (final IMetadataRepository repository : repositories) {
--                      checkCancelled(monitor);
--                      final Set<String> installableUnitIdsThisRepository = 
getDescriptorIds(repository);
--                      IQuery<IInstallableUnit> query = 
QueryUtil.createIUGroupQuery();
--                      IQueryResult<IInstallableUnit> result = 
repository.query(query, monitor.newChild(1));
--                      for (Iterator<IInstallableUnit> iter = 
result.iterator(); iter.hasNext();) {
--                              IInstallableUnit iu = iter.next();
--                              String id = iu.getId();
--                              if 
(installableUnitIdsThisRepository.contains(id)) {
--                                      installableUnits.add(iu);
--                              }
--                      }
--              }
--              return installableUnits;
--      }
--
--      private List<IMetadataRepository> addRepositories(SubMonitor monitor) 
throws MalformedURLException,
--                      URISyntaxException, ProvisionException {
--              // tell p2 that it's okay to use these repositories
--              ProvisioningSession session = 
ProvisioningUI.getDefaultUI().getSession();
--              RepositoryTracker repositoryTracker = 
ProvisioningUI.getDefaultUI().getRepositoryTracker();
--              repositoryLocations = new HashSet<URI>();
--              monitor.setWorkRemaining(installableConnectors.size() * 5);
--              for (ConnectorDescriptor descriptor : installableConnectors) {
--                      URI uri = new URL(descriptor.getSiteUrl()).toURI();
--                      if (repositoryLocations.add(uri)) {
--                              checkCancelled(monitor);
--                              repositoryTracker.addRepository(uri, null, 
session);
--                      }
--                      monitor.worked(1);
--              }
--
--              // add selected repositories to resolve dependencies 
--              URI[] knownRepositories = 
repositoryTracker.getKnownRepositories(session);
--              if (knownRepositories != null) {
--                      for (URI uri : knownRepositories) {
--                              if 
(Pattern.matches("http://download.eclipse.org/releases/.*";, uri.toString())) {
--                                      repositoryLocations.add(uri);
--                              }
--                      }
--              }
--
--              // fetch meta-data for these repositories
--              ArrayList<IMetadataRepository> repositories = new 
ArrayList<IMetadataRepository>();
--              monitor.setWorkRemaining(repositories.size());
--              IMetadataRepositoryManager manager = 
(IMetadataRepositoryManager) session.getProvisioningAgent().getService(
--                              IMetadataRepositoryManager.SERVICE_NAME);
--              for (URI uri : repositoryLocations) {
--                      checkCancelled(monitor);
--                      IMetadataRepository repository = 
manager.loadRepository(uri, monitor.newChild(1));
--                      repositories.add(repository);
--              }
--              return repositories;
--      }
--
--      private Set<String> getDescriptorIds(final IMetadataRepository 
repository) throws URISyntaxException {
--              final Set<String> installableUnitIdsThisRepository = new 
HashSet<String>();
--              // determine all installable units for this repository
--              for (ConnectorDescriptor descriptor : installableConnectors) {
--                      try {
--                              if (repository.getLocation().equals(new 
URL(descriptor.getSiteUrl()).toURI())) {
--                                      
installableUnitIdsThisRepository.addAll(descriptor.getInstallableUnits());
--                              }
--                      } catch (MalformedURLException e) {
--                              // will never happen, ignore
--                      }
--              }
--              return installableUnitIdsThisRepository;
--      }
--
--      @Override
--      public Set<String> getInstalledFeatures(IProgressMonitor monitor) {
--              Set<String> features = new HashSet<String>();
--              IProfile profile = 
ProvUI.getProfileRegistry(ProvisioningUI.getDefaultUI().getSession()).getProfile(
--                              ProvisioningUI.getDefaultUI().getProfileId());
--              if (profile != null) {
--                      IQueryResult<IInstallableUnit> result = 
profile.available(QueryUtil.createIUGroupQuery(), monitor);
--                      for (Iterator<IInstallableUnit> it = result.iterator(); 
it.hasNext();) {
--                              IInstallableUnit unit = it.next();
--                              features.add(unit.getId());
--                      }
--              }
--              return features;
--      }
--
--}
+ src.includes = about.html,\
+                src-e3.5/,\
+diff --git 
a/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/customBuildCallbacks.xml
 
b/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/customBuildCallbacks.xml
+index 003b95d..85bbd15 100644
+--- 
a/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/customBuildCallbacks.xml
++++ 
b/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/customBuildCallbacks.xml
+@@ -27,14 +27,6 @@
+       <!--   build.result.folder - folder to contain the build results        
   -->
+       <!-- 
===================================================================== -->
+       <target name="pre.build.jars">
+-              <uptodate property="isUpToDate-e3.5"
+-                          
srcfile="src-e3.5/org/eclipse/mylyn/internal/discovery/ui/PrepareInstallProfileJob_e_3_5.java"
+-                          
targetfile="lib-e3.5/org/eclipse/mylyn/internal/discovery/ui/PrepareInstallProfileJob_e_3_5.class"/>
+-              <fail unless="isUpToDate-e3.5"/>
+-              <uptodate property="isUpToDate-e3.6"
+-                          
srcfile="src-e3.6/org/eclipse/mylyn/internal/discovery/ui/PrepareInstallProfileJob_e_3_6.java"
+-                          
targetfile="lib-e3.6/org/eclipse/mylyn/internal/discovery/ui/PrepareInstallProfileJob_e_3_6.class"/>
+-              <fail unless="isUpToDate-e3.6"/>
+       </target>
+ 
+       <!-- 
===================================================================== -->
 diff --git 
a/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/src/org/eclipse/mylyn/internal/discovery/ui/DiscoveryUi.java
 
b/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/src/org/eclipse/mylyn/internal/discovery/ui/DiscoveryUi.java
 index b76e697..45174f5 100644
 --- 
a/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/src/org/eclipse/mylyn/internal/discovery/ui/DiscoveryUi.java
@@ -481,434 +71,3 @@ index b76e697..45174f5 100644
        }
  
        public static boolean install(List<ConnectorDescriptor> descriptors, 
IRunnableContext context) {
-diff --git 
a/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/src/org/eclipse/mylyn/internal/discovery/ui/PrepareInstallProfileJob_e_3_6.java
 
b/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/src/org/eclipse/mylyn/internal/discovery/ui/PrepareInstallProfileJob_e_3_6.java
-new file mode 100644
-index 0000000..afaa427
---- /dev/null
-+++ 
b/org.eclipse.mylyn.commons/org.eclipse.mylyn.discovery.ui/src/org/eclipse/mylyn/internal/discovery/ui/PrepareInstallProfileJob_e_3_6.java
-@@ -0,0 +1,425 @@
-+/*******************************************************************************
-+ * Copyright (c) 2009, 2010 Tasktop Technologies and others.
-+ * 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:
-+ *     Tasktop Technologies - initial API and implementation
-+ 
*******************************************************************************/
-+package org.eclipse.mylyn.internal.discovery.ui;
-+
-+import java.lang.reflect.InvocationTargetException;
-+import java.net.MalformedURLException;
-+import java.net.URI;
-+import java.net.URISyntaxException;
-+import java.net.URL;
-+import java.util.ArrayList;
-+import java.util.Arrays;
-+import java.util.HashMap;
-+import java.util.HashSet;
-+import java.util.Iterator;
-+import java.util.List;
-+import java.util.Map;
-+import java.util.Set;
-+import java.util.regex.Pattern;
-+
-+import org.eclipse.core.runtime.CoreException;
-+import org.eclipse.core.runtime.IProgressMonitor;
-+import org.eclipse.core.runtime.IStatus;
-+import org.eclipse.core.runtime.OperationCanceledException;
-+import org.eclipse.core.runtime.Status;
-+import org.eclipse.core.runtime.SubMonitor;
-+import org.eclipse.core.runtime.SubProgressMonitor;
-+import org.eclipse.equinox.internal.p2.ui.ProvUI;
-+import org.eclipse.equinox.p2.core.ProvisionException;
-+import org.eclipse.equinox.p2.engine.IProfile;
-+import org.eclipse.equinox.p2.metadata.IInstallableUnit;
-+import org.eclipse.equinox.p2.metadata.Version;
-+import org.eclipse.equinox.p2.operations.InstallOperation;
-+import org.eclipse.equinox.p2.operations.ProvisioningSession;
-+import org.eclipse.equinox.p2.operations.RepositoryTracker;
-+import org.eclipse.equinox.p2.operations.UninstallOperation;
-+import org.eclipse.equinox.p2.query.IQuery;
-+import org.eclipse.equinox.p2.query.IQueryResult;
-+import org.eclipse.equinox.p2.query.QueryUtil;
-+import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
-+import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
-+import org.eclipse.equinox.p2.ui.ProvisioningUI;
-+import org.eclipse.jface.dialogs.MessageDialog;
-+import org.eclipse.mylyn.internal.discovery.core.model.ConnectorDescriptor;
-+import org.eclipse.mylyn.internal.discovery.ui.AbstractInstallJob;
-+import org.eclipse.mylyn.internal.discovery.ui.DiscoveryUi;
-+import org.eclipse.mylyn.internal.discovery.ui.InstalledItem;
-+import org.eclipse.mylyn.internal.discovery.ui.UninstallRequest;
-+import org.eclipse.mylyn.internal.discovery.ui.util.DiscoveryUiUtil;
-+import org.eclipse.mylyn.internal.discovery.ui.wizards.Messages;
-+import org.eclipse.osgi.util.NLS;
-+import org.eclipse.swt.widgets.Display;
-+
-+/**
-+ * A job that configures a p2 {@link #getInstallAction() install action} for 
installing one or more
-+ * {@link ConnectorDescriptor connectors}. The bulk of the installation work 
is done by p2; this class just sets up the
-+ * p2 repository meta-data and selects the appropriate features to install. 
After running the job the
-+ * {@link #getInstallAction() install action} must be run to perform the 
installation.
-+ * 
-+ * @author David Green
-+ * @author Steffen Pingel
-+ */
-+class PrepareInstallProfileJob_e_3_6 extends AbstractInstallJob {
-+
-+      private final List<ConnectorDescriptor> installableConnectors;
-+
-+      private final ProvisioningUI provisioningUI;
-+
-+      private Set<URI> repositoryLocations;
-+
-+      public PrepareInstallProfileJob_e_3_6(List<ConnectorDescriptor> 
installableConnectors) {
-+              if (installableConnectors == null) {
-+                      throw new IllegalArgumentException();
-+              }
-+              this.installableConnectors = new 
ArrayList<ConnectorDescriptor>(installableConnectors);
-+              this.provisioningUI = ProvisioningUI.getDefaultUI();
-+      }
-+
-+      public void run(IProgressMonitor progressMonitor) throws 
InvocationTargetException, InterruptedException {
-+              if (installableConnectors.isEmpty()) {
-+                      throw new IllegalArgumentException();
-+              }
-+
-+              try {
-+                      SubMonitor monitor = 
SubMonitor.convert(progressMonitor, 
Messages.InstallConnectorsJob_task_configuring,
-+                                      100);
-+                      try {
-+                              final IInstallableUnit[] ius = 
computeInstallableUnits(monitor.newChild(50));
-+
-+                              checkCancelled(monitor);
-+
-+                              final InstallOperation installOperation = 
resolveInstall(monitor.newChild(50), ius,
-+                                              repositoryLocations.toArray(new 
URI[0]));
-+
-+                              checkCancelled(monitor);
-+
-+                              Display.getDefault().asyncExec(new Runnable() {
-+                                      public void run() {
-+                                              
provisioningUI.openInstallWizard(Arrays.asList(ius), installOperation, null);
-+                                      }
-+                              });
-+                      } finally {
-+                              monitor.done();
-+                      }
-+              } catch (OperationCanceledException e) {
-+                      throw new InterruptedException();
-+              } catch (Exception e) {
-+                      throw new InvocationTargetException(e);
-+              }
-+      }
-+
-+      @Override
-+      public IStatus uninstall(UninstallRequest request, IProgressMonitor 
progressMonitor)
-+                      throws InvocationTargetException, InterruptedException {
-+              IProfile profile = 
ProvUI.getProfileRegistry(ProvisioningUI.getDefaultUI().getSession()).getProfile(
-+                              ProvisioningUI.getDefaultUI().getProfileId());
-+              if (profile == null) {
-+                      throw new IllegalStateException("No valid profile 
defined");
-+              }
-+
-+              try {
-+                      SubMonitor monitor = 
SubMonitor.convert(progressMonitor, 
Messages.InstallConnectorsJob_task_configuring,
-+                                      100);
-+                      try {
-+                              repositoryLocations = new 
HashSet<URI>(Arrays.asList(provisioningUI.getRepositoryTracker()
-+                                              
.getKnownRepositories(provisioningUI.getSession())));
-+
-+                              final List<IInstallableUnit> ius = new 
ArrayList<IInstallableUnit>();
-+                              IQueryResult<IInstallableUnit> result = 
profile.available(QueryUtil.createIUGroupQuery(), monitor);
-+                              for (Iterator<IInstallableUnit> it = 
result.iterator(); it.hasNext();) {
-+                                      IInstallableUnit iu = it.next();
-+                                      try {
-+                                              org.osgi.framework.Version 
version = new org.osgi.framework.Version(iu.getVersion()
-+                                                              .getOriginal());
-+                                              InstalledItem<IInstallableUnit> 
item = new InstalledItem<IInstallableUnit>(iu, iu.getId(),
-+                                                              version);
-+                                              if (request.select(item)) {
-+                                                      ius.add(iu);
-+                                              }
-+                                      } catch (IllegalArgumentException e) {
-+                                              // ignore
-+                                      }
-+                              }
-+
-+                              checkCancelled(monitor);
-+
-+                              if (ius.size() == 0) {
-+                                      return Status.CANCEL_STATUS;
-+                              }
-+
-+                              final UninstallOperation uninstallOperation = 
resolveUninstall(monitor.newChild(50),
-+                                              ius.toArray(new 
IInstallableUnit[0]), repositoryLocations.toArray(new URI[0]));
-+
-+                              checkCancelled(monitor);
-+
-+                              return 
uninstallOperation.getProvisioningJob(null).runModal(monitor);
-+                      } finally {
-+                              monitor.done();
-+                      }
-+              } catch (OperationCanceledException e) {
-+                      throw new InterruptedException();
-+              } catch (Exception e) {
-+                      throw new InvocationTargetException(e);
-+              }
-+      }
-+
-+      private void checkCancelled(IProgressMonitor monitor) {
-+              if (monitor.isCanceled()) {
-+                      throw new OperationCanceledException();
-+              }
-+      }
-+
-+      private UninstallOperation resolveUninstall(IProgressMonitor monitor, 
final IInstallableUnit[] ius,
-+                      URI[] repositories) throws CoreException {
-+              final UninstallOperation uninstallOperation = 
provisioningUI.getUninstallOperation(Arrays.asList(ius),
-+                              repositories);
-+              IStatus operationStatus = uninstallOperation.resolveModal(new 
SubProgressMonitor(monitor,
-+                              installableConnectors.size()));
-+              if (operationStatus.getSeverity() > IStatus.WARNING) {
-+                      throw new CoreException(operationStatus);
-+              }
-+              return uninstallOperation;
-+      }
-+
-+      private InstallOperation resolveInstall(IProgressMonitor monitor, final 
IInstallableUnit[] ius, URI[] repositories)
-+                      throws CoreException {
-+              final InstallOperation installOperation = 
provisioningUI.getInstallOperation(Arrays.asList(ius), repositories);
-+              IStatus operationStatus = installOperation.resolveModal(new 
SubProgressMonitor(monitor,
-+                              installableConnectors.size()));
-+              if (operationStatus.getSeverity() > IStatus.WARNING) {
-+                      throw new CoreException(operationStatus);
-+              }
-+              return installOperation;
-+      }
-+
-+      public IInstallableUnit[] computeInstallableUnits(SubMonitor monitor) 
throws CoreException {
-+              try {
-+                      monitor.setWorkRemaining(100);
-+                      // add repository urls and load meta data
-+                      List<IMetadataRepository> repositories = 
addRepositories(monitor.newChild(50));
-+                      final List<IInstallableUnit> installableUnits = 
queryInstallableUnits(monitor.newChild(50), repositories);
-+                      removeOldVersions(installableUnits);
-+                      checkForUnavailable(installableUnits);
-+                      return installableUnits.toArray(new 
IInstallableUnit[installableUnits.size()]);
-+
-+//                    MultiStatus status = new 
MultiStatus(DiscoveryUi.ID_PLUGIN, 0, Messages.PrepareInstallProfileJob_ok, 
null);
-+//                    ius = installableUnits.toArray(new 
IInstallableUnit[installableUnits.size()]);
-+//                    ProfileChangeRequest profileChangeRequest = 
InstallAction.computeProfileChangeRequest(ius, profileId,
-+//                                    status, new SubProgressMonitor(monitor, 
installableConnectors.size()));
-+//                    if (status.getSeverity() > IStatus.WARNING) {
-+//                            throw new CoreException(status);
-+//                    }
-+//                    if (profileChangeRequest == null) {
-+//                            // failed but no indication as to why
-+//                            throw new CoreException(new 
Status(IStatus.ERROR, DiscoveryUi.ID_PLUGIN,
-+//                                            
Messages.PrepareInstallProfileJob_computeProfileChangeRequestFailed, null));
-+//                    }
-+//                    PlannerResolutionOperation operation = new 
PlannerResolutionOperation(
-+//                                    
Messages.PrepareInstallProfileJob_calculatingRequirements, profileId, 
profileChangeRequest, null,
-+//                                    status, true);
-+//                    IStatus operationStatus = operation.execute(new 
SubProgressMonitor(monitor, installableConnectors.size()));
-+//                    if (operationStatus.getSeverity() > IStatus.WARNING) {
-+//                            throw new CoreException(operationStatus);
-+//                    }
-+//
-+//                    plannerResolutionOperation = operation;
-+
-+              } catch (URISyntaxException e) {
-+                      // should never happen, since we already validated URLs.
-+                      throw new CoreException(new Status(IStatus.ERROR, 
DiscoveryUi.ID_PLUGIN,
-+                                      
Messages.InstallConnectorsJob_unexpectedError_url, e));
-+              } catch (MalformedURLException e) {
-+                      // should never happen, since we already validated URLs.
-+                      throw new CoreException(new Status(IStatus.ERROR, 
DiscoveryUi.ID_PLUGIN,
-+                                      
Messages.InstallConnectorsJob_unexpectedError_url, e));
-+              } finally {
-+                      monitor.done();
-+              }
-+      }
-+
-+      /**
-+       * Verifies that we found what we were looking for: it's possible that 
we have connector descriptors that are no
-+       * longer available on their respective sites. In that case we must 
inform the user. Unfortunately this is the
-+       * earliest point at which we can know.
-+       */
-+      private void checkForUnavailable(final List<IInstallableUnit> 
installableUnits) throws CoreException {
-+              // at least one selected connector could not be found in a 
repository
-+              Set<String> foundIds = new HashSet<String>();
-+              for (IInstallableUnit unit : installableUnits) {
-+                      foundIds.add(unit.getId());
-+              }
-+
-+              String message = ""; //$NON-NLS-1$
-+              String detailedMessage = ""; //$NON-NLS-1$
-+              for (ConnectorDescriptor descriptor : installableConnectors) {
-+                      StringBuilder unavailableIds = null;
-+                      for (String id : descriptor.getInstallableUnits()) {
-+                              if (!foundIds.contains(id)) {
-+                                      if (unavailableIds == null) {
-+                                              unavailableIds = new 
StringBuilder();
-+                                      } else {
-+                                              
unavailableIds.append(Messages.InstallConnectorsJob_commaSeparator);
-+                                      }
-+                                      unavailableIds.append(id);
-+                              }
-+                      }
-+                      if (unavailableIds != null) {
-+                              if (message.length() > 0) {
-+                                      message += 
Messages.InstallConnectorsJob_commaSeparator;
-+                              }
-+                              message += descriptor.getName();
-+
-+                              if (detailedMessage.length() > 0) {
-+                                      detailedMessage += 
Messages.InstallConnectorsJob_commaSeparator;
-+                              }
-+                              detailedMessage += 
NLS.bind(Messages.PrepareInstallProfileJob_notFoundDescriptorDetail, new 
Object[] {
-+                                              descriptor.getName(), 
unavailableIds.toString(), descriptor.getSiteUrl() });
-+                      }
-+              }
-+
-+              if (message.length() > 0) {
-+                      // instead of aborting here we ask the user if they 
wish to proceed anyways
-+                      final boolean[] okayToProceed = new boolean[1];
-+                      final String finalMessage = message;
-+                      Display.getDefault().syncExec(new Runnable() {
-+                              public void run() {
-+                                      okayToProceed[0] = 
MessageDialog.openQuestion(DiscoveryUiUtil.getShell(),
-+                                                      
Messages.InstallConnectorsJob_questionProceed,
-+                                                      
NLS.bind(Messages.InstallConnectorsJob_questionProceed_long, new Object[] { 
finalMessage }));
-+                              }
-+                      });
-+                      if (!okayToProceed[0]) {
-+                              throw new CoreException(new 
Status(IStatus.ERROR, DiscoveryUi.ID_PLUGIN, NLS.bind(
-+                                              
Messages.InstallConnectorsJob_connectorsNotAvailable, detailedMessage), null));
-+                      }
-+              }
-+      }
-+
-+      /**
-+       * Filters those installable units that have a duplicate in the list 
with a higher version number. it's possible
-+       * that some repositories will host multiple versions of a particular 
feature. we assume that the user wants the
-+       * highest version.
-+       */
-+      private void removeOldVersions(final List<IInstallableUnit> 
installableUnits) {
-+              Map<String, Version> symbolicNameToVersion = new 
HashMap<String, Version>();
-+              for (IInstallableUnit unit : installableUnits) {
-+                      Version version = 
symbolicNameToVersion.get(unit.getId());
-+                      if (version == null || 
version.compareTo(unit.getVersion()) < 0) {
-+                              symbolicNameToVersion.put(unit.getId(), 
unit.getVersion());
-+                      }
-+              }
-+              if (symbolicNameToVersion.size() != installableUnits.size()) {
-+                      for (IInstallableUnit unit : new 
ArrayList<IInstallableUnit>(installableUnits)) {
-+                              Version version = 
symbolicNameToVersion.get(unit.getId());
-+                              if (!version.equals(unit.getVersion())) {
-+                                      installableUnits.remove(unit);
-+                              }
-+                      }
-+              }
-+      }
-+
-+      /**
-+       * Perform a query to get the installable units. This causes p2 to 
determine what features are available in each
-+       * repository. We select installable units by matching both the feature 
id and the repository; it is possible though
-+       * unlikely that the same feature id is available from more than one of 
the selected repositories, and we must
-+       * ensure that the user gets the one that they asked for.
-+       */
-+      private List<IInstallableUnit> queryInstallableUnits(SubMonitor 
monitor, List<IMetadataRepository> repositories)
-+                      throws URISyntaxException {
-+              final List<IInstallableUnit> installableUnits = new 
ArrayList<IInstallableUnit>();
-+
-+              monitor.setWorkRemaining(repositories.size());
-+              for (final IMetadataRepository repository : repositories) {
-+                      checkCancelled(monitor);
-+                      final Set<String> installableUnitIdsThisRepository = 
getDescriptorIds(repository);
-+                      IQuery<IInstallableUnit> query = 
QueryUtil.createIUGroupQuery();
-+                      IQueryResult<IInstallableUnit> result = 
repository.query(query, monitor.newChild(1));
-+                      for (Iterator<IInstallableUnit> iter = 
result.iterator(); iter.hasNext();) {
-+                              IInstallableUnit iu = iter.next();
-+                              String id = iu.getId();
-+                              if 
(installableUnitIdsThisRepository.contains(id)) {
-+                                      installableUnits.add(iu);
-+                              }
-+                      }
-+              }
-+              return installableUnits;
-+      }
-+
-+      private List<IMetadataRepository> addRepositories(SubMonitor monitor) 
throws MalformedURLException,
-+                      URISyntaxException, ProvisionException {
-+              // tell p2 that it's okay to use these repositories
-+              ProvisioningSession session = 
ProvisioningUI.getDefaultUI().getSession();
-+              RepositoryTracker repositoryTracker = 
ProvisioningUI.getDefaultUI().getRepositoryTracker();
-+              repositoryLocations = new HashSet<URI>();
-+              monitor.setWorkRemaining(installableConnectors.size() * 5);
-+              for (ConnectorDescriptor descriptor : installableConnectors) {
-+                      URI uri = new URL(descriptor.getSiteUrl()).toURI();
-+                      if (repositoryLocations.add(uri)) {
-+                              checkCancelled(monitor);
-+                              repositoryTracker.addRepository(uri, null, 
session);
-+                      }
-+                      monitor.worked(1);
-+              }
-+
-+              // add selected repositories to resolve dependencies 
-+              URI[] knownRepositories = 
repositoryTracker.getKnownRepositories(session);
-+              if (knownRepositories != null) {
-+                      for (URI uri : knownRepositories) {
-+                              if 
(Pattern.matches("http://download.eclipse.org/releases/.*";, uri.toString())) {
-+                                      repositoryLocations.add(uri);
-+                              }
-+                      }
-+              }
-+
-+              // fetch meta-data for these repositories
-+              ArrayList<IMetadataRepository> repositories = new 
ArrayList<IMetadataRepository>();
-+              monitor.setWorkRemaining(repositories.size());
-+              IMetadataRepositoryManager manager = 
(IMetadataRepositoryManager) session.getProvisioningAgent().getService(
-+                              IMetadataRepositoryManager.SERVICE_NAME);
-+              for (URI uri : repositoryLocations) {
-+                      checkCancelled(monitor);
-+                      IMetadataRepository repository = 
manager.loadRepository(uri, monitor.newChild(1));
-+                      repositories.add(repository);
-+              }
-+              return repositories;
-+      }
-+
-+      private Set<String> getDescriptorIds(final IMetadataRepository 
repository) throws URISyntaxException {
-+              final Set<String> installableUnitIdsThisRepository = new 
HashSet<String>();
-+              // determine all installable units for this repository
-+              for (ConnectorDescriptor descriptor : installableConnectors) {
-+                      try {
-+                              if (repository.getLocation().equals(new 
URL(descriptor.getSiteUrl()).toURI())) {
-+                                      
installableUnitIdsThisRepository.addAll(descriptor.getInstallableUnits());
-+                              }
-+                      } catch (MalformedURLException e) {
-+                              // will never happen, ignore
-+                      }
-+              }
-+              return installableUnitIdsThisRepository;
-+      }
-+
-+      @Override
-+      public Set<String> getInstalledFeatures(IProgressMonitor monitor) {
-+              Set<String> features = new HashSet<String>();
-+              IProfile profile = 
ProvUI.getProfileRegistry(ProvisioningUI.getDefaultUI().getSession()).getProfile(
-+                              ProvisioningUI.getDefaultUI().getProfileId());
-+              if (profile != null) {
-+                      IQueryResult<IInstallableUnit> result = 
profile.available(QueryUtil.createIUGroupQuery(), monitor);
-+                      for (Iterator<IInstallableUnit> it = result.iterator(); 
it.hasNext();) {
-+                              IInstallableUnit unit = it.next();
-+                              features.add(unit.getId());
-+                      }
-+              }
-+              return features;
-+      }
-+
-+}

-- 
eclipse-mylyn - Plug-in for eclipse - Debian package.

_______________________________________________
pkg-java-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-java-commits

Reply via email to